Пример #1
0
        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);
        }
Пример #2
0
        // 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());
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }