def quit_process(self): message = self.create_close_msg() send_message(socket=self.socket, message=message) logger.info( f'Отправлено уведомление о выходе на сервер (client {self.login}) {message}' ) # response = self.request_queue.get() self.print_response(response) logger.info(f'Произведён выход (client {user.login})') # self.socket.close()
def del_contact(self, login): # нужна проверка на наличие логина в списке контаков пользователя msg = self.create_del_contact_msg(login) send_message(socket=self.socket, message=msg) logger.info( f'Отправлен запрос на удаление контакта (client {self.login} {msg})' ) # response = self.request_queue.get() logger.info(f'Получен ответ от сервера {response}') # return response
def get_contacts(self): """ Запрашивает список контактов и возвращает их с сод ответа""" msg = self.create_get_contact_msg() send_message(socket=self.socket, message=msg) logger.info( f'Отправлен запрос "список контактов" (client {self.login}) {msg}' ) # response = self.request_queue.get() logger.info(f'Получен ответ от сервера {response}') # contacts = response['alert'] cod = response['response'] return cod, contacts
def connect_control(self): """ Процедура опроса клиента """ # презентс -> presence = self.create_presence() send_message(socket=self.socket, message=presence) logger.info(f'Отправлен презент серверу (client {self.login})') # self.add_user() # респонс <- response = get_message(self.socket) # респонс <!> self.response_control(response) return
def write_massage(self, to_name): text = None while text != 'Q': text = input('\r[?]-опции. Сообщение всем >>>') if text == 'Q': # процедура выхода self.quit_process() elif text == '?': print( '[Q]-выход \n[A:name]-добавить контакт (для теста Смелый)' ' \n[D:name]-удалить контакт (для теста Смелый)' ' \n[L]-получить список контатков') elif text.startswith('A:'): # добавление нового контакта command, name = text.split(':') answer = self.add_contact(name) # запрашиваем список контактов self.print_response(answer) if answer['response'] == 201: self.update_contacts() self.show_contacts() elif text == 'L': # запрашиваем список контактов self.show_contacts() elif text.startswith('D:'): # удаление контакта command, name = text.split(':') answer = self.del_contact(name) # запрашиваем список контактов self.print_response(answer) if answer['response'] == 203: self.update_contacts() self.show_contacts() else: if text != '': # отправка простого сообщения message = self.create_message(to_name=to_name, text=text) self.base.add_message_history(login=message['from'], time_point=message['time'], text=text, frend_login=message['to']) logger.info( f'Отправлено сообщение на сервер (client {self.login}) {message}' ) # send_message(socket=self.socket, message=message)
def connect_protocol(self, socket, ip): """ Протокол опроса клиента Очень много всего надо как-то переделать """ # Связываем ip адрес и сокет self.sock_ip[socket] = ip # проба -> probe = utils.msg.Probe() probe = probe.pack() send_message(socket, probe) logger.info(f'отправленна проба на {ip} {probe}') # # пресентс <- presence = get_message(socket) logger.info(f'получен презентс-сообщение от {ip} {presence}') # # пресентс <!> cod = self.control_presence(presence=presence, ip=ip) # респонс -> response = self.create_response(cod) send_message(socket, response) logger.info(f'отправлен ответ на презентс {ip} {response}') #
def write_responses(self, messages, w_clients, all_clients): for sock in w_clients: # Будем отправлять каждое сообщение всем for message, sock_send in messages: try: ip = self.sock_ip[sock] name = self.sock_login[ip] action = message['action'] if action == 'msg': if sock != sock_send: # broadcast send ===========> send_message(sock, message) logger.info( f'сообщение отправленно {message} на сокет {sock}' ) # elif action == 'quit': logger.info( f'полученно уведомление о выходе от {name} от сокета {sock}' ) # if sock != sock_send: # broadcast send ===========> send_message(sock, message) logger.info( f'отправленно уведомление о выходе {name} на сокет {sock}' ) # else: # отправка ответа на запрос # добавить запись в таблицу History self.base_handler.save_history(msg=message, ip=ip) response = self.create_response(cod=202) # unicast send -----------> send_message(sock_send, response) logger.info( f'отправлен ответ на запрос {message} на сокет {sock}' ) # elif action == 'get_contacts' and sock == sock_send: logger.info( f'получен запрос на список контактов от сокета {sock}' ) # contacts = self.base_handler.get_contacts_list(name) response = self.create_response(cod=200, alert=contacts) # unicast send ------------> send_message(sock_send, response) logger.info( f'отправлен ответ на запрос {message} на сокет {sock}' ) # elif action == 'add_contact' and sock == sock_send: logger.info( f'получен запрос на добавление контакта от сокета {sock}' ) # print(name, message) cod = self.create_new_contact(msg=message, name=name) response = self.create_response(cod=cod) # unicast send ------------> send_message(sock_send, response) logger.info( f'отправлен ответ на запрос {message} на сокет {sock}' ) # elif action == 'del_contact' and sock == sock_send: logger.info( f'получен запрос на добавление контакта от сокета {sock}' ) # print(name, message) cod = self.create_del_contact(msg=message, name=name) response = self.create_response(cod=cod) # unicast send ------------> send_message(sock_send, response) logger.info( f'отправлен ответ на запрос {message} на сокет {sock}' ) # except: # Сокет недоступен, клиент отключился print( f'Клиент {sock.fileno()} {sock.getpeername()} отключился' ) sock.close() all_clients.remove(sock)