-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathserver.py
More file actions
85 lines (65 loc) · 2.71 KB
/
Copy pathserver.py
File metadata and controls
85 lines (65 loc) · 2.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import asyncio
def run_server(host, port):
class User:
def __init__(self, transport, peername):
self.user_transport = transport
self.user_peername = peername
self.user_name = None
self.count = 0
class ClientServerProtocol(asyncio.Protocol):
active_users = []
def connection_made(self, transport):
self.peername = transport.get_extra_info('peername')
print('New connection from {}'.format(self.peername))
self.transport = transport
self.data = b""
user = User(self.transport, self.peername)
self.active_users.append(user)
str = "\nMicro chat V1 by ryseek and kupreeva \n"
self.transport.write(str.encode())
self.transport.write('What is your name?\n'.encode())
def connection_lost(self, exc):
str = "left our group \n"
self.process_data(str)
for user in self.active_users:
if user.user_transport == self.transport:
self.active_users.remove(user)
print('Close connection from {}'.format(user.user_name))
def data_received(self, data):
if self.data:
data = self.data + data
self.data = b""
self.process_data(data.decode('utf-8'))
def process_data(self, data):
perenos = data[len(data)-1:len(data)]
if perenos == "\r" or perenos == "\n":
data = data[:len(data)-1]
perenos = data[len(data) - 1:len(data)]
if perenos == "\r" or perenos == "\n":
data = data[:len(data) - 1]
userName = ''
for user in self.active_users:
if user.user_transport == self.transport:
user.count = user.count + 1
if user.count == 1:
user.user_name = data
print(self.peername)
print(user.user_name)
userName = user.user_name
for user in self.active_users:
if user.user_transport != self.transport:
str = "[{}]: ".format(userName) + data + "\n"
else:
str = ">>"
user.user_transport.write(str.encode())
loop = asyncio.get_event_loop()
coro = loop.create_server(ClientServerProtocol, host, port)
server = loop.run_until_complete(coro)
try:
loop.run_forever()
except KeyboardInterrupt:
pass
server.close()
loop.run_until_complete(server.wait_closed())
loop.close()
run_server("192.168.31.253", 8888) # enter your ip adress here