daily pastebin goal
41%
SHARE
TWEET

client

pegorino Dec 23rd, 2017 79 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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))
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top