Passed
Push — main ( e5d7db...d12e93 )
by Yohann
56s
created

client.Client.__init__()   A

Complexity

Conditions 1

Size

Total Lines 8
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

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