自定义AppSession

TelnetSession.cs

 1     public  class TelnetSession:AppSession<TelnetSession>
 2     {
 3         protected override void OnSessionStarted()
 4         {
 5             Send("Welcome to SuperSocket Telnet Server");
 6         }
 7
 8         protected override void HandleUnknownRequest(SuperSocket.SocketBase.Protocol.StringRequestInfo requestInfo)
 9         {
10             Send("Unknow request");
11         }
12
13         protected override void HandleException(Exception e)
14         {
15             this.Send("Application error: {0}", e.Message);
16         }
17
18         protected override void OnSessionClosed(CloseReason reason)
19         {
20             //add you logics which will be executed after the session is closed
21             base.OnSessionClosed(reason);
22         }
23     }

Echo.cs

1     public class Echo : CommandBase<TelnetSession, StringRequestInfo>
2     {
3         public override void ExecuteCommand(TelnetSession session, StringRequestInfo requestInfo)
4         {
5             session.Send(requestInfo.Body);
6         }
7     }

在这个command代码中,你可以看到类ECHO的父类是CommandBase<AppSession, StringRequestInfo>, 它有一个泛型参数AppSession。 是的,它是默认的AppSession类。 如果你在你的系统中使用你自己建立的AppSession类,那么你必须将你自己定义的AppSession类传进去,否则你的服务器无法发现这个Command:

Add.cs

1     public class Add : CommandBase<TelnetSession, StringRequestInfo>
2     {
3         public override void ExecuteCommand(TelnetSession session, StringRequestInfo requestInfo)
4         {
5             session.Send(requestInfo.Parameters.Select(p => Convert.ToInt32(p)).Sum().ToString());
6         }
7     }

Program.cs

 1     class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             Console.WriteLine("Press any key to start the server!");
 6
 7             Console.ReadKey();
 8             Console.WriteLine();
 9
10             var appServer = new AppServer<TelnetSession>();
11             var serverConfig = new ServerConfig
12             {
13                 Port = 8000
14             };
15
16             //Setup the appServer
17             if (!appServer.Setup(serverConfig))
18             {
19                 Console.WriteLine("Failed to setup!");
20                 Console.ReadKey();
21                 return;
22             }
23             Console.WriteLine();
24             //Try to start the appServer
25             if (!appServer.Start())
26             {
27                 Console.WriteLine("Failed to start!");
28                 Console.ReadKey();
29                 return;
30             }
31
32             Console.WriteLine("The server started successfully, press key ‘q‘ to stop it!");
33
34             while (Console.ReadKey().KeyChar != ‘q‘)
35             {
36                 Console.WriteLine();
37                 continue;
38             }
39
40             Console.WriteLine();
41             appServer.Stop();
42
43             Console.WriteLine("The server was stopped!");
44         }
45     }

时间: 2024-11-09 00:53:51

自定义AppSession的相关文章

SuperSocket入门(二)- 探索AppServer、AppSession,Conmmand和App.config

在上一篇文章中,我们已经了解到了如何在SuperSocket处理客户端请求. 同时我们可能会发现一个问题,如果我们的服务器端包含有很多复杂的业务逻辑,这样的switch/case代码将会很长而且非常难看,并且没有遵循面向对象设计的原则(OOD). 在这种情况下,SuperSocket提供了一些让我们在多个独立的类中处理各自不同的请求的命令框架,接下来我们一起来看一下怎么使用 1.自定义AppSession AppSession 代表一个和客户端的逻辑连接,基于连接的操作应该放在该类之中.你可以用

SuperSocket快速入门(三):实现你的AppServer和AppSession

什么是AppSession? AppSession 代表一个和客户端的逻辑连接,基于连接的操作应该定于在该类之中.你可以用该类的实例发送数据到客户端,接收客户端发送的数据或者关闭连接.同时可以保存客户端所关联的数据. 什么是AppServer? AppServer 代表了监听客户端连接,承载TCP连接的服务器实例.理想情况下,我们可以通过AppServer实例获取任何你想要的客户端连接,服务器级别的操作和逻辑应该定义在此类之中. 第一步:创建你的AppSession 为什么要创建AppSessi

SuperSocket服务器架设(三):在SuperSocket中自定义Command、AppServer和AppSession

1.      创建自定义类MySession,继承AppSession类并重写AppSession类的方法 注:一个AppSession对象对应一个连接 [csharp] view plaincopyprint? using System; using System.Collections.Generic; using System.Linq; using System.Text; using SuperSocket; using SuperSocket.Common; using Super

SuperSocket 1.6.4 通过FixedHeaderReceiveFilter解析自定义协议

SuperSocket 提供了一些通用的协议解析工具, 你可以用他们简单而且快速的实现你自己的通信协议: TerminatorReceiveFilter (SuperSocket.SocketBase.Protocol.TerminatorReceiveFilter, SuperSocket.SocketBase) CountSpliterReceiveFilter (SuperSocket.Facility.Protocol.CountSpliterReceiveFilter, SuperSo

Linux centos下让alias自定义永久生效(+常用的别名)

alias可以简化一些复杂的命令串,使一个单词或简化后的命令即可实现复杂(通常是带很多参数的长串)命令. 基本用法: alias 简化命令='实际的长串命令'    //实际长串命令通常为'原命令 -/选项参数' eg. alias ll='ls -a' 获取别名: alias        //即可查看当前设定的所有alias别名 取消别名: unalias 简化命令 eg. unalias ll            //取消ll的别名 永久生效: 直接使用alias命令定义的别名,重启后就

MVC4 自定义错误页面(三)

一.概述 MVC4框架自带了定义错误页,该页面位于Shared/Error,该页面能够显示系统未能捕获的异常,如何才能使用该页面: 二.使用步骤: 1.配置WebConfig文件,在System.Web节点下加上 <customErrors mode="On"  defaultRedirect="~/Shared/Error" /> 翻阅一些大神写的博客,在他们的博客中指出defaultRedirect是指向错误页面的URL,可是经过本人测试的时候,发现

自定义及发布一个webservice服务

自定义及发布一个webservice服务    - 声明 某个业务服务为webservice服务       通过@webservice 注解来声明    - 发布webservice服务       Endpoint.publish()发布 (默认对public修饰的方法进行发布)    - 通过wsimport生成本地代理来访问自己发布的webservice       wsimport 1.发布自定义webservice phone.java package ws.myWebService

前端angularJS利用directive实现移动端自定义软键盘的方法

最近公司项目的需求上要求我们iPad项目上一些需要输入数字的地方用我们自定义的软键盘而不是移动端设备自带的键盘,刚接到需求有点懵,因为之前没有做过,后来理了一下思路发现这东西也就那样.先看一下实现之后的效果: 实现的效果就是当点击页面中需要弹出软键盘的时候软键盘弹出,浮在页面的中间,和模态框一样的效果,可以在软键盘中输入任何数字,附带的功能有小数点.退格.清空.确定等功能.当在键盘上点击数字的时候页面中的表单中实时的添加对应的数字,上图中可以看到. 产品经理那边给的原因是iPad屏幕本来就小,如

自定义input[type=&quot;checkbox&quot;]的样式

对复选框自定义样式,我们以前一直用的脚本来实现,不过现在可以使用新的伪类 :checkbox 来实现. 如果直接对复选框设置样式,那么这个伪类并不实用,因为没有多少样式能够对复选框起作用.不过,倒是可以基于复选框的勾选状态借助组合选择符来给其他元素设置样式. 很多时候,无论是为了表单元素统一,还是为了用户体验良好,我们都会选择 label 元素和 input[type="checkbox"] 一起使用.当<label>元素与复选框关联之后,也可以起到触发开关的作用. 思路: