supersocket+controller+action
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的更多相关文章
- 尝试asp.net mvc 基于controller action 方式权限控制方案可行性
微软在推出mvc框架不久,短短几年里,版本更新之快,真是大快人心,微软在这种优秀的框架上做了大量的精力投入,是值得赞同的,毕竟程序员驾驭在这种框架上,能够强力的精化代码,代码层次也更加优雅,扩展较为方 ...
- asp.net MVC中获取当前URL/Controller/Action
一.获取URL(ASP.NET通用): [1]获取完整url(协议名+域名+虚拟目录名+文件名+参数) string url=Request.Url.ToString(); [2]获取虚拟目录名+页面 ...
- 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 ...
- 返璞归真 asp.net mvc (3) - Controller/Action
原文:返璞归真 asp.net mvc (3) - Controller/Action [索引页] [源码下载] 返璞归真 asp.net mvc (3) - Controller/Action 作者 ...
- ASP.NET MVC和ASP.NET Core MVC中获取当前URL/Controller/Action (转载)
ASP.NET MVC 一.获取URL(ASP.NET通用): [1]获取完整url(协议名+域名+虚拟目录名+文件名+参数) string url=Request.Url.ToString(); [ ...
- 尝试asp.net mvc 基于controller action 方式权限控制方案可行性(转载)
微软在推出mvc框架不久,短短几年里,版本更新之快,真是大快人心,微软在这种优秀的框架上做了大量的精力投入,是值得赞同的,毕竟程序员驾驭在这种框架上,能够强力的精化代码,代码层次也更加优雅,扩展较为方 ...
- Only one complex type allowed as argument to a web api controller action.
错误内容: message":"An error has occurred.","exceptionMessage":"Only one c ...
- 找到多个与名为“xxx”的控制器匹配的类型。如果为此请求(“{controller}/{action}/{id}”)提供服务的路由没有指定命名空间以搜索与此请求相匹配的控制器,则会发生这种情况。
一次在建MVC 项目的进行开发的时候,因为后来想到了一个更好的项目名称,就把 Web项目的名称重命名 改了, 然后 程序集名称,默认命名空间,都改成新的了,刚建立的项目本身也不大,运行起来,总是报 & ...
- 找到多个与名为“Home”的控制器匹配的类型,如果为此请求(“{controller}/{action}/{id}”)提供服务的路由没有指定命名空间来搜索匹配此请求的
参考文章: http://blog.csdn.net/chengmodelong/article/details/41890229 https://www.cnblogs.com/zgqys1980/ ...
随机推荐
- PHP 小方法之 过滤参数
if (! function_exists ( 'parameter_filter' )) { function parameter_filter($str, $type = 'string', $f ...
- 深入SpringBoot:自定义PropertySourceLoader
http://www.jianshu.com/p/5206f74a4406 ********************************* 前言 上一篇文章介绍了SpringBoot的Enable ...
- Linux平台下快速搭建FTP服务器
FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为"文传协议".用于Internet上的控制文件的双向传输.同时,它也是一个应用程序 ...
- oracle PROCEDURE AS IS区别
在存储过程(PROCEDURE)和函数(FUNCTION)中没有区别,在视图(VIEW)中只能用 ,在游标(CURSOR)中只能用IS不能用AS.
- junit基础篇、中级篇-实例代码
学习文章: http://blog.csdn.net/andycpp/article/details/1327147 http://wenku.baidu.com/link?url=C27gDEj0l ...
- post multipart data boundary问题 使用curl 向jersey post文件
原以为curl 模拟post file跟post string类似,-d参数一加 ,header一加就完了,这次遇到个问题,却怎么都搞不定. curl模拟post提交 与客户端定的协议是: Heade ...
- C语言样式的文件操作函数
使用C语言样式的文件操作函数,需要包含stdio.h头文件. 1.打开文件的函数: //oflag的取值为“w”或“r”,分别表示以写或读的方式打开 FILE* fd = fopen(filename ...
- AngularJs的UI组件ui-Bootstrap分享(五)——Pager和Pagination
ui-bootstrap中有两个分页控件,一个是轻量级的Pager,只有上一页和下一页的功能,另一个是功能完整的Pagination,除了上一页和下一页,还可以选择首页和最后页,并且支持多种页数的显示 ...
- JVM-并发-Java 内存模型
Java内存模型 (1). 主内存与工作内存 Java内存模型规定了所有的变量都存储在主内存中. 每类线程的变量的主内存副本拷贝,线程对变量的所有操作(读操作,赋值操作等)都必须工作内存中进行,而不能 ...
- checkbox 全选,反选 ,全不选
在表格或者列表中经常会遇到要全选或者反选等交互,今天总结了一下代码,保留着以后直接拿来用 原理: 1. 全选:当全选checkbox被点击(不管点击之前是什么状态)后,获取其checked状态.然后对 ...