SuperSocket服务器架设(五):使用命令过滤器
2014-09-22 22:29
441 查看
效果:禁止未被授权的连接执行某些命令,这里使用验证登陆为例。
1. 在MySession中添加bool类型的变量isLogin:
2. 创建类MyCommandFilterAttribute,继承自CommandFilterAttribute,并重写方法:
[csharp] view
plaincopyprint?
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,模仿登陆过程:
[csharp] view
plaincopyprint?
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. 给要应用此过滤器的类添加属性
[csharp] view
plaincopyprint?
[MyCommandFilterAttribute]
public class SEND : CommandBase<MySession, StringRequestInfo>
{
public override void ExecuteCommand(MySession session, StringRequestInfo requestInfo)
{
//此处省略N行代码
}
}
5. 若要给所有的命令类应用此过滤器,则给MyServer添加属性
[csharp] view
plaincopyprint?
[MyCommandFilter]
public class MyServer : AppServer<MySession>
{
}
1. 在MySession中添加bool类型的变量isLogin:
2. 创建类MyCommandFilterAttribute,继承自CommandFilterAttribute,并重写方法:
[csharp] view
plaincopyprint?
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,模仿登陆过程:
[csharp] view
plaincopyprint?
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. 给要应用此过滤器的类添加属性
[csharp] view
plaincopyprint?
[MyCommandFilterAttribute]
public class SEND : CommandBase<MySession, StringRequestInfo>
{
public override void ExecuteCommand(MySession session, StringRequestInfo requestInfo)
{
//此处省略N行代码
}
}
5. 若要给所有的命令类应用此过滤器,则给MyServer添加属性
[csharp] view
plaincopyprint?
[MyCommandFilter]
public class MyServer : AppServer<MySession>
{
}
相关文章推荐
- SuperSocket服务器架设(五):使用命令过滤器
- 响应命令使用Ubuntu架设ftp服务器
- 使用Apache&花生壳架设Web服务器
- C#实现SMTP服务器,使用TCP命令实现,功能比较完善
- 使用 链接服务器执行SELECT、UPDATE、INSERT 或 DELETE 及其它命令
- Linux客户端使用SSH的命令管理linux服务器
- 使用Curl命令获取网站Web服务器类
- C#实现SMTP服务器,使用TCP命令实现,功能比较完善
- IIS之Web服务器架设-IIS怎样使用
- C#实现SMTP服务器,使用TCP命令发送Email
- Serv-U在linux下使用ftp命令访问windows下的ftp服务器
- 使用Serv-U架设FTP服务器的设置方法
- C#实现SMTP服务器,使用TCP命令实现,功能比较完善
- 使用Linux的rsync命令实现 多服务器镜像同步
- 使用Linux的rsync命令实现:多服务器镜像同步
- C#实现SMTP服务器,使用TCP命令发送Email
- 使用Cacls命令设置服务器文件访问权限
- 大学时使用pvpgn架设bn服务器的相关资料
- 使用Linux的rsync命令实现 多服务器镜像同步
- 使用Linux的rsync命令实现:多服务器镜像同步