Passed
Push — main ( 2c4d8b...1c3107 )
by Yohann
01:53 queued 11s
created

client.Client.fetch_new_messages()   A

Complexity

Conditions 5

Size

Total Lines 17
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 13
dl 0
loc 17
rs 9.2833
c 0
b 0
f 0
cc 5
nop 1
1
import errno
2
import sys
3
import uuid
4
5
HEADER_LENGTH = 10
6
7
8
class Client:
9
10
    def __init__(self, client_socket):
11
        self.name = f"client {uuid.uuid4()}".encode("utf-8")
12
        self.socket = client_socket
13
14
        username_header = f"{len(self.name) : <{HEADER_LENGTH}}".encode("utf-8")
15
        self.socket.send(username_header + self.name)
16
17
        self.send_message = ''
18
19
    def send(self):
20
        message = self.send_message.encode("utf-8")
21
        message_header = f"{len(message) :< {HEADER_LENGTH}}".encode("utf-8")
22
        self.socket.send(message_header + message)
23
        self.send_message = ''
24
25
    def retrieve_next_message(self, new_messages):
26
        username_header = self.socket.recv(HEADER_LENGTH)
27
        if not len(username_header):
28
            print("Connection closed by the server")
29
            sys.exit()
30
31
        username_length = int(username_header.decode("utf-8").strip())
32
        username = self.socket.recv(username_length).decode("utf-8")
33
34
        message_header = self.socket.recv(HEADER_LENGTH)
35
        message_length = int(message_header.decode("utf-8").strip())
36
        message = self.socket.recv(message_length).decode("utf-8")
37
38
        new_messages.append({'author': username, 'content': message})
39
40
    def fetch_new_messages(self):
41
        new_messages = []
42
43
        try:
44
            while True:
45
                self.retrieve_next_message(new_messages)
46
47
        except IOError as e:
48
            if e.errno not in [errno.EAGAIN, errno.EWOULDBLOCK]:
49
                print("reading error", str(e))
50
                sys.exit()
51
52
            return new_messages
53
54
        except Exception as e:
55
            print("general error", str(e))
56
            sys.exit()
57