forked from nithyashree05/instant-messaging-app
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.py
81 lines (46 loc) · 1.79 KB
/
server.py
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
import socket
import threading
import mysql.connector as ms
s=socket.socket()
HOST =socket.gethostname()
PORT = 1234
LISTENER_LIMIT = 5
active_clients = []
def listen_for_messages(client, username):
while 1:
message = client.recv(2048).decode('utf-8')
if message != '':
final_msg = username + '~' + message
send_messages_to_all(final_msg)
else:
print(f"The message send from client {username} is empty")
def send_message_to_client(client, message):
client.sendall(message.encode())
def send_messages_to_all(message):
for user in active_clients:
send_message_to_client(user[1], message)
def client_handler(client):
while 1:
username = client.recv(2048).decode('utf-8')
if username != '':
active_clients.append((username, client))
prompt_message = "SERVER~" + f"{username} added to the chat"
send_messages_to_all(prompt_message)
break
else:
print("Client username is empty")
threading.Thread(target=listen_for_messages, args=(client, username, )).start()
def main():
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
server.bind((HOST, PORT))
print(f"Running the server on {HOST} {PORT}")
except:
print(f"Unable to bind to host {HOST} and port {PORT}")
server.listen(LISTENER_LIMIT)
while 1:
client, address = server.accept()
print(f"Successfully connected to client {address[0]} {address[1]}")
threading.Thread(target=client_handler, args=(client, )).start()
if __name__ == '__main__':
main()