Пример #1
0
    def inserirMensagemChat(self, mensagem):
        textoDataHorario = utils.getHorario() + ' - '

        if utils.checkEvent(mensagem, utils.NEWCLIENTEVENT):
            textoNickname = 'Cliente ' + \
                utils.pegarNickMensagem(mensagem, 1) + ' conectado!'

            textoMensagem = ''

        elif utils.checkEvent(mensagem, utils.DISCONNECTEVENT):
            textoNickname = 'Cliente ' + \
                utils.pegarNickMensagem(mensagem, 1) + \
                ' desconectou-se do chat!'

            textoMensagem = ''

        else:
            mensagem = mensagem.replace('"', '')

            textoNickname = mensagem.split(': ', 1)[0] + ': '

            textoMensagem = mensagem.split(': ', 1)[1]

        self.chatTextArea.configure(state='normal')

        if len(self.chatTextArea.get('1.0', 'end-1c')) > 0:
            self.chatTextArea.insert(END, '\n' + textoDataHorario,
                                     self.corVerde)
        else:
            self.chatTextArea.insert(END, textoDataHorario, self.corVerde)

        self.chatTextArea.insert(END, textoNickname, self.corAzul)
        self.chatTextArea.insert(END, textoMensagem)

        self.chatTextArea.yview(END)

        self.chatTextArea.configure(state='disabled')

        self.input.focus_force()

        self.master.bell(displayof=0)
Пример #2
0
    conexaoCliente.close()

    _thread.exit()


# Loop infinito para escutar novos clientes a se conectar ao servidor
while True:
    con, cliente = sockObj.accept()

    msg = utils.decryptMessage(con.recv(1024))

    print("MensagemRecebida = " + msg)

    # Se for um evento de conexão, armazeno a conexão, coloco no array, etc
    if utils.checkEvent(msg, utils.NEWCONNECTIONEVENT):
        print("Nova conexão!")

        clienteNovo = model.Cliente(msg.split(' ', 1)[1], con, cliente)

        # Envio de todos clientes já conectados para o novo cliente
        for x in clientesObjeto:
            utils.sendMessageTo(
                clienteNovo,
                utils.GETCLIENTS + ' {' + x.getNomeCliente() + '}')

        # Avisando a todos clientes que alguém se conectou
        for k in clientesObjeto:
            utils.sendMessageTo(
                k, utils.NEWCLIENTEVENT +
                ' Cliente {} conectado!'.format('{' +
Пример #3
0
def connectionHandler(clienteConectado):
    nomeCliente = clienteConectado.getNomeCliente()

    conexaoCliente = clienteConectado.getConexaoCliente()

    print('{}: Server conectado por {}'.format(utils.getHorario(),
                                               nomeCliente))

    while True:
        try:
            mensagem = conexaoCliente.recv(1024)

            if not mensagem:
                print('{}: Cliente {} finalizou a conexão.'.format(
                    utils.getHorario(), nomeCliente))

                clientesObjeto.remove(clienteConectado)

                for k in clientesObjeto:
                    utils.sendMessageTo(
                        k, utils.DISCONNECTEVENT +
                        ' Cliente {} desconectou-se!'.format('{' +
                                                             nomeCliente +
                                                             '}'))

                break

            mensagemDecrypted = utils.decryptMessage(mensagem)
            print('{}: Cliente {} enviou -> {}'.format(utils.getHorario(),
                                                       nomeCliente,
                                                       mensagemDecrypted))

            # Verificação do evento enviado pelo cliente
            if utils.checkEvent(
                    mensagemDecrypted, utils.TYPINGEVENT) or utils.checkEvent(
                        mensagemDecrypted, utils.STOPPEDTYPINGEVENT):
                for k in clientesObjeto:
                    utils.sendMessageTo(
                        k, mensagemDecrypted + ' {' + nomeCliente + '}')
            else:
                if utils.checkEvent(mensagemDecrypted, utils.PRIVATEMESSAGE):
                    clientToSend = utils.getClientByName(
                        clientesObjeto,
                        utils.pegarNickMensagem(mensagemDecrypted, 2))

                    clientThatSent = utils.getClientByName(
                        clientesObjeto,
                        utils.pegarNickMensagem(mensagemDecrypted, 1))

                    if clientToSend != None and clientThatSent != None:
                        utils.sendMessageTo(
                            clientThatSent,
                            utils.PRIVATEMESSAGE + ' ' + mensagemDecrypted)

                        utils.sendMessageTo(
                            clientToSend,
                            utils.PRIVATEMESSAGE + ' ' + mensagemDecrypted)
                # E o servidor envia a mensagem para os ou o destinatário
                else:
                    for k in clientesObjeto:
                        utils.sendMessageTo(
                            k, nomeCliente + ': ' + mensagemDecrypted)

        # Caso ocorra algum problema com a conexão
        except Exception as e:
            print('{}: Deu ruim na conexão com o cliente {}.'.format(
                utils.getHorario(), nomeCliente))

            print('Mensagem do erro : ' + str(e))

            clientesObjeto.remove(clienteConectado)

            for k in clientesObjeto:
                utils.sendMessageTo(
                    k, utils.DISCONNECTEVENT +
                    ' Cliente {} desconectou-se!'.format('{' + nomeCliente +
                                                         '}'))

            break

    print('Finalizando conexão do cliente', nomeCliente)

    conexaoCliente.close()

    _thread.exit()
Пример #4
0
def receberMensagens(atoa):
    # Loop infinito para escutar o socket
    while True:
        try:
            # Recebendo a mensagem
            data = sockObj.recv(1024)
            if data:
                # Descriptografando
                mensagemRecebida = utils.decryptMessage(data)

                # Checagem do evento da mensagem (se é ou não e qual é o evento se for)
                if utils.checkEvent(mensagemRecebida, utils.PRIVATEMESSAGE):
                    nick = utils.pegarNickMensagem(mensagemRecebida, 1)

                    if interfaceLista.interface == None:
                        interfaceLista.abrirChatPrivado(nick)

                    interfaceLista.interface.inserirMensagemChat(
                        nick + ': ' + mensagemRecebida.split('}')[2])

                    continue

                if utils.checkEvent(mensagemRecebida, utils.NEWCLIENTEVENT):
                    nick = utils.pegarNickMensagem(mensagemRecebida, 1)

                    interface.adicionarLabelCliente(nick)
                    interfaceLista.adicionarLabelCliente(nick)

                if utils.checkEvent(mensagemRecebida, utils.GETCLIENTS):
                    nick = utils.pegarNickMensagem(mensagemRecebida, 1)

                    interface.adicionarLabelCliente(nick)
                    interfaceLista.adicionarLabelCliente(nick)

                    continue

                if utils.checkEvent(mensagemRecebida, utils.DISCONNECTEVENT):
                    nick = utils.pegarNickMensagem(mensagemRecebida, 1)

                    interface.removerLabelCliente(nick)
                    interfaceLista.removerLabelCliente(nick)

                if utils.checkEvent(mensagemRecebida,
                                    utils.STOPPEDTYPINGEVENT):
                    nick = utils.pegarNickMensagem(mensagemRecebida, 1)

                    interface.removerLabelDigitando(nick)

                    continue

                if utils.checkEvent(mensagemRecebida, utils.TYPINGEVENT):
                    nick = utils.pegarNickMensagem(mensagemRecebida, 1)

                    interface.setarLabelDigitando(nick)

                    continue

                # Mensagem recebida printada
                print("Recebi -> " + data.decode('utf-8'))

                # Se chegar aqui, a mensagem é inserida no chat de grupo
                interface.inserirMensagemChat(mensagemRecebida)
        except:
            # Caso ocorra algum erro, a conexão é finalizada e para o loop que escuta o socket
            break

            print('Finalizando thread de escutar mensagens')

            sockObj.close()

            _thread.exit()