Beispiel #1
0
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()
Beispiel #2
0
            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()
Beispiel #3
0
    )

    dir_path = os.path.dirname(os.path.realpath(__file__))
    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:
        transport = ClientTransport(server_port, server_address, database,
                                    client_name, client_passwd, keys)
    except ServerError as error:
        print(error.text)
        exit(1)
    transport.setDaemon(True)
    transport.start()

    del start_dialog

    main_window = ClientMainWindow(database, transport, keys)
    main_window.make_connection(transport)
    main_window.setWindowTitle(f'HeroChat - {client_name}')
    client_app.exec_()
    transport.transport_shutdown()
    transport.join()
Beispiel #4
0
        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()
Beispiel #5
0
        transport = ClientTransport(
            server_port,
            server_address,
            database,
            client_name,
            client_passwd,
            keys)
        LOGGER.debug('Транспорт готов')
    except ServerError as error:
        print(error.text)
        message = QMessageBox()
        message.critical(
            start_dialog,
            'Ошибка соединения с сервером',
            error.text)
        LOGGER.error(
            f'Ошибка соединения с сервером. Сервер вернул ошибку: {error.text}')
        sys.exit(1)
    transport.setDaemon(True)
    transport.start()

    # Создаём GUI
    main_window = ClientMainWindow(database, transport, keys)
    main_window.make_connection(transport)
    main_window.setWindowTitle(f'Чат программа - {client_name}')
    client_app.exec_()

    # Раз графическая оболочка закрылась, закрываем транспорт
    transport.transport_shutdown()
    transport.join()
Beispiel #6
0
    # Записываем логи
    logger.info(
        f'Запущен клиент с парамертами: адрес сервера: {server_address} , порт: {server_port}, имя пользователя: {client_name}'
    )

    # Создаём объект базы данных
    database = ClientDatabase(client_name)

    # Создаём объект - транспорт и запускаем транспортный поток
    try:
        transport = ClientTransport(server_port, server_address, database,
                                    client_name)
        logger.info(f'Запускается транспортный поток {transport}')
    except ServerError as error:
        print(error.text)
        exit(1)
    transport.setDaemon(True)
    transport.start()

    # Создаём GUI
    main_window = ClientMainWindow(database, transport)
    main_window.make_connection(transport)
    main_window.setWindowTitle(
        f'Клиентское подключение к серверу - {client_name}')
    client_app.exec_()

    # Раз графическая оболочка закрылась, закрываем транспорт
    transport.transport_shutdown()
    transport.join()
Beispiel #7
0
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()
Beispiel #8
0
        start_dialog = UserNameDialog()
        client_app.exec_()
        if start_dialog.ok_pressed:
            client_name = start_dialog.client_name.text()
            del start_dialog
        else:
            exit(0)

    logger.info(f'console launched: server address: {server_address} ,'
                f' port: {server_port}, name of user: {client_name}')

    database = ClientDatabase(client_name)

    try:
        transport = ClientTransport(server_port, server_address, database,
                                    client_name)
    except ServerError as error:
        print(error.text)
        exit(1)
    transport.setDaemon(True)
    transport.start()

    main_window = ClientMainWindow(database, transport)
    main_window.make_connection(transport)
    main_window.setWindowTitle(
        f'MikeT chat program (alpha release) - {client_name}')
    client_app.exec_()

    transport.transport_shutdown()
    transport.join()