.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
lisi回复zhangsan
zhangsan发给wangwu
wangwu对大家说,所有在线的人都会收到消息。
如果对不在线的人聊天呢?zhangsan发给zhaoliu
按我们程序目前设计会提示人员不在聊天室中。
我们再实现,在zhangsan这里登录wangwu的账号,把wangwu踢下线
到此,我们简单的在线聊天室就完成了。
以上是关于.NET开发——SuperSocket之服务端应用的主要内容,如果未能解决你的问题,请参考以下文章
SuperSocket与Netty之实现protobuf协议,包括服务端和客户端