-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.py
More file actions
89 lines (64 loc) · 1.88 KB
/
server.py
File metadata and controls
89 lines (64 loc) · 1.88 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
86
87
88
import socket
import threading
import time
class Server:
def __init__(self):
self.soc = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
self.addr = "127.0.0.1"
self.clients = []
self.rooms = []
self.soc.bind((self.addr,9999))
def recv_name(self,conn,addr):
name = conn.recv(1024).decode('utf-8')
return name
def recv_room(self,conn,addr):
name = self.recv_name(conn,addr)
val1 = '0'
val2 = '1'
create_or_join = conn.recv(1024).decode('utf-8')
print(create_or_join)
if(create_or_join == "header:1"):
room_code = conn.recv(1024).decode('utf-8')
print(room_code)
if room_code in self.rooms:
conn.send(val1.encode('utf-8'))
else:
conn.send(val2.encode('utf-8'))
self.rooms.append(room_code)
self.clients.append([conn,room_code,name])
elif(create_or_join == "header:2"):
room_code = conn.recv(1024).decode('utf-8')
if room_code in self.rooms:
conn.send(val2.encode('utf-8'))
for i in self.clients:
if((i[1]== room_code)):
sed = "***"+name+" joined the chat"+"***"
i[0].send(sed.encode('utf-8'))
self.clients.append([conn,room_code,name])
else:
conn.send(val1.encode('utf-8'))
def recv_msg_and_broadcast(self,conn,addr):
self.recv_room(conn,addr)
room_code = 1
name = ""
while True:
msg = conn.recv(1024).decode('utf-8')
for i in self.clients:
if i[0] == conn:
room_code = i[1]
name = i[2]
break
msg_to_send = name+": "+msg
if(len(msg)>0):
for client in self.clients:
if((client[0] != conn) and (client[1] == room_code)):
print("forwording __ msg")
client[0].send(msg_to_send.encode('utf-8'))
def main_server_loop(self):
self.soc.listen()
while True:
conn,add = self.soc.accept()
self.thread2 = threading.Thread(target = self.recv_msg_and_broadcast, args = (conn,add))
self.thread2.start()
s = Server()
s.main_server_loop()