public class MasterServer : SuperSocket.SocketBase.AppServer<MasterSession>
{ } public class MasterSession: SuperSocket.SocketBase.AppSession<MasterSession>
{
protected override void HandleUnknownRequest(StringRequestInfo requestInfo)
{
Send(Const.None);
} protected override void OnSessionStarted()
{
Console.WriteLine($"{this.RemoteEndPoint} connected, " +
$"total={this.AppServer.SessionCount}");
} protected override void OnSessionClosed(CloseReason reason)
{
Console.WriteLine($"{this.RemoteEndPoint} disconnected, " +
$"total={this.AppServer.SessionCount}");
}
} public class Master : CommandBase<MasterSession, StringRequestInfo>
{
public override void ExecuteCommand(MasterSession session, StringRequestInfo requestInfo)
{
if (requestInfo.Parameters.Length > )
{
string action = requestInfo.Parameters[];
string content = "";
if (requestInfo.Parameters.Length > )
{
content = requestInfo.Body.Trim().Substring(action.Length + );
}
if (action!=Const.ActionLogin && !session.Items.Keys.Contains(Const.User))
{
session.Send(Const.None);
return;
}
switch (action)
{
case Const.ActionLogin: Login(session, content);
break;
default: session.Send(Const.None);
break;
}
}
else
{
session.Send(Const.None);
}
} void Login(MasterSession session, string content)
{
var user = content.FromJson<DtoLogin>();
if (user.LoginName == "jonney" && user.Password == "")
{
user.IsLogined = true;
user.SessionId = Guid.NewGuid().ToString();
user.Users = new List<int>();
user.Users.Add();
}
session.Logger.Debug(user.ToJson());
if (user.IsLogined)
{
session.Items.Remove(Const.User);
session.Items.Add(Const.User, user);
}
session.Send(user.ToJson());
} }
 using System.Collections.Generic;

 namespace PublicLib
{
public class DtoBase
{
public int CurPage { get; set; }
public int TotalPages { get; set; }
} public class DtoLogin: DtoBase
{
public string LoginName { get; set; }
public string Password { get; set; } public bool IsLogined { get; set; }
public string SessionId { get; set; }
public List<int> Users { get; set; }
} public class Const
{
public const string None = "None";
public const string User = "User";
public const string ControlerMaster = "Master";
public const string ActionLogin = "Login";
}
}

supersocket作为服务器处理Pda的请求,并返回json结果,demo代码。

supersocket+controller+action的更多相关文章

  1. 尝试asp.net mvc 基于controller action 方式权限控制方案可行性

    微软在推出mvc框架不久,短短几年里,版本更新之快,真是大快人心,微软在这种优秀的框架上做了大量的精力投入,是值得赞同的,毕竟程序员驾驭在这种框架上,能够强力的精化代码,代码层次也更加优雅,扩展较为方 ...

  2. asp.net MVC中获取当前URL/Controller/Action

    一.获取URL(ASP.NET通用): [1]获取完整url(协议名+域名+虚拟目录名+文件名+参数) string url=Request.Url.ToString(); [2]获取虚拟目录名+页面 ...

  3. Part 2 How are the URL's mapped to Controller Action Methods?

    Part 2 How are the URL's mapped to Controller Action Methods? The answer is ASP.NET Routing.Notice t ...

  4. 返璞归真 asp.net mvc (3) - Controller/Action

    原文:返璞归真 asp.net mvc (3) - Controller/Action [索引页] [源码下载] 返璞归真 asp.net mvc (3) - Controller/Action 作者 ...

  5. ASP.NET MVC和ASP.NET Core MVC中获取当前URL/Controller/Action (转载)

    ASP.NET MVC 一.获取URL(ASP.NET通用): [1]获取完整url(协议名+域名+虚拟目录名+文件名+参数) string url=Request.Url.ToString(); [ ...

  6. 尝试asp.net mvc 基于controller action 方式权限控制方案可行性(转载)

    微软在推出mvc框架不久,短短几年里,版本更新之快,真是大快人心,微软在这种优秀的框架上做了大量的精力投入,是值得赞同的,毕竟程序员驾驭在这种框架上,能够强力的精化代码,代码层次也更加优雅,扩展较为方 ...

  7. Only one complex type allowed as argument to a web api controller action.

    错误内容: message":"An error has occurred.","exceptionMessage":"Only one c ...

  8. 找到多个与名为“xxx”的控制器匹配的类型。如果为此请求(“{controller}/{action}/{id}”)提供服务的路由没有指定命名空间以搜索与此请求相匹配的控制器,则会发生这种情况。

    一次在建MVC 项目的进行开发的时候,因为后来想到了一个更好的项目名称,就把 Web项目的名称重命名 改了, 然后 程序集名称,默认命名空间,都改成新的了,刚建立的项目本身也不大,运行起来,总是报 & ...

  9. 找到多个与名为“Home”的控制器匹配的类型,如果为此请求(“{controller}/{action}/{id}”)提供服务的路由没有指定命名空间来搜索匹配此请求的

    参考文章: http://blog.csdn.net/chengmodelong/article/details/41890229 https://www.cnblogs.com/zgqys1980/ ...

随机推荐

  1. PHP 小方法之 过滤参数

    if (! function_exists ( 'parameter_filter' )) { function parameter_filter($str, $type = 'string', $f ...

  2. 深入SpringBoot:自定义PropertySourceLoader

    http://www.jianshu.com/p/5206f74a4406 ********************************* 前言 上一篇文章介绍了SpringBoot的Enable ...

  3. Linux平台下快速搭建FTP服务器

      FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为"文传协议".用于Internet上的控制文件的双向传输.同时,它也是一个应用程序 ...

  4. oracle PROCEDURE AS IS区别

    在存储过程(PROCEDURE)和函数(FUNCTION)中没有区别,在视图(VIEW)中只能用 ,在游标(CURSOR)中只能用IS不能用AS.

  5. junit基础篇、中级篇-实例代码

    学习文章: http://blog.csdn.net/andycpp/article/details/1327147 http://wenku.baidu.com/link?url=C27gDEj0l ...

  6. post multipart data boundary问题 使用curl 向jersey post文件

    原以为curl 模拟post file跟post string类似,-d参数一加 ,header一加就完了,这次遇到个问题,却怎么都搞不定. curl模拟post提交 与客户端定的协议是: Heade ...

  7. C语言样式的文件操作函数

    使用C语言样式的文件操作函数,需要包含stdio.h头文件. 1.打开文件的函数: //oflag的取值为“w”或“r”,分别表示以写或读的方式打开 FILE* fd = fopen(filename ...

  8. AngularJs的UI组件ui-Bootstrap分享(五)——Pager和Pagination

    ui-bootstrap中有两个分页控件,一个是轻量级的Pager,只有上一页和下一页的功能,另一个是功能完整的Pagination,除了上一页和下一页,还可以选择首页和最后页,并且支持多种页数的显示 ...

  9. JVM-并发-Java 内存模型

    Java内存模型 (1). 主内存与工作内存 Java内存模型规定了所有的变量都存储在主内存中. 每类线程的变量的主内存副本拷贝,线程对变量的所有操作(读操作,赋值操作等)都必须工作内存中进行,而不能 ...

  10. checkbox 全选,反选 ,全不选

    在表格或者列表中经常会遇到要全选或者反选等交互,今天总结了一下代码,保留着以后直接拿来用 原理: 1. 全选:当全选checkbox被点击(不管点击之前是什么状态)后,获取其checked状态.然后对 ...