-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathclientthread.py
44 lines (39 loc) · 1.33 KB
/
clientthread.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
from socket import socket
import threading
import re
import time
class ClientListener(threading.Thread):
def __init__(self, server, socket, address):
super(ClientListener, self).__init__()
self.server= server
self.socket= socket
self.address= address
self.listening= True
self.username= "No username"
def run(self):
while self.listening:
data= ""
try:
data = self.socket.recv(1024).decode('UTF-8')
except Exception as e:
print("Unable to receive data: {}".format(e))
self.handle_msg(data)
time.sleep(0.1)
print("Ending client thread for", self.address)
def quit(self):
self.listening = False
self.socket.close()
self.server.remove_socket(self.socket)
self.server.echo("{0} has quit\n".format(self.username))
def handle_msg(self, data):
print(self.address, "sent :", data)
username_result = re.search('^USERNAME (.*)$', data)
if username_result:
self.username = username_result.group(1)
self.server.echo("{0} has joined.\n".format(self.username))
elif data == "QUIT":
self.quit()
elif data == "":
self.quit()
else:
self.server.echo(data)