.NET开发——SuperSocket之服务端应用

Posted 行走的技术

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.NET开发——SuperSocket之服务端应用相关的知识,希望对你有一定的参考价值。

上一章我们已经完成了用户登录。

using SuperSocket.SocketBase.Command;using SuperSocket.SocketBase.Protocol;using SuperSocketServer.Session;using System;using System.Linq;
namespace SuperSocketServer.Commands{ public class Login : CommandBase<UserSession, StringRequestInfo> { public override void ExecuteCommand(UserSession session, StringRequestInfo requestInfo){ if (requestInfo.Parameters != null && requestInfo.Parameters.Length == 2) { var sesssionList = session.AppServer.GetAllSessions(); if (sesssionList != null) { UserSession oldSession = sesssionList.FirstOrDefault(s => requestInfo.Parameters[0].Equals(s.Name)); if (oldSession != null) { if (requestInfo.Parameters[1].Equals(oldSession.Password)) { oldSession.Send("已在其他地方登录!"); oldSession.Close(); } else { session.Send("账号或密码错误!"); return; } } }
session.Id = Guid.NewGuid().ToString(); session.Name = requestInfo.Parameters[0]; session.Password = requestInfo.Parameters[1]; session.LoginTime = DateTime.Now; session.Send("登录成功!"); Console.WriteLine($"{DateTime.Now}:用户{session.Name}登录成功!"); Console.WriteLine($"当前聊天室有{sesssionList.Count()}人在线"); } else { session.Send("参数错误!!"); } } }}

我们这里再实现一下用户之间聊天以及发给大家群聊。


我们实现一个聊天命令类Chat

using SuperSocket.SocketBase.Command;using SuperSocket.SocketBase.Protocol;using SuperSocketServer.Session;using System.Linq;
namespace SuperSocketServer.Commands{ public class Chat : CommandBase<UserSession, StringRequestInfo> { public override void ExecuteCommand(UserSession session, StringRequestInfo requestInfo) { if (requestInfo.Parameters != null && requestInfo.Parameters.Length == 2) { string toName = requestInfo.Parameters[0]; string Message = requestInfo.Parameters[1]; UserSession toSession = session.AppServer.GetAllSessions().FirstOrDefault(s => toName.Equals(s.Name)); if (toSession != null) { toSession.Send($"{session.Name} 对你说:{Message}"); } else { session.Send($"{toName}不在聊天室中!"); } } else if (requestInfo.Parameters != null && requestInfo.Parameters.Length == 1) { string Message = requestInfo.Parameters[0]; foreach (var item in session.AppServer.GetAllSessions()) { item.Send($"{session.Name} 对大家说:" + Message); } } else { session.Send("参数错误!!"); } } }}

我们登录三个用户

用户之间互发消息,zhangsan发给lisi

.NET开发——SuperSocket之服务端应用(三)

lisi回复zhangsan

.NET开发——SuperSocket之服务端应用(三)

zhangsan发给wangwu

.NET开发——SuperSocket之服务端应用(三)

wangwu对大家说,所有在线的人都会收到消息。

.NET开发——SuperSocket之服务端应用(三)


如果对不在线的人聊天呢?zhangsan发给zhaoliu

.NET开发——SuperSocket之服务端应用(三)

按我们程序目前设计会提示人员不在聊天室中。


我们再实现,在zhangsan这里登录wangwu的账号,把wangwu踢下线


到此,我们简单的在线聊天室就完成了。


以上是关于.NET开发——SuperSocket之服务端应用的主要内容,如果未能解决你的问题,请参考以下文章

SuperSocket

supersocket特征

SuperSocket与Netty之实现protobuf协议,包括服务端和客户端

SuperSocket和HP-Socket哪个更好

使用SuperSocket打造逾10万长连接的Socket服务

基于开源SuperSocket实现客户端和服务端通信项目实战