示例#1
0
        public ValueTask <ResponsePush> HandlePushAsync(RequestPush request)
        {
            var timeRequestMessage = _binarySerializer.Deserialize <TimeRequestMessage>(request.Body);

            var timeResponseMessage = new TimeResponseMessage()
            {
                CreateTime = timeRequestMessage.CreateTime,
                HandleTime = DateTime.Now,
                Content    = Encoding.UTF8.GetBytes($"Hello Server!")
            };

            var responsePush = new ResponsePush()
            {
                Code = request.Code,
                Body = _binarySerializer.Serialize(timeResponseMessage)
            };

            _performanceService.IncrementKeyCount("PushHandleAsync", (DateTime.Now - timeRequestMessage.CreateTime).TotalMilliseconds);
            return(new ValueTask <ResponsePush>(responsePush));
        }
 /// <summary>Scan sended 'ReqMessagePacket' whether it is timeout
 /// </summary>
 private void StartScanTimeoutRequestTask()
 {
     Task.Factory.StartNew(async() =>
     {
         while (!_cts.Token.IsCancellationRequested)
         {
             try
             {
                 var timeoutKeyList = new List <int>();
                 foreach (var entry in _pushFutureDict)
                 {
                     if (entry.Value.IsTimeout())
                     {
                         timeoutKeyList.Add(entry.Key);
                     }
                 }
                 foreach (var key in timeoutKeyList)
                 {
                     if (_pushFutureDict.TryRemove(key, out PushFuture pushFuture))
                     {
                         var timeoutResp = new ResponsePush()
                         {
                             Code     = pushFuture.Code,
                             PushType = PushType.Reply
                         };
                         pushFuture.SetResponse(timeoutResp);
                         _logger.LogDebug("Removed timeout request, sequence:{0}", _sequence);
                     }
                 }
             }
             catch (Exception ex)
             {
                 _logger.LogError(ex, "Scan timeout request fail,ex:{0}", ex.Message);
             }
             finally
             {
                 await Task.Delay(_setting.ScanTimeoutRequestInterval);
             }
         }
     }, TaskCreationOptions.LongRunning);
 }
        /// <summary>Handle the 'RespPushPacket' received from client
        /// </summary>
        private void SetPushRespPacket(PushRespPacket packet)
        {
            if (packet.PushType != PushType.Reply)
            {
                _logger.LogInformation("PushRespPacket type is not 'Reply' , will not set response !");
                return;
            }

            if (_pushFutureDict.TryRemove(packet.Sequence, out PushFuture pushFuture))
            {
                var responsePush = new ResponsePush()
                {
                    PushType = PushType.Reply,
                    Code     = packet.Code,
                    Body     = packet.Body
                };

                if (!pushFuture.SetResponse(responsePush))
                {
                    _logger.LogDebug("Set remoting response failed,Sequence: '{0}'.", packet.Sequence);
                }
            }
        }
示例#4
0
 public bool SetResponse(ResponsePush response)
 {
     return(_taskSource.TrySetResult(response));
 }