Ask for username and use it
First client's message is used as usernane in server loging and other clients broadcasting
This commit is contained in:
parent
3c5c169045
commit
870953051d
|
@ -9,7 +9,7 @@
|
|||
- [x] ~~sending welcome message only at 1st client connection FIX #20~~
|
||||
- [x] ~~client freeze when sending empty string or spaces~~
|
||||
- [x] ~~move closing connection at the script's end~~
|
||||
- [ ] asking/using client-nickname
|
||||
- [x] ~~asking/using client-nickname~~
|
||||
- [ ] clean the prompt and std.out a bit messy since broadcasting
|
||||
- [ ] using wlist with select.select for hardening the script
|
||||
- [ ] …
|
||||
|
|
|
@ -13,15 +13,17 @@ PORT = 5555
|
|||
BUFFER = 1024
|
||||
|
||||
MSG_NEW_CLIENT = "Nouveau client: {}"
|
||||
MSG_CLIENT_ID = "Client[{}] {}"
|
||||
MSG_CLIENT_ID = "Client[{}:{} @{name}] {msg}"
|
||||
MSG_CLIENT_DISCONNECTED = "Le client {} c'est deconnecté"
|
||||
MSG_DISCONNECTED = "<À quitté le chat>"
|
||||
MSG_CLOSE_CLIENT = "Fermeture socket client {}"
|
||||
MSG_SERVER_STOP = "Arrêt du serveur"
|
||||
MSG_START_SERVER = "Serveur écoute sur le port {}. <ctrl+c> pour stopper le serveur."
|
||||
MSG_WELCOME = "MSG_WELCOME".encode()
|
||||
MSG_USER_IN = "<entered the chatroom>"
|
||||
MSG_WELCOME = "Welcome. First do something usefull, type your name: ".encode()
|
||||
|
||||
inputs = []
|
||||
user_name = []
|
||||
|
||||
def handler(signum, frame):
|
||||
""" Catch <ctrl+c> signal for clean stop"""
|
||||
|
@ -37,9 +39,9 @@ def handler(signum, frame):
|
|||
|
||||
signal.signal(signal.SIGINT, handler)
|
||||
|
||||
def broadcast(sender, message):
|
||||
def broadcast(sender, name, message):
|
||||
# send message to all clients, except the sender
|
||||
message = "\n~{}:{}~ {msg}".format(*sender.getpeername(), msg=message)
|
||||
message = "\n~{}~ {}".format(name, message)
|
||||
for socket in inputs:
|
||||
if socket != MAIN_CONNECTION and socket != sender:
|
||||
try:
|
||||
|
@ -54,6 +56,7 @@ MAIN_CONNECTION.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
|||
MAIN_CONNECTION.bind((HOST, PORT))
|
||||
MAIN_CONNECTION.listen(5)
|
||||
inputs.append(MAIN_CONNECTION)
|
||||
user_name.append("MAIN_CONNECTION")
|
||||
print(MSG_START_SERVER.format(PORT))
|
||||
|
||||
while 1:
|
||||
|
@ -66,18 +69,34 @@ while 1:
|
|||
if socket == MAIN_CONNECTION:
|
||||
socket_object, socket_addr = socket.accept()
|
||||
inputs.append(socket_object)
|
||||
user_name.append(False)
|
||||
print(MSG_NEW_CLIENT.format(socket_addr))
|
||||
broadcast(socket_object, MSG_NEW_CLIENT.format(socket_addr))
|
||||
socket_object.send(MSG_WELCOME)
|
||||
|
||||
else: # receiving data
|
||||
data = socket.recv(BUFFER).decode().strip()
|
||||
peername = socket.getpeername()
|
||||
s_idx = inputs.index(socket)
|
||||
uname = user_name[s_idx]
|
||||
|
||||
if data.upper() == "QUIT":
|
||||
print(MSG_CLIENT_DISCONNECTED.format(socket.getpeername()))
|
||||
broadcast(socket, MSG_DISCONNECTED)
|
||||
broadcast(socket, uname, MSG_DISCONNECTED)
|
||||
inputs.remove(socket)
|
||||
user_name.pop(s_idx)
|
||||
socket.close()
|
||||
|
||||
elif user_name[s_idx] is False: # setting username
|
||||
# insert username naming rule here
|
||||
user_name[s_idx] = data
|
||||
socket.send("Hi, {}".format(user_name[s_idx]).encode())
|
||||
print(MSG_CLIENT_ID.format(*peername, name=data, msg=""))
|
||||
broadcast(socket, user_name[s_idx], MSG_USER_IN)
|
||||
|
||||
elif data:
|
||||
print(MSG_CLIENT_ID.format(socket.getpeername(), data))
|
||||
broadcast(socket, data)
|
||||
print(MSG_CLIENT_ID.format(*peername, name=uname, msg=data))
|
||||
broadcast(socket, uname, data)
|
||||
|
||||
else:
|
||||
print("Server encountered an unknown case")
|
||||
import pdb; pdb.set_trace()
|
||||
|
|
Loading…
Reference in New Issue
Block a user