Advertisement
pegorino

client

Dec 23rd, 2017
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.80 KB | None | 0 0
  1. import socket
  2. import json
  3. import time
  4. import sys
  5.  
  6. from cmd_utils import command_client
  7. from log_config import client_log
  8.  
  9. HOST = '127.0.0.1'
  10. PORT = 7777
  11.  
  12. CODING = 'utf-8'
  13. ACTION = 'presence'
  14. TIME = time.time()
  15. USERNAME = 'Evgeny'
  16. PASSWORD = 1
  17. TEST_MESSAGE = 'Hello, server!'
  18.  
  19. TEMPLATE = {'action': ACTION,
  20. 'time': TIME,
  21. 'type': '',
  22. 'to': '',
  23. 'from': '',
  24. 'message': '',
  25. 'encoding': CODING,
  26. 'user': {
  27. 'account_name': USERNAME,
  28. 'password': PASSWORD
  29. }
  30. }
  31.  
  32.  
  33. # делает сообщение
  34. @client_log
  35. def make_request(text, type='msg', to='', from_=''):
  36. '''
  37. возвращает словарь по шаблону TEMPLATE
  38. :param text: текст сообщения в поле 'message'
  39. :param type: по умолчанию - текстовое сообщение
  40. :param to: кому адресовано сообщение (# - для группы)
  41. :param from_: от кого 7??
  42. :return:
  43. '''
  44. message = TEMPLATE
  45. message['message'] = text
  46. return message
  47.  
  48.  
  49. # отправляет сообщение(request) на сервер
  50. @client_log
  51. def send_request(sock, message):
  52. if isinstance(sock, socket.socket):
  53. try:
  54. message_ = json.dumps(message).encode(CODING)
  55. sock.send(message_)
  56. return True
  57. except socket.error:
  58. print('Возникла ошибка при попытке отправить сообщение на сервер')
  59. return False
  60.  
  61.  
  62. # определиться, что передавать в аргументы
  63. # принимает ответ(response) от сервера
  64. @client_log
  65. def get_response(sock, size=1024):
  66. if isinstance(sock, socket.socket):
  67. try:
  68. message = sock.recv(size)
  69. return message
  70. except socket.error:
  71. print('Возникла ошибка при получении сообщений от сервера')
  72. return False
  73.  
  74.  
  75. # разбирает ответ с сервера
  76. # определиться, что будет возвращать
  77. @client_log
  78. def parse_response(message):
  79. '''
  80. разбирает полученное с сервера сообщение
  81. :param message: сообщение в byte
  82. :return: ???сообщение в dict, или кортеж со значениями по определенным ключам из dict???
  83. '''
  84. if isinstance(message, bytes):
  85. try:
  86. parse_message = json.loads(message.decode(CODING))
  87. p_time = time.localtime(parse_message['time'])
  88. parse_message['time'] = time.strftime('%d.%m.%Y - %H:%M:%S', p_time)
  89. if 'alert' in parse_message:
  90. print('{} {} / {}'.format(parse_message['response'], parse_message['alert'], parse_message['time']))
  91. return parse_message['response'], parse_message['alert'], parse_message['time']
  92. elif 'error' in parse_message:
  93. print('{} {} / {}'.format(parse_message['response'], parse_message['error'], parse_message['time']))
  94. return parse_message['response'], parse_message['error'], parse_message['time']
  95. except:
  96. print('Возникла ошибка при обработке ответа от сервера')
  97.  
  98.  
  99. # здесь код
  100. def client_action(params):
  101. sock = socket.socket()
  102. sock.connect(params)
  103.  
  104. request = make_request(TEST_MESSAGE, from_=USERNAME, to=USERNAME)
  105. send_request(sock, request)
  106.  
  107. response = get_response(sock)
  108. parse_response(response)
  109.  
  110. sock.close()
  111.  
  112. if __name__ == '__main__':
  113.  
  114. client_action(command_client(sys.argv))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement