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)
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('{' +
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()
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()