def alert(self, next, conf, msg, send=True): ms = mensagem.Mensagem() print(next.port, ":", msg) if send: next.send(ms.confirm(conf[0], conf[1])) self.app.tela_atual.reload(ms.confirm(conf[0], conf[1]), "enviado: ")
def delNode(self, index): ms = mensagem.Mensagem() print("removendo", self.no.online[index].port) next = self.no.online.pop(index) self.no.broadcast(ms.logout(next)) print("lista online:") for i in self.no.online: print("--> :", i.nome)
def addNode(self, next): ms = mensagem.Mensagem() self.no.broadcast(ms.login(next)) self.no.online.append(next) self.app.tela_atual.reload() print("lista online:") for i in self.no.online: print("--> " + i.nome)
def __init__(self,host="127.0.0.1", port = 22000, nome = "node"): self.host = host self.port = port self.nome = nome self.online = [] self.con = None self.next = None self.intr = interno.Interno(self) self.msg = mensagem.Mensagem() self.log = False self.comunicando = False self.msgChat = []
def answer(self, next, jsn): ms = mensagem.Mensagem() # fazendo login if ms.isLogin(jsn): # validações do login try: nome = ms.getInJson(jsn, "nome") ip = ms.getInJson(jsn, "ip") porta = int(ms.getInJson(jsn, "porta")) except: print("dados incompreensíveis") if nome == -1: self.alert(next, [1, 0], "nome invalido para login", self.no.tipo == 0) return False ind = self.existeUser(nome) if ind != -1: self.alert(next, [1, 0], "nome já esta sendo usado", self.no.tipo == 0) return False # ações no cliente if self.no.tipo: if ip == -1 or porta == -1: # cliente avisa servidor que deu um erro self.alert(next, [1, 0], "ip ou porta inválida", self.no.tipo == 0) return False # login pode ser feito #next.host = ip #next.port = porta #next.nome = nome ; else: next.nome = nome # confirmar self.alert(next, [1, 1], "login realizado com sucesso", self.no.tipo == 0) # enviando lista de online para o cliente if self.no.tipo == 0: self.addNode(next) for cli in self.no.online: next.send(ms.login(cli)) # finalização do login #if self.no.tipo == 0 : return True else: # atualiza tela n = node.Node(ip, porta, nome) self.addNode(n) try: self.app.tela_atual.reload() except: pass return True # fazendo logout if ms.isLogout(jsn): # validações nome = ms.getInJson(jsn, "nome") if nome == -1: self.alert(next, [0, 0], "nome invalido para logout", self.no.tipo == 0) return False ind = self.existeUser(nome) if ind == -1: self.alert(next, [1, 0], "nome não existe na lista", self.no.tipo == 0) return False # ação em um servidor if self.no.tipo == 0: self.alert(next, [0, 1], "logout realizado com sucesso", self.no.tipo == 0) # ação em um cliente #else: #print(next.nome,": está offline") # feedback desativado self.delNode(ind) #next.nome = "cliente" # atualiza tela try: self.app.tela_atual.reload() except: pass return True # se for mensagem de confirmação if ms.isConfirm(jsn): # é uma confirmação de login? if ms.getInJson(jsn, "acao") == "1": # ações no cliente if (self.no.tipo): if (ms.confLogin(jsn)): print("cliente logado, ir para tela principal") self.no.log = True self.app.trocarTela(tela.Menu) return True else: print("cliente não está logado") return False # ações no servidor else: return # é uma confirmação de logout? if ms.getInJson(jsn, "acao") == "0": if ms.confLogout(jsn): self.no.online = [] self.no.log = False self.no.msg.lista = [] print("Você fez logout") return True #se for mensagem de chat if ms.isMsg(jsn): remetente = ms.getInJson(jsn, "nomeenv") destinatario = ms.getInJson(jsn, "nomereceb") msg = ms.getInJson(jsn, "msg") #se a mensagem estiver errada if remetente == -1 or destinatario == -1 or msg == -1: return False # se for cliente if self.no.tipo: # deve adicionar na lista de mensagens do chat no next? l = [i.nome for i in self.no.online] l = l.index(remetente) l = self.no.online[l] #CRITICO l.msgChat.append([msg, "recebido"]) print("cliente recebeu a msg", msg) self.app.tela_atual.mostra_msg(remetente, destinatario) return # se for servidor else: #deve redirecionar a mensagem l = [i.nome for i in self.no.online] l = l.index(destinatario) l = self.no.online[l] #CRITICO l.send(jsn) self.app.tela_atual.reload(jsn, "enviado: ") print("o servidor repassou a mensagem", msg) return print(jsn, "não tratado") return True