예제 #1
0
        private async ValueTask <bool> InitializeSession(IAppSession session, IChannel channel)
        {
            session.Initialize(this, channel);

            if (channel is IPipeChannel pipeChannel)
            {
                pipeChannel.PipelineFilter.Context = CreatePipelineContext(session);
            }

            var middlewares = _middlewares;

            if (middlewares != null && middlewares.Length > 0)
            {
                for (var i = 0; i < middlewares.Length; i++)
                {
                    var middleware = middlewares[i];

                    if (!await middleware.RegisterSession(session))
                    {
                        _logger.LogWarning($"A session from {session.RemoteEndPoint} was rejected by the middleware {middleware.GetType().Name}.");
                        return(false);
                    }
                }
            }

            return(true);
        }
        private void InitializeSession(IAppSession session, IChannel channel)
        {
            session.Initialize(this, channel);

            var middlewares = _middlewares;

            if (middlewares != null && middlewares.Length > 0)
            {
                for (var i = 0; i < middlewares.Length; i++)
                {
                    middlewares[i].Register(this, session);
                }
            }

            var packageHandler = _packageHandler;

            if (packageHandler != null)
            {
                if (session.Channel is IChannel <TReceivePackageInfo> packegedChannel)
                {
                    packegedChannel.PackageReceived += async(ch, p) =>
                    {
                        try
                        {
                            await packageHandler(session, p);
                        }
                        catch (Exception e)
                        {
                            OnSessionError(session, e);
                        }
                    };
                }
            }
        }
예제 #3
0
        private async ValueTask <bool> InitializeSession(IAppSession session, IChannel channel)
        {
            session.Initialize(this, channel);

            if (channel is IPipeChannel pipeChannel)
            {
                pipeChannel.PipelineFilter.Context = CreatePipelineContext(session);
            }

            var middlewares = _middlewares;

            if (middlewares != null && middlewares.Length > 0)
            {
                for (var i = 0; i < middlewares.Length; i++)
                {
                    var result = await middlewares[i].HandleSession(session);

                    if (!result)
                    {
                        return(false);
                    }
                }
            }

            return(true);
        }
예제 #4
0
        private void InitializeSession(IAppSession session, IChannel channel)
        {
            session.Initialize(this, channel);

            var middlewares = _middlewares;

            if (middlewares != null && middlewares.Length > 0)
            {
                for (var i = 0; i < middlewares.Length; i++)
                {
                    middlewares[i].Register(this, session);
                }
            }
        }
예제 #5
0
        private void InitializeSession(IAppSession session, IChannel channel)
        {
            session.Initialize(this, channel);

            if (channel is IPipeChannel pipeChannel)
            {
                pipeChannel.PipelineFilter.Context = CreatePipelineContext(session);
            }

            var middlewares = _middlewares;

            if (middlewares != null && middlewares.Length > 0)
            {
                for (var i = 0; i < middlewares.Length; i++)
                {
                    middlewares[i].Register(this, session);
                }
            }
        }