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); } } }
public bool SetResponse(ResponsePush response) { return(_taskSource.TrySetResult(response)); }