Skip to content

Commit e31263c

Browse files
author
Jefferson Stachelski
committed
Refactors Client class
Break the method in other so separeted the logic
1 parent bd47dbc commit e31263c

File tree

2 files changed

+34
-22
lines changed

2 files changed

+34
-22
lines changed

Diff for: gpg_group_chat/client/client.py

+25-20
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import select
22
import socket
33
import sys
4-
import threading
54

65

76
class Client():
@@ -23,27 +22,33 @@ def start(self, server_port, server_ip):
2322
self._handle_messages()
2423

2524
def _handle_messages(self):
26-
socket_list = [sys.stdin, self._socket]
25+
input_list = [sys.stdin, self._socket]
2726
self._prompt()
2827
while self._working:
29-
ready_to_read, _, _ = select.select(socket_list, [], [])
30-
for sock in ready_to_read:
31-
if sock == self._socket:
32-
# incoming message from remote server
33-
data = sock.recv(4096)
34-
if not data:
35-
print('\nDisconnected from chat server')
36-
sys.exit(0)
37-
else:
38-
# print data
39-
sys.stdout.write(data.decode('utf-8'))
40-
self._prompt()
41-
else:
42-
# user entered a message
43-
msg = '[*] %s' % sys.stdin.readline()
44-
self._socket.send(msg.encode('utf-8'))
45-
self._prompt()
28+
ready_to_read, _, _ = select.select(input_list, [], [])
29+
self._handle_input_channel(ready_to_read)
30+
31+
def _handle_input_channel(self, ready_to_read):
32+
for input_channel in ready_to_read:
33+
if input_channel is self._socket:
34+
self._receive_data_from_server()
35+
else:
36+
self._send_message_to_server()
37+
38+
def _receive_data_from_server(self):
39+
data = self._socket.recv(4096)
40+
if not data:
41+
print('\nDisconnected from chat server')
42+
sys.exit(0)
43+
else:
44+
print(data.decode('utf-8'))
45+
self._prompt()
46+
47+
def _send_message_to_server(self):
48+
msg = '[*] %s' % input()
49+
self._socket.send(msg.encode('utf-8'))
50+
self._prompt()
4651

4752
def _prompt(self):
48-
sys.stdout.write('[Me] ')
53+
print('[Me] ', end='')
4954
sys.stdout.flush()

Diff for: test/client/client_test.py

+9-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
from gpg_group_chat.client.client import Client
2+
from socket import socket as SocketType
23
from unittest import TestCase
3-
from unittest.mock import patch
44
from unittest.mock import Mock
5-
from socket import socket as SocketType
5+
from unittest.mock import patch
66
import sys
77

88

@@ -79,3 +79,10 @@ def side_effect(size):
7979

8080
self.print_stdout.assert_any_call('\nDisconnected from chat server')
8181
self.exit.assert_called_once_with(0)
82+
83+
def test_the_prompt_meyhod_does_not_print_with_break_line_char(self):
84+
def side_effect(txt):
85+
assert not txt.endswith('\n')
86+
87+
self.print_stdout.side_effect = side_effect
88+
self.client._prompt()

0 commit comments

Comments
 (0)