|
|
using System.Net;
|
|
|
using System.Text;
|
|
|
using System.Text.Unicode;
|
|
|
using OMS.NET.Instructs;
|
|
|
using WebSocketSharp;
|
|
|
using WebSocketSharp.Server;
|
|
|
using ErrorEventArgs = WebSocketSharp.ErrorEventArgs;
|
|
|
namespace OMS.NET
|
|
|
{
|
|
|
public class MapServer : WebSocketBehavior
|
|
|
{
|
|
|
private IPEndPoint iPEndPoint = new(IPAddress.Any, 0);
|
|
|
protected override async void OnMessage(MessageEventArgs e)
|
|
|
{
|
|
|
GlobalArea.Log.Debug(this.ID + " " + this.Context.UserEndPoint.ToString() + ":" + e.Data);
|
|
|
Instruct? instruct = Instruct.JsonStringParse(e.Data);
|
|
|
if (instruct != null)
|
|
|
{
|
|
|
await instruct.HandlerAndMeasure(this.ID);//传递ws连接的id,为某些需要判断ws连接状态的处理逻辑准备
|
|
|
if (instruct.ResponseOrBroadcastInstructs.Count > 0)
|
|
|
{
|
|
|
instruct.ResponseOrBroadcastInstructs.ForEach(res =>
|
|
|
{
|
|
|
if (res.IsResponse)
|
|
|
{
|
|
|
string str = res.ToJsonString();
|
|
|
Send(str);
|
|
|
//GlobalArea.Log.Debug("已发送回复 " + str);
|
|
|
}
|
|
|
if (res.IsBroadcast)
|
|
|
{
|
|
|
string str = res.ToJsonString();
|
|
|
foreach (IWebSocketSession session in this.Sessions.Sessions)
|
|
|
{
|
|
|
//看起来只有登录后的连接才能收到广播,这里添加下过滤
|
|
|
if (GlobalArea.LoginCheckByID(session.ID))
|
|
|
{
|
|
|
session.Context.WebSocket.Send(str);
|
|
|
}
|
|
|
}
|
|
|
//GlobalArea.Log.Debug("已发送广播 " + str);
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
protected override void OnOpen()
|
|
|
{
|
|
|
this.iPEndPoint = this.Context.UserEndPoint;
|
|
|
GlobalArea.AddUserConnect(this.ID, this.iPEndPoint);
|
|
|
Console.WriteLine(this.ID + " " + this.iPEndPoint.ToString() + " Conection Open");
|
|
|
Console.WriteLine($"当前连接客户端数量: {GlobalArea.ConnectClientsCount}");
|
|
|
}
|
|
|
|
|
|
protected override void OnClose(CloseEventArgs e)
|
|
|
{
|
|
|
GlobalArea.RemoveUserConnectByID(this.ID);
|
|
|
Console.WriteLine(this.ID + " " + this.iPEndPoint.ToString() + " Conection Close" + e.Reason);
|
|
|
Console.WriteLine($"当前连接客户端数量: {GlobalArea.ConnectClientsCount}");
|
|
|
}
|
|
|
|
|
|
protected override void OnError(ErrorEventArgs e)
|
|
|
{
|
|
|
GlobalArea.RemoveUserConnectByID(this.ID);
|
|
|
Console.WriteLine(this.ID + " " + this.iPEndPoint.ToString() + " Conection Error Close" + e.Message);
|
|
|
Console.WriteLine($"当前连接客户端数量: {GlobalArea.ConnectClientsCount}");
|
|
|
}
|
|
|
}
|
|
|
}
|