-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathclient.py
More file actions
72 lines (61 loc) · 2.32 KB
/
Copy pathclient.py
File metadata and controls
72 lines (61 loc) · 2.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
"""Программа-клиент"""
import sys
import json
import socket
import time
from common.variables import ACTION, PRESENCE, TIME, USER, ACCOUNT_NAME, \
RESPONSE, ERROR, DEFAULT_IP_ADDRESS, DEFAULT_PORT
from common.utils import get_message, send_message
def create_new_presence(account_name='Guest'):
"""
Функция генерирует запрос о присутствии клиента
:param account_name: Guest - имя аккаунта по умолчанию
:return: out: возвращает сгенерированный словарь словарь
"""
# {'action': 'presence', 'time': 1573760672.167031, 'user': {'account_name': 'Guest'}}
out = {
ACTION: PRESENCE,
TIME: time.time(),
USER: {
ACCOUNT_NAME: account_name
}
}
return out
def process_answer(message):
"""
Функция разбирает ответ сервера
:param message: проверяется код ответа от сервера
:return:
"""
if RESPONSE in message:
if message[RESPONSE] == 200:
return '200 : OK'
return f'400 : {message[ERROR]}'
raise ValueError
def main():
"""Загружаем параметы коммандной строки"""
# client.py 192.168.1.2 8079
try:
server_addr = sys.argv[1]
server_port = int(sys.argv[2])
if server_port < 1024 or server_port > 65535:
raise ValueError
except IndexError:
server_addr = DEFAULT_IP_ADDRESS
server_port = DEFAULT_PORT
except ValueError:
print(
'В качестве порта может быть указано только число в диапазоне от 1024 до 65535.')
sys.exit(1)
# Инициализация сокета и обмен
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((server_addr, server_port))
message_to_server = create_new_presence()
send_message(client_socket, message_to_server)
try:
answer = process_answer(get_message(client_socket))
print(answer)
except (ValueError, json.JSONDecodeError):
print('Не удалось декодировать сообщение сервера.')
if __name__ == '__main__':
main()