Passed
Push — main ( d81afb...90f181 )
by Yohann
02:12
created

main   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 96
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 62
dl 0
loc 96
rs 10
c 0
b 0
f 0
wmc 8

4 Functions

Rating   Name   Duplication   Size   Complexity  
A on_message_received() 0 34 3
A on_client_left() 0 8 1
A on_client() 0 5 1
A main() 0 22 3
1
import json
2
import logging
3
4
import dotenv
5
from websocket_server import WebsocketServer
6
7
users = {}
8
9
10
def on_client(client, _srv):
11
    print(
12
        '-> Accepted new connection from',
13
        ':'.join(map(str, client['address'])),
14
        'connected'
15
    )
16
17
18
def on_client_left(client, server):
19
    print('-> Client left:', client['address'])
20
    username = users.pop(client['address'])
21
    server.send_message_to_all(
22
        msg=json.dumps(
23
            {
24
                'type': 'logout',
25
                'username': username
26
            }
27
        )
28
    )
29
30
31
def on_message_received(_client, server, data):
32
    print('-> Received message from', _client['address'], ':', data)
33
34
    data = json.JSONDecoder().decode(data)
35
36
    if data['type'] == 'login':
37
        users[_client['address']] = data['username']
38
        server.send_message_to_all(
39
            msg=json.dumps(
40
                {
41
                    'type': 'login',
42
                    'username': data['username']
43
                }
44
            )
45
        )
46
47
        server.send_message(
48
            client=_client,
49
            msg=json.dumps(
50
                {
51
                    'type': 'users',
52
                    'users': list(users.values())
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable users does not seem to be defined.
Loading history...
53
                }
54
            )
55
        )
56
57
    elif data['type'] == 'message':
58
        print(users[_client['address']])
59
        server.send_message_to_all(
60
            msg=json.dumps(
61
                {
62
                    'type': 'message',
63
                    'username': users[_client['address']],
64
                    'message': data['content']
65
                }
66
            )
67
        )
68
69
70
def main():
71
    config = dotenv.dotenv_values('.env')
72
    port = config.get('port')
73
74
    if not port:
75
        print("No port were specified in the configuration.")
76
        return
77
78
    if not port.isdigit():
79
        print("Port must be a number.")
80
        return
81
82
    server = WebsocketServer(
83
        host=config.get('ip', '0.0.0.0'),
84
        port=int(port),
85
        loglevel=logging.DEBUG
86
    )
87
88
    server.set_fn_new_client(on_client)
89
    server.set_fn_message_received(on_message_received)
90
    server.set_fn_client_left(on_client_left)
91
    server.run_forever()
92
93
94
if __name__ == '__main__':
95
    main()
96