Exemple #1
0
def get_nickname_client(connection):
    # provavelmente cada user deve ser único
    is_valid_user = False
    nickname_client = None
    while not is_valid_user:
        try:
            connection.send(
                util.message_serialize("-", "-", "Digite um nickname válido:"))

            nameInfo = util.message_parser(read_socket_data(connection))

            if nameInfo is None:
                break

            nickname_client = nameInfo.get("data", "")
            is_valid_user = not nickname_client in clients.values()

            if (is_valid_user):
                return nickname_client

            connection.send(
                util.message_serialize(
                    "-", "-", "Um usuário com esse nickname já existe."))
        except:
            return None
Exemple #2
0
def handle_private_message(connection, nickname_client, nickname_recipient,
                           message):
    recipient_connection = get_key_by_value(clients, nickname_recipient)
    if recipient_connection:
        private_message = f"[PRIVADO] {nickname_client} escreveu: {message}"
        recipient_connection.send(
            util.message_serialize(nickname_recipient, "privado",
                                   private_message))
    else:
        user_not_exist_message = f"O servidor escreveu: o usuário {nickname_recipient} não existe."
        connection.send(
            util.message_serialize(nickname_client, "-",
                                   user_not_exist_message))
Exemple #3
0
def perform_action_by_command(connection, clients, nickname_client,
                              message_information):
    try:
        command = message_information.get("command", "")
        nickname_recipient = message_information.get("nickname", "")
        payload = message_information.get("data", "")

        if nickname_recipient == "*" and command == "-":
            broadcast_chat_message(clients, payload, nickname_client)
        elif nickname_recipient == ">" and command == "sair":
            raise ClientDisconnection("Cliente executou comando de saída")
        elif nickname_recipient == ">" and command == "lista":
            connection.send(
                util.message_serialize(nickname_client, "lista",
                                       get_client_list(clients)))
        elif (nickname_recipient != "*"
              or nickname_recipient == ">") and command == "privado":
            handle_private_message(connection, nickname_client,
                                   nickname_recipient, payload)
        else:
            print(
                f"O cliente *{nickname_client}* enviou um comando não reconhecido."
            )
    except:
        handle_client_exit_command(connection, clients, nickname_client)
Exemple #4
0
def broadcast_chat_message(clients, message, nickname=""):
    formated_message = f"[SALA] {nickname} escreveu: {message}"
    print(formated_message)
    for connection in clients.copy():
        try:
            connection.send(util.message_serialize("*", "", formated_message))
        except:
            del clients[connection]
Exemple #5
0
def send_messages(connection, stop_event):
    keyboard_input = input()
    try:
        while not stop_event.is_set():
            if (keyboard_input == "sair()"):
                connection.send(util.message_serialize('>', 'sair', ''))
                handle_disconnection(connection, stop_event)
                break
            elif (keyboard_input == "lista()"):
                connection.send(util.message_serialize('>', 'lista', ''))
            else:
                PRIVATE_CHAT_REGEX = r"^privado\((.{1,16})\)\s(.*)$"
                groups_values = re.findall(PRIVATE_CHAT_REGEX, keyboard_input)
                if len(groups_values):
                    nickname, data = groups_values[0]
                    connection.send(
                        util.message_serialize(nickname, 'privado', data))
                else:
                    connection.send(
                        util.message_serialize('*', '-', keyboard_input))
            keyboard_input = input()
    except:
        handle_disconnection(connection, stop_event)
Exemple #6
0
def send_welcome_to_new_user(connection, nickname_client):
    msg_welcome = f"Seja bem vindo {nickname_client}!\n" + \
        "Para listar usuários, digite lista(); \n" + \
        "Para sair do chat, digite sair();"
    connection.send(util.message_serialize(nickname_client, "", msg_welcome))
    return nickname_client