private void StabilizeResponseHandler(object?sender, System.EventArgs e) { // Log.Debug("Stabilize response handler " + Node); StabilizeResponseEventArgs eventArgs = (StabilizeResponseEventArgs)e; var predecessorOfSuccessor = eventArgs.PredecessorOfSuccessor; _timeOutScheduler.StopTimer(OriginSuccessor); if (predecessorOfSuccessor.Id != Node.Id) { // Log.Debug("predecessorOfSuccessor = " + predecessorOfSuccessor); Node.Successor = predecessorOfSuccessor; _dhtActions.Notify(Node.Successor, Node.Id, Node); } else { if (Node.Successor != null && Node.Predecessor != null) { StabilizeReplicaData(); RemoveDataFromExpiredReplicas(); } } }
public void Receive(string responseMessage) { var dhtProtocolCommandDto = JsonSerializer.Deserialize <DhtProtocolCommandDto>(responseMessage); Log.Debug(dhtProtocolCommandDto.ToString()); switch (dhtProtocolCommandDto.Command) { case DhtCommand.NOTIFY: NotifyEventArgs notifyEventArgs = new NotifyEventArgs { NodeDto = dhtProtocolCommandDto.NodeDto }; OnNotify(notifyEventArgs); break; case DhtCommand.STABILIZE: StabilizeEventArgs stabilizeEventArgs = new StabilizeEventArgs { DestinationNode = dhtProtocolCommandDto.NodeDto }; OnStabilizeHandler(stabilizeEventArgs); break; case DhtCommand.FIND_SUCCESSOR: FindSuccessorEventArgs findSuccessorEventArgs = new FindSuccessorEventArgs { Key = dhtProtocolCommandDto.Key, DestinationNode = dhtProtocolCommandDto.NodeDto }; OnFindSuccessor(findSuccessorEventArgs); break; case DhtCommand.FOUND_SUCCESSOR: FoundSuccessorEventArgs foundSuccessorEventArgs = new FoundSuccessorEventArgs { SuccessorNode = dhtProtocolCommandDto.NodeDto, Key = dhtProtocolCommandDto.Key }; OnFoundSuccessor(foundSuccessorEventArgs); break; case DhtCommand.CHECK_PREDECESSOR: CheckPredecessorEventArgs checkPredecessorEventArgs = new CheckPredecessorEventArgs { DestinationNode = dhtProtocolCommandDto.NodeDto }; OnCheckPredecessorHandler(checkPredecessorEventArgs); break; case DhtCommand.STABILIZE_RESPONSE: StabilizeResponseEventArgs stabilizeResponseEventArgs = new StabilizeResponseEventArgs { PredecessorOfSuccessor = dhtProtocolCommandDto.NodeDto }; OnStabilizeResponseHandler(stabilizeResponseEventArgs); break; case DhtCommand.CHECK_PREDECESSOR_RESPONSE: CheckPredecessorResponseEventArgs checkPredecessorResponseEventArgs = new CheckPredecessorResponseEventArgs { Predecessor = dhtProtocolCommandDto.NodeDto }; OnCheckPredecessorResponseHandler(checkPredecessorResponseEventArgs); break; case DhtCommand.GET: GetHandlerEventArgs getHandlerEventArgs = new GetHandlerEventArgs { DhtProtocolCommandDto = dhtProtocolCommandDto }; OnGet(getHandlerEventArgs); break; case DhtCommand.GET_RESPONSE: GetResponseHandlerEventArgs getResponseHandlerEventArgs = new GetResponseHandlerEventArgs { DestinationNode = dhtProtocolCommandDto.NodeDto, Key = dhtProtocolCommandDto.Key, Value = dhtProtocolCommandDto.Value, }; OnGetResponseHandler(getResponseHandlerEventArgs); break; case DhtCommand.PUT: PutHandlerEventArgs putHandlerEventArgs = new PutHandlerEventArgs { ProtocolCommandDto = dhtProtocolCommandDto }; OnPut(putHandlerEventArgs); break; case DhtCommand.PUT_RESPONSE: GetResponseHandlerEventArgs putReponseHandlerEventArgs = new GetResponseHandlerEventArgs { DestinationNode = dhtProtocolCommandDto.NodeDto, Key = dhtProtocolCommandDto.Key, Value = dhtProtocolCommandDto.Value, }; OnPutResponseHandler(putReponseHandlerEventArgs); break; case DhtCommand.REMOVE_DATA_FROM_EXPIRED_REPLICAS: GetHandlerEventArgs removeDataFromExpiredReplicasEventArgs = new GetHandlerEventArgs { DhtProtocolCommandDto = dhtProtocolCommandDto }; OnRemoveDataFromExpiredReplicas(removeDataFromExpiredReplicasEventArgs); break; case DhtCommand.REMOVE_DATA_FROM_EXPIRED_REPLICAS_RESPONSE: GetHandlerEventArgs removeDataFromExpiredReplicasResponseEventArgs = new GetHandlerEventArgs { DhtProtocolCommandDto = dhtProtocolCommandDto }; OnRemoveDataFromExpiredReplicasResponseHandler(removeDataFromExpiredReplicasResponseEventArgs); break; default: break; } }