private PipelineResult SendResponseMessages(ITcpContext context) { var result = PipelineResult.Continue; foreach (var message in context.Response) { var delay = message.ResponseDelay; delay = delay < MessagePipeline.MaximumResponseDelay ? delay : MessagePipeline.MaximumResponseDelay; delay = delay > MessagePipeline.MinimumResponseDelay ? delay : MessagePipeline.MinimumResponseDelay; if (delay > 0) { Task.WaitAll(Task.Delay(delay)); } if (message.Message?.Length > 0) { Task.WaitAll(context.Connection.SendAsync(message.Message)); } if (message.TerminateConnection) { result = PipelineResult.StopAndDisconnect; break; } } return(result); }
public PipelineResult ProcessRequest(ITcpContext context) { var stump = _stumpManager.FindStumpForMessage(context.RequestMessage); if (stump == null) { return(PipelineResult.Continue); } var response = stump.Responses.CreateResponse(context.RequestMessage); response.ForEach((r) => context.Response.Add(r)); return(PipelineResult.Stop); }
private PipelineResult ExecuteHandlers(ITcpContext context) { var result = PipelineResult.Continue; foreach (var handler in _handlers) { result = handler.ProcessRequest(context); if (result != PipelineResult.Continue) { break; } } return(result); }
public static bool IsServerSocketDead(this ITcpContext tcpContext, DateTime now, TimeSpan activityTimeOut, TimeSpan initTimeOut) { if (tcpContext.Inited) { if (now - tcpContext.SocketStatistic.LastReceiveTime > activityTimeOut && now - tcpContext.SocketStatistic.LastSendTime > activityTimeOut) { return(true); } } else { if (now - tcpContext.SocketStatistic.LastReceiveTime > initTimeOut && now - tcpContext.SocketStatistic.LastSendTime > activityTimeOut) { return(true); } } return(false); }