SuperSocket服务器架设(五):使用命令过滤器

来源:互联网 发布:ins社交软件官方下载 编辑:程序博客网 时间:2024/05/28 15:07

效果:禁止未被授权的连接执行某些命令,这里使用验证登陆为例。

 

1.      在MySession中添加bool类型的变量isLogin:

 

2.      创建类MyCommandFilterAttribute,继承自CommandFilterAttribute,并重写方法:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using SuperSocket.Common;using SuperSocket.SocketBase;using SuperSocket.SocketBase.Protocol;namespace SuperSocketApp1{    public class MyCommandFilterAttribute : CommandFilterAttribute    {        /// <summary>        /// 命令监视器-执行命令前调用        /// </summary>        /// <param name="commandContext"></param>        public override void OnCommandExecuting(CommandExecutingContext commandContext)        {            //throw new NotImplementedException();            MySession session = commandContext.Session as MySession;            //判断是否已登录            if (session != null && !session.isLogin)            {                //判断当前命令是否为LOGIN                if (!commandContext.RequestInfo.Key.Equals("LOGIN"))                {                    //取消执行当前命令                    commandContext.Cancel = true;                }            }        }        /// <summary>        /// 命令监视器-执行命令后调用        /// </summary>        /// <param name="commandContext"></param>        public override void OnCommandExecuted(CommandExecutingContext commandContext)        {            //throw new NotImplementedException();        }    }}

3.      创建类LOGIN,模仿登陆过程:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using SuperSocket.SocketBase;using SuperSocket.SocketBase.Command;using SuperSocket.SocketBase.Protocol;namespace SuperSocketApp1.Command{    class LOGIN : CommandBase<MySession, StringRequestInfo>    {        public override void ExecuteCommand(MySession session, StringRequestInfo requestInfo)        {            session.isLogin = true;            session.Send("登陆成功。");        }    }}

4.      给要应用此过滤器的类添加属性

    [MyCommandFilterAttribute]    public class SEND : CommandBase<MySession, StringRequestInfo>    {        public override void ExecuteCommand(MySession session, StringRequestInfo requestInfo)        {           //此处省略N行代码        }    }

5.      若要给所有的命令类应用此过滤器,则给MyServer添加属性

    [MyCommandFilter]    public class MyServer : AppServer<MySession>    {            }


0 0
原创粉丝点击