def main(): parser = argparse.ArgumentParser() # parser.add_argument('host', nargs='?', default=DEFAULT_HOST, help='server host ip address') # parser.add_argument('port', nargs='?', default=DEFAULT_PORT, type=int, help='server port') parser.add_argument('-u', action='store', dest='user_name', help='mode of work') args = parser.parse_args() # Создание клиентского приложения client_app = QApplication(sys.argv) server_address = DEFAULT_HOST server_port = DEFAULT_PORT start_dialog = UserNameDialog() if args: start_dialog.client_name.insert(args.user_name) start_dialog.ip.insert(server_address) start_dialog.port.insert(str(server_port)) client_app.exec_() # Если пользователь ввёл имя и нажал ОК, то сохранение, удаление окна и работа дальше. Иначе - выход if start_dialog.ok_pressed: user_name = start_dialog.client_name.text() password_hash = start_dialog.password_hash del start_dialog else: exit(0) CLIENT_LOGGER.info( f'Запущен клиент:\n адрес сервера: {server_address} , порт: {server_port}, имя пользователя: {user_name}' ) # Создание объекта БД database = ClientStorage(user_name) # Создаём объекта потока try: client_thread = ClientTransport(user_name, password_hash, server_address, server_port, database) except ServerError as error: print(error.text) exit(1) client_thread.setDaemon(True) client_thread.start() # Создание GUI main_window = ClientMainWindow(database, client_thread) main_window.make_connection(client_thread) main_window.setWindowTitle( f'Мессенджер Alpha Version - пользователь {user_name}') client_app.exec_() # Закрытие графической оболочки, выход из потока client_thread.exit_() client_thread.join()
keys = RSA.import_key(key.read()) # !!!keys.publickey().export_key() logger.debug("Keys sucsessfully loaded.") # Создаём объект базы данных database = ClientDatabase(client_name) # Создаём объект - транспорт и запускаем транспортный поток try: transport = ClientTransport(server_port, server_address, database, client_name, client_passwd, keys) logger.debug("Transport ready.") except ServerError as error: message = QMessageBox() message.critical(start_dialog, 'Ошибка сервера', error.text) sys.exit(1) transport.setDaemon(True) transport.start() # Удалим объект диалога за ненадобностью del start_dialog # Создаём GUI main_window = ClientMainWindow(database, transport, keys) main_window.make_connection(transport) main_window.setWindowTitle(f'Чат Программа alpha release - {client_name}') client_app.exec_() # Раз графическая оболочка закрылась, закрываем транспорт transport.transport_shutdown() transport.join()
with open(key_file, 'rb') as key: keys = RSA.import_key(key.read()) # !!!keys.publickey().export_key() CLIENT_LOGGER.debug("Keys successfully loaded.") # Инициализация БД database = ClientDatabase(client_name) # Инициализация сокета и запуск потока try: tcp_sock = ClientTransport(server_port, server_address, database, client_name, client_passwd, keys) CLIENT_LOGGER.debug("Socket ready.") except Exception as ErrorNotConnection: message = QMessageBox() message.critical(start_dialog, 'Ошибка сервера', f'{ErrorNotConnection} - нет соединения') CLIENT_LOGGER.error(f'Не удалось подключиться к серверу {server_address}:{server_port}') sys.exit(1) tcp_sock.setDaemon(True) tcp_sock.start() # Создание GUI main_window = ClientMainWindow(database, tcp_sock, keys) main_window.make_connection(tcp_sock) main_window.setWindowTitle(f'Чат-программа b-release - {client_name}') client_app.exec_() # После закрытия графической оболочки, закрываем сокет tcp_sock.transport_shutdown() tcp_sock.join()
keys = RSA.generate(2048, os.urandom) with open(key_file, 'wb') as key_f: key_f.write(keys.export_key()) else: with open(key_file, 'rb') as key_f: keys = RSA.import_key(key_f.read()) CLIENT_LOG.debug('Keys loaded') db = ClientBase(username) try: transport = ClientTransport(port, address, db, username, password, keys) except ServerError as err: message = QMessageBox() message.critical(init_dialog, 'Server Error', str(err)) exit(1) transport.setDaemon(True) transport.start() del init_dialog window = ClientMainWindow(db, transport, keys) window.make_connection(transport) window.statusBar().showMessage('Connected to TEST server') app.exec_() transport.transport_shutdown() transport.join()
def main(port, addr, name, password): server_address = addr server_port = port client_name = name client_passwd = password print(client_name, password) if server_port < 1024 or server_port > 65535: client_logger.critical( f'Попытка запуска сервера с указанием неподходящего порта {server_port} сервера.' f'Допустимы адреса с 1024 до 65535.') sys.exit(1) # Создаём клиентокое приложение client_app = QApplication(sys.argv) #Если имя пользователя не было указано в командной строке то запросим его start_dialog = UserNameDialog() if not client_name or not client_passwd: client_app.exec_() # Если пользователь ввёл имя и нажал ОК, то сохраняем ведённое и удаляем объект, инааче выходим if start_dialog.ok_pressed: client_name = start_dialog.client_name.text() client_passwd = start_dialog.client_passwd.text() else: sys.exit(0) # Записываем логи client_logger.info( f'Запущен клиент с парамертами: адрес сервера: {server_address} , порт: {server_port}, имя пользователя: {client_name}' ) # Загружаем ключи с файла, если же файла нет, то генерируем новую пару. #dir_path = os.path.dirname(os.path.realpath(__file__)) dir_path = os.getcwd() key_file = os.path.join(dir_path, f'{client_name}.key') if not os.path.exists(key_file): keys = RSA.generate(2048, os.urandom) with open(key_file, 'wb') as key: key.write(keys.export_key()) else: with open(key_file, 'rb') as key: keys = RSA.import_key(key.read()) keys.publickey().export_key() # Создаём объект базы данных database = ClientDatabase(client_name) # Создаём объект - транспорт и запускаем транспортный поток try: transfer = ClientTransfer(server_port, server_address, database, client_name, client_passwd, keys) except ServerError as error: print(error.text) sys.exit(1) transfer.setDaemon(True) transfer.start() # Удалим объект диалога за ненадобностью del start_dialog # Создаём GUI main_window = ClientMainWindow(database, transfer, keys) main_window.make_connection(transfer) main_window.setWindowTitle(f'Чат Программа alpha release - {client_name}') client_app.exec_() # Раз графическая оболочка закрылась, закрываем транспорт transfer.transfer_shutdown() transfer.join()