private Message ProcJoinRequest(Message msg) { OutputManager.Server.Write("Processing join request..."); Messages.JoinRequest jrMsg = new JoinRequest(msg.ToString()); OutputManager.Server.Write("Finding join point..."); Messages.ResourceOwnerRequest joinPointRequest = new Messages.ResourceOwnerRequest(this.localNode, jrMsg.senderID); OutputManager.Server.Write("Awaiting to process..."); Message tmp = ProcResourceOwnerRequest(joinPointRequest); OutputManager.Server.Write("process awaited"); Messages.ResourceOwnerResponse joinPointResponse = tmp as Messages.ResourceOwnerResponse; Messages.JoinResponse rMsg; // Used to create the response message later if (joinPointResponse == null) { OutputManager.Server.Write("No join point found." + (tmp == null ? "null" : tmp.ToString())); OutputManager.Server.Write("Join request failed!"); rMsg = new Messages.JoinResponse(this.localNode, this.localNode, this.localNode); rMsg.isProcessed = false; } else { OutputManager.Server.Write("Generating Pred and Succ nodes..."); ChordNode succNode = new ChordNode(joinPointResponse.ownerIpAddress, joinPointResponse.ownerPort, joinPointResponse.ownerId); ChordNode predNode = new ChordNode(joinPointResponse.predIpAddress, joinPointResponse.predPort, joinPointResponse.predId); OutputManager.Server.Write("Generating a response..."); rMsg = new Messages.JoinResponse(this.localNode, succNode, predNode); rMsg.isProcessed = true; OutputManager.Server.Write("Join request processed!"); } return(rMsg); }
// string localIpAddress = Dns.GetHostEntry(Dns.GetHostName()).AddressList[0].ToString() public LocalNode(int port) : base(Dns.GetHostEntry(Dns.GetHostName()).AddressList[0].ToString(), port) { localResources = new Dictionary <string, Tuple <string, string> >(); msgProccessor = new LocalMessageProcessor(this); serverComponent = new AsynchronousServer(port, msgProccessor); clientComponent = new AsynchronousClient(); predNode = this; succNode = this; var serverTask = Task.Run(() => serverComponent.StartServer()); }
private Message ProcUpdatePredRequest(Message msg) { Messages.UpdatePredNodeRequest upnrMsg = new Messages.UpdatePredNodeRequest(msg.ToString()); // Update local node relationship ChordNode predNode = new ChordNode(upnrMsg.predIpAddress, upnrMsg.predPort, upnrMsg.predId); this.localNode.predNode = predNode; // The pred communicates with the server component, // so there is no reason to update the client connections upnrMsg.isProcessed = true; // craft a response message Messages.UpdateNodeResponse response = new UpdateNodeResponse(this.localNode, true); response.isProcessed = true; return(response); }
private Message ProcUpdateSuccRequest(Message msg) { Messages.UpdateSuccNodeRequest usnrMsg = new Messages.UpdateSuccNodeRequest(msg.ToString()); // Update local node relationship OutputManager.Server.Write("Updating local node relationship..."); ChordNode succNode = new ChordNode(usnrMsg.succIpAddress, usnrMsg.succPort, usnrMsg.succId); this.localNode.succNode = succNode; // Adjust connection to client node OutputManager.Server.Write("Disconnecting from old succ node..."); this.localNode.DisconnectFromNode(); OutputManager.Server.Write("Connecting to new succ node..."); this.localNode.ConnectToNode(succNode.IpAddress, succNode.Port); usnrMsg.isProcessed = true; // craft a response message OutputManager.Server.Write("Generating a response..."); Messages.UpdateNodeResponse response = new UpdateNodeResponse(this.localNode, true); response.isProcessed = true; OutputManager.Server.Write("Finished processing an update succ request"); return(response); }