def CreateChat(self, request, context): print("Create chat") resp_node = self.server.FindResponsible( request, context) # Fist - try to descover who will handle the request room_name = request.roomname # the id of the room resp_serv = resp_node[1][ 1] # list of severs that will/might know who handle print(resp_serv) # Talvez problema devido a atribuicoa resp_serv dentro do for if not resp_node[ 0]: # Communicate with the server that might know who will respond the request for serv in resp_serv: try: channel = grpc.insecure_channel(self.server.address + ':' + str(serv)) conn = rpc.ChatSServerStub( channel) # connection with the responsible server result = conn.FindResponsible( chat.FindRRequest(roomname=room_name)) resp_serv = self.Str_to_list_ports(result.port) break except: print("False Fail Create Chat at", serv) # If this server is the one supposed to handle ----------------------------------------------------------------------------- if self.Request_port() in resp_serv: print("I handle", request.roomname, request.password, request.nickname) result = self.server.CreateChat(request.roomname, request.password, request.nickname) print(result) if result: return chat.JoinResponse(state='sucess', Port=0) else: return chat.JoinResponse(state='fail', Port=0) # Server knows who will handle -------------------------------------------------------------------------------------------- print("I know who will handle") print("is : ", resp_serv) for serv in resp_serv: try: channel = grpc.insecure_channel(self.server.address + ':' + str(serv)) conn = rpc.ChatSServerStub( channel) ## connection with the responsible server result = conn.CreateChat( chat.CreateChatRequest(roomname=request.roomname, password=request.password, nickname=request.nickname)) break except: print("False Fail Create Chat at", serv) return result
def JoinChat(self, request, context): room = self.Validade_Room_Index(request.roomname, request.password) if room < len(self.ChatRooms): if not self.ChatRooms[room].validate_user(request.nickname): print('JoinChat;' + request.nickname + ";" + request.roomname) self.AuxJoinChat(room, request.nickname) self.state_file.stack_log('JoinChat;' + request.nickname + ";" + request.roomname) return chat.JoinResponse(state='sucess', Port=0) return chat.JoinResponse(state='fail', Port=0)