Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import socket
- import time
- import sys
- from cmd_utils import cmd_client
- from usefull_utils import parse
- from log_config import client_log
- host = 'localhost'
- port = 7777
- CODING = 'utf-8'
- ACTION = 'presence'
- TIME = time.time()
- USERNAME = 'Evgeny'
- PASSWORD = 123456
- TEST_MESSAGE = 'Hello, server! (default)'
- TEMPLATE = {'action': ACTION,
- 'time': TIME,
- 'type': 'text',
- 'to': '#_test_chat_room',
- 'from': '',
- 'message': TEST_MESSAGE,
- 'encoding': CODING,
- 'user': {
- 'account_name': USERNAME,
- 'password': PASSWORD
- }
- }
- @client_log
- def send_request(sock, data):
- '''
- отправляет запрос на сервер
- :param sock:
- :param data:
- :return:
- '''
- if type(sock) == socket.socket:
- # if isinstance(sock, socket.socket):
- try:
- sock.send(data)
- return True
- except socket.error:
- print('Failed to send data!')
- else:
- print('Trying to send data to not socket object!')
- @client_log
- def get_response(sock):
- '''
- получает ответ от сервера
- :param sock:
- :return:
- '''
- if type(sock) == socket.socket:
- try:
- data = sock.recv(1024)
- return data
- except socket.error:
- print('Failed to receive data!')
- else:
- print('Trying to recieve data from not socket object!')
- # здесь код
- def client_action(params):
- flag = params[0]
- host = params[1]
- port = int(params[2])
- print('flag {}'.format(params[0]), end=' / ')
- with socket.socket() as sock:
- sock.connect((host, port))
- # TODO
- # вывести в консоль клиента его имя (уникальный индетификатор), чтобы контролировать от кого приходит запрос на сервере
- print('client\'s port', sock.getsockname()[1])
- if flag == '-w':
- while True:
- text = input('type text (<exit> for exit): ')
- if text == 'exit':
- break
- message = text
- temp = TEMPLATE
- temp['from'] = sock.getsockname()[1]
- temp['message'] = message
- btemp = parse(temp)
- send_request(sock, btemp)
- if flag == '-r':
- try:
- while True:
- m = get_response(sock)
- mess = parse(m)
- t_local = time.localtime(mess['time'])
- t = time.strftime('%d.%m.%Y - %H:%M:%S', t_local)
- print('client {} ({}) send message: {}'.format(mess['message from'], t, mess['text']))
- # ??? не работает на ctrl+C, выключаю клиента ctrl+break
- except KeyboardInterrupt:
- print('Leaved chat!')
- if __name__ == '__main__':
- # запуск на чтение
- # client_action(['-r', host, port, 'some text'])
- # запуск на отправку сообщений
- # client_action(['-w', host, port, 'some text'])
- # запуск из коммандной строки
- client_action(cmd_client(sys.argv))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement