Improves `broadcast()`: linked to `list_sockets()`

Now sends messages only to named-client, and for that uses
`list_sockets()`

Takes sender name from `_user_name` attribute and delete the name
argument from the method
This commit is contained in:
Fred Z 2018-03-11 00:49:05 +01:00
parent 1c5366beb5
commit c075c17172
2 changed files with 19 additions and 13 deletions

View File

@ -77,17 +77,27 @@ class ConnectSocket:
# Print server's activity on console
print(self._MSG_START_SERVER.format(port))
def broadcast(self, sender, name, message):
def broadcast(self, sender, message):
"""
Send a message to all clients but the sender
Send a message to all named-clients but the sender
:param obj sender: socket_object of tne sender
:param str name: name of tne sender
TODO should replace sckt.send() too
:param obj sender: sender socket (or 'server' str() for server)
:param str message: message to send
"""
# Define senders name
if sender == 'server':
name = 'server'.upper()
else:
idx = self._inputs.index(sender)
name = self._user_name[idx].upper()
message = self._BROADCAST_MSG.format(name, message)
for sckt in self._inputs:
if sckt != self._CONNECTION and sckt != sender:
recipients = self.list_sockets(False, False)
for sckt in recipients:
if sckt != sender:
try:
sckt.send(message.encode())
except:
@ -198,9 +208,7 @@ class ConnectSocket:
name=data,
msg="set user name")
)
self.broadcast(
sckt, self._user_name[s_idx], self._MSG_USER_IN
)
self.broadcast(sckt, self._MSG_USER_IN)
elif data.upper() == "QUIT": # client quit network
print(self._SERVER_LOG.format(
@ -208,7 +216,7 @@ class ConnectSocket:
name=uname,
msg="disconnected")
)
self.broadcast(sckt, uname, self._MSG_DISCONNECTED)
self.broadcast(sckt, self._MSG_DISCONNECTED)
self._inputs.remove(sckt)
self._user_name.pop(s_idx)
sckt.close()

View File

@ -67,8 +67,6 @@ while 1:
enough_clients = True
else:
sckt = GAME_NETWORK.list_sockets(False, False)[0]
# envoie le nbre de client aux clients
broadcast_msg = [
MSG_MINIMUM_CLIENT.format(MIN_CLIENT_NB),
@ -78,7 +76,7 @@ while 1:
# envoi les messages
for msg in broadcast_msg:
GAME_NETWORK.broadcast(sckt, "server", msg)
GAME_NETWORK.broadcast("server", msg)
# attend le go d'un des clients
if GAME_NETWORK.message.upper() == "PLAY" and enough_clients: