Improve <ctrl+c> interruption

Add clean server disconnection with «quit» keyword

Fix this 2 bugs:
- show message on server when client use <ctrl+c>
- crash after 2 <ctrl+c> in client
This commit is contained in:
Fred Z 2018-02-28 13:50:46 +01:00
parent 8951d7dcd5
commit c863a2c727
2 changed files with 7 additions and 4 deletions

View File

@ -4,8 +4,8 @@
- [x] ~~clean client exit with <ctrl-c>~~ - [x] ~~clean client exit with <ctrl-c>~~
- [x] ~~clean server exit with <ctrl-c>~~ - [x] ~~clean server exit with <ctrl-c>~~
- [x] ~~broadcasting messages to all client connected~~ - [x] ~~broadcasting messages to all client connected~~
- [ ] show message on server when client use <ctrl+c> - [x] ~~show message on server when client use <ctrl+c>~~
- [ ] crash after 2 <ctrl+c> in client - [x] ~~crash after 2 <ctrl+c> in client~~
- [ ] sending welcome message only at 1st client connection - [ ] sending welcome message only at 1st client connection
- [ ] asking/using client-nickname - [ ] asking/using client-nickname
- [ ] client freeze when sending empty string or spaces - [ ] client freeze when sending empty string or spaces

View File

@ -20,7 +20,7 @@ PORT = int(sys.argv[2])
BUFFER = 1024 BUFFER = 1024
MSG_SERVER_CONNECTED = "Serveur connecté @{}:{}" MSG_SERVER_CONNECTED = "Serveur connecté @{}:{}"
MSG_CLOSE_CONNECTION = "\nConnexion vers [{}:{}] fermée" MSG_CLOSE_CONNECTION = "Connexion vers [{}:{}] fermée"
def prompt(): def prompt():
sys.stdout.write('\n[me]:') sys.stdout.write('\n[me]:')
@ -28,7 +28,10 @@ def prompt():
def handler(signum, frame): def handler(signum, frame):
""" Catch <ctrl+c> signal for clean stop""" """ Catch <ctrl+c> signal for clean stop"""
print(MSG_CLOSE_CONNECTION.format(HOST, PORT)) print()
print(MSG_CLOSE_CONNECTION.format(*(SERVER_CONNECTION.getpeername())))
SERVER_CONNECTION.send(b"QUIT")
SERVER_CONNECTION.close()
sys.exit(0) sys.exit(0)
signal.signal(signal.SIGINT, handler) signal.signal(signal.SIGINT, handler)