Skip to content

Commit ef2e9bb

Browse files
authored
Client disconnect bug
- shutdown and close connection from client when disconnect - added 0.1 secs. delay before sending userlist, after connection success.
1 parent b342349 commit ef2e9bb

2 files changed

Lines changed: 28 additions & 8 deletions

File tree

client.py

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -92,10 +92,12 @@ def __init__(self, *args, **kwargs):
9292

9393
@property
9494
def enc_pass(self):
95+
""" return enc_pass value """
9596
return self._enc_pass
9697

9798
@enc_pass.setter
9899
def enc_pass(self, x):
100+
""" set enc_pass value """
99101
self._enc_pass = x
100102
self.kripton = Crypton(self._enc_pass)
101103

@@ -106,26 +108,35 @@ def json_to_str(self, j_data):
106108
def connect(self):
107109
""" start connection method """
108110
if not self.is_connected:
109-
self.sck = socket.socket()
110-
LOGGER.info('Connecting...')
111111
try:
112+
self.sck = socket.socket()
113+
self.sck.settimeout(5)
114+
LOGGER.info('Connecting...')
112115
self.sck.connect(self.host_port)
113-
self.is_connected = True
114116
except ConnectionRefusedError:
115117
LOGGER.error('Connection Refused!')
116-
self.is_connected = False
118+
error_message = "Connection Refused!"
117119
except ConnectionAbortedError:
118120
LOGGER.error('Connection Aborted!')
119-
self.is_connected = False
121+
error_message = "Connection Aborted!"
120122
except ConnectionResetError:
121123
LOGGER.error('Connection Reset!')
122-
self.is_connected = False
124+
error_message = "Connection Reset!"
125+
except socket.timeout:
126+
LOGGER.error('Socket Timeout Error')
127+
error_message = "Socket Timeout Error!"
128+
except TimeoutError:
129+
LOGGER.error('Timeout Error')
130+
error_message = "Timeout Error!"
131+
else:
132+
self.sck.settimeout(None)
133+
self.is_connected = True
123134
else:
124135
LOGGER.info('Already Connected')
125136

126137
if not self.is_connected:
127138
self.sck.close()
128-
self.signals.signal_show_dialog_box.emit('Hata', 'Sunucuya erişilemedi!', 'c')
139+
self.signals.signal_show_dialog_box.emit('Error', error_message, 'c')
129140
else:
130141
self.status = True
131142

@@ -182,6 +193,8 @@ def on_disconnect(self, user_data):
182193
self.signals.signal_on_message.emit(self.create_message(username, message, date_time))
183194
self.signals.signal_clear_user_list.emit()
184195

196+
self.sck.shutdown(socket.SHUT_WR)
197+
self.sck.close()
185198
LOGGER.info('Disconnect oldum')
186199
return True
187200

@@ -256,6 +269,7 @@ def listen(self):
256269
try:
257270
j_data = json.loads(data)
258271
except json.JSONDecodeError:
272+
LOGGER.error('json data : %s', data)
259273
LOGGER.error('JSON Error')
260274
continue
261275

server.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,8 @@ def on_connect(self, id, user_socket, user_data):
104104
else:
105105
data = {'action': 'connect', 'username': 'server', 'message': 'Hoşgeldiniz, {0}'.format(username), 'date_time': self.get_date_time(), 'status': True}
106106
user_socket['c'].send(self.json_to_str(data).encode('utf-8'))
107-
107+
108+
time.sleep(0.1)
108109
self.send_user_list()
109110

110111
def on_disconnect(self, id, user_socket, user_data):
@@ -119,7 +120,11 @@ def on_disconnect(self, id, user_socket, user_data):
119120
data = {'action': 'disconnect', 'username': 'server', 'message': 'Güle güle, {0}'.format(username), 'date_time': self.get_date_time(), 'status': True}
120121
user_socket['c'].send(self.json_to_str(data).encode('utf-8'))
121122

123+
# self.connections[id]['c'].shutdown(socket.SHUT_WR)
124+
# self.connections[id]['c'].close()
122125
del self.connections[id]
126+
127+
LOGGER.info('%s kullanıcısı silindi', id)
123128

124129
self.send_user_list()
125130

@@ -176,6 +181,7 @@ def listen(self, id):
176181
try:
177182
j_data = json.loads(data)
178183
except json.JSONDecodeError:
184+
LOGGER.error('json data : %s', data)
179185
LOGGER.error('JSON Error')
180186
continue
181187

0 commit comments

Comments
 (0)