示例#1
0
        public string Get(string key)
        {
            uint hashedKey = (uint)_generateKey.Generate(key);

            Log.Debug(hashedKey.ToString());
            _node.Get(hashedKey);
            bool      isCalled  = false;
            string    value     = null;
            Stopwatch stopwatch = new Stopwatch();

            stopwatch.Start();
            _node.GetResponseEventHandler += (sender, args) =>
            {
                GetResponseHandlerEventArgs eventArgs = (GetResponseHandlerEventArgs)args;
                value    = eventArgs.Value;
                isCalled = true;
            };
            while (!isCalled && stopwatch.Elapsed < TimeSpan.FromSeconds(10))
            {
                //Performance sleep
                Thread.Sleep(100);
            }

            return(value);
        }
示例#2
0
        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;
            }
        }
示例#3
0
        private void OnPutResponseHandler(GetResponseHandlerEventArgs e)
        {
            EventHandler handler = PutReponseHandler;

            handler?.Invoke(this, e);
        }