def create_message(user_name=DEFAULT_USER_NAME):
    if not isinstance(user_name, str):
        CLIENT_LOGGER.warning("create_message Ошибка типа")
        raise TypeError
    if len(user_name) > 25:
        CLIENT_LOGGER.warning("create_message Длинное имя пользователя")
        raise UsernameToLongError(user_name)
    message = {
        ACTION: PRESENCE,
        TIME: time.time(),
        USER: {
            USER_NAME: user_name
        }
    }
    return message
def translate_message(response):
    if not isinstance(response, dict):
        CLIENT_LOGGER.error("translate_message Ошибка типа")
        raise TypeError
    if RESPONSE not in response:
        CLIENT_LOGGER.error("translate_message Ошибка ключа")
        raise RCKeyError(RESPONSE)
    code = response[RESPONSE]
    if len(str(code)) != 3:
        CLIENT_LOGGER.error("translate_message Ошибка длинны")
        raise RCLenError(code)
    if code not in RESPONSE_CODES:
        CLIENT_LOGGER.error("translate_message Ошибка кода ответа")
        raise RCError(code)
    return response
def main():
    client = socket(AF_INET, SOCK_STREAM)
    try:
        addr = sys.argv[1]
    except IndexError:
        CLIENT_LOGGER.warning("Нет адреса сервера")
        addr = 'localhost'
    try:
        port = int(sys.argv[2])
    except IndexError:
        CLIENT_LOGGER.warning("Выбран стандарный порт: 7777")
        port = 7777
    except ValueError:
        CLIENT_LOGGER.error("Порт должен быть целым числом")
        client.close()
        sys.exit(0)

    try:
        mode = sys.argv[3]
    except IndexError:
        mode = 'r'
    CLIENT_LOGGER.debug("Начало соединения")
    client.connect((addr, port))
    message = create_message()
    send_message(client, message)
    CLIENT_LOGGER.debug("Ожидание ответа")
    response = get_message(client)
    response = translate_message(response)
    print(f'Установлено соединение с сервером.')
    CLIENT_LOGGER.info('Ответ: ' + str(response))
    if response['response'] == OK:
        if mode == 'r':
            read_messages(client)
        elif mode == 'w':
            write_messages(client)
        else:
            raise Exception("Invalid mode")
    # Старый код
    # CLIENT_LOGGER.debug("1. Соединение")
    # client.connect((addr, port))
    # message = create_message()
    # CLIENT_LOGGER.debug("2. Отправка сообщения")
    # send_message(client, message)
    # CLIENT_LOGGER.debug("3. Ожидание ответа")
    # response = get_message(client)
    # response = translate_message(response)
    # print(response)
    # CLIENT_LOGGER.info('Response: ' + str(response))
    client.close()
def write_messages(client):
    while True:
        message = create_message()
        CLIENT_LOGGER.debug("Отправка сообщения")
        send_message(client, message)
    CLIENT_LOGGER.info('Ответ: ' + str(response))
    if response['response'] == OK:
        if mode == 'r':
            read_messages(client)
        elif mode == 'w':
            write_messages(client)
        else:
            raise Exception("Invalid mode")
    # Старый код
    # CLIENT_LOGGER.debug("1. Соединение")
    # client.connect((addr, port))
    # message = create_message()
    # CLIENT_LOGGER.debug("2. Отправка сообщения")
    # send_message(client, message)
    # CLIENT_LOGGER.debug("3. Ожидание ответа")
    # response = get_message(client)
    # response = translate_message(response)
    # print(response)
    # CLIENT_LOGGER.info('Response: ' + str(response))
    client.close()


# Спасибо stackoverflow за эту подсказку
if __name__ == '__main__':
    CLIENT_LOGGER.info("Клиент запущен")
    try:
        main()
    except Exception as e:
        CLIENT_LOGGER.error("Исключение: {}".format(str(e)))
    CLIENT_LOGGER.info("Клиент остановлен")
def main():
    client = socket(AF_INET, SOCK_STREAM)
    try:
        addr = sys.argv[1]
    except IndexError:
        CLIENT_LOGGER.warning("Нет адреса сервера")
        addr = 'localhost'
    try:
        port = int(sys.argv[2])
    except IndexError:
        CLIENT_LOGGER.warning("Выбран стандарный порт: 7777")
        port = 7777
    except ValueError:
        CLIENT_LOGGER.error("Порт должен быть целым числом")
        client.close()
        sys.exit(0)
    CLIENT_LOGGER.debug("1. Соединение")
    client.connect((addr, port))
    message = create_presence()
    CLIENT_LOGGER.debug("2. Отправка сообщения")
    send_message(client, message)
    CLIENT_LOGGER.debug("3. Ожидание ответа")
    response = get_message(client)
    response = translate_message(response)
    print(response)
    CLIENT_LOGGER.info('Response: ' + str(response))
    client.close()
        CLIENT_LOGGER.error("translate_message Ошибка кода ответа")
        raise RCError(code)
    return response


def create_presence(user_name=DEFAULT_USER_NAME):
    if not isinstance(user_name, str):
        CLIENT_LOGGER.warning("create_message Ошибка типа")
        raise TypeError
    if len(user_name) > 25:
        CLIENT_LOGGER.warning("create_message Длинное имя пользователя")
        raise UsernameToLongError(user_name)
    message = {
        ACTION: PRESENCE,
        TIME: time.time(),
        USER: {
            USER_NAME: user_name
        }
    }
    return message


# Спасибо stackoverflow за эту подсказку
if __name__ == '__main__':
    CLIENT_LOGGER.info("Клиент запощен")
    try:
        main()
    except Exception as e:
        CLIENT_LOGGER.error("Exception: {}".format(str(e)))
    CLIENT_LOGGER.info("Клиент остановлен")