Passed
Push — main ( 79ca06...2c4d8b )
by Yohann
01:46 queued 11s
created

client.Client.send()   A

Complexity

Conditions 1

Size

Total Lines 5
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 5
dl 0
loc 5
rs 10
c 0
b 0
f 0
cc 1
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
        if len(self.send_message):
42
            self.send()
43
44
        new_messages = []
45
46
        try:
47
            while True:
48
                self.retrieve_next_message(new_messages)
49
50
        except IOError as e:
51
            if e.errno not in [errno.EAGAIN, errno.EWOULDBLOCK]:
52
                print("reading error", str(e))
53
                sys.exit()
54
55
            return new_messages
56
57
        except Exception as e:
58
            print("general error", str(e))
59
            sys.exit()
60