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);
        }
示例#4
0
        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);
        }