forked from project-redbud/FunGame-Core
Add SocketObject
This commit is contained in:
parent
36c15cb062
commit
f0362e7257
@ -1,5 +1,4 @@
|
||||
using System.Collections;
|
||||
using Milimoe.FunGame.Core.Library.Constant;
|
||||
using Milimoe.FunGame.Core.Library.Constant;
|
||||
|
||||
namespace Milimoe.FunGame.Core.Interface.Base
|
||||
{
|
||||
@ -15,7 +14,7 @@ namespace Milimoe.FunGame.Core.Interface.Base
|
||||
public bool Connected => Instance != null && Instance.Connected;
|
||||
public bool Receiving { get; }
|
||||
public SocketResult Send(SocketMessageType type, params object[] objs);
|
||||
public object[] Receive();
|
||||
public Library.Common.Network.SocketObject Receive();
|
||||
public void Close();
|
||||
public void StartReceiving(Task t);
|
||||
}
|
||||
|
||||
@ -37,11 +37,16 @@ namespace Milimoe.FunGame.Core.Library.Common.Network
|
||||
Instance?.Close();
|
||||
}
|
||||
|
||||
public object[] Receive()
|
||||
public SocketObject Receive()
|
||||
{
|
||||
object[] result = SocketManager.Receive(Instance);
|
||||
if (result.Length != 3) throw new SocketWrongInfoException();
|
||||
return result;
|
||||
try
|
||||
{
|
||||
return SocketManager.Receive(Instance);
|
||||
}
|
||||
catch
|
||||
{
|
||||
throw new SocketWrongInfoException();
|
||||
}
|
||||
}
|
||||
|
||||
public SocketResult Send(SocketMessageType type, params object[] objs)
|
||||
|
||||
@ -13,7 +13,7 @@ namespace Milimoe.FunGame.Core.Library.Common.Network
|
||||
public string JsonString { get; }
|
||||
|
||||
[JsonConstructor]
|
||||
public JsonObject(SocketMessageType MessageType, Guid Token, object[] Parameters)
|
||||
public JsonObject(SocketMessageType MessageType, Guid Token, params object[] Parameters)
|
||||
{
|
||||
this.MessageType = MessageType;
|
||||
this.Token = Token;
|
||||
@ -21,7 +21,7 @@ namespace Milimoe.FunGame.Core.Library.Common.Network
|
||||
this.JsonString = JsonSerializer.Serialize(this);
|
||||
}
|
||||
|
||||
public static string GetString(SocketMessageType MessageType, Guid Token, object[] Parameters)
|
||||
public static string GetString(SocketMessageType MessageType, Guid Token, params object[] Parameters)
|
||||
{
|
||||
return new JsonObject(MessageType, Token, Parameters).JsonString;
|
||||
}
|
||||
|
||||
@ -77,7 +77,7 @@ namespace Milimoe.FunGame.Core.Library.Common.Network
|
||||
throw new ListeningSocketCanNotSendException();
|
||||
}
|
||||
|
||||
public object[] Receive()
|
||||
public SocketObject Receive()
|
||||
{
|
||||
throw new ListeningSocketCanNotSendException();
|
||||
}
|
||||
|
||||
@ -54,17 +54,23 @@ namespace Milimoe.FunGame.Core.Library.Common.Network
|
||||
return SocketResult.NotSent;
|
||||
}
|
||||
|
||||
public object[] Receive()
|
||||
public SocketObject Receive()
|
||||
{
|
||||
object[] result = SocketManager.Receive();
|
||||
if (result.Length != 2) throw new SocketWrongInfoException();
|
||||
if ((SocketMessageType)result[0] == SocketMessageType.HeartBeat)
|
||||
try
|
||||
{
|
||||
SocketObject result = SocketManager.Receive();
|
||||
if (result.SocketType == SocketMessageType.HeartBeat)
|
||||
{
|
||||
if (WaitHeartBeatReply != null && !WaitHeartBeatReply.IsCompleted) WaitHeartBeatReply.Wait(1);
|
||||
_HeartBeatFaileds = 0;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
catch
|
||||
{
|
||||
throw new SocketWrongInfoException();
|
||||
}
|
||||
}
|
||||
|
||||
public void CheckHeartBeatFaileds()
|
||||
{
|
||||
|
||||
18
FunGame.Core/Library/Common/Network/SocketObject.cs
Normal file
18
FunGame.Core/Library/Common/Network/SocketObject.cs
Normal file
@ -0,0 +1,18 @@
|
||||
using Milimoe.FunGame.Core.Library.Constant;
|
||||
|
||||
namespace Milimoe.FunGame.Core.Library.Common.Network
|
||||
{
|
||||
public readonly struct SocketObject
|
||||
{
|
||||
public SocketMessageType SocketType { get; } = SocketMessageType.Unknown;
|
||||
public Guid Token { get; } = Guid.Empty;
|
||||
public object[] Parameters { get; } = Array.Empty<object>();
|
||||
|
||||
public SocketObject(SocketMessageType type, Guid token, params object[] parameters)
|
||||
{
|
||||
SocketType = type;
|
||||
Token = token;
|
||||
Parameters = parameters;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -37,6 +37,9 @@
|
||||
public const string Chat = "Chat";
|
||||
public const string Reg = "Reg";
|
||||
public const string CheckReg = "CheckReg";
|
||||
public const string CreateRoom = "CreateRoom";
|
||||
public const string UpdateRoom = "UpdateRoom";
|
||||
public const string ChangeRoomSetting = "ChangeRoomSetting";
|
||||
}
|
||||
|
||||
public class ReflectionSet
|
||||
|
||||
@ -61,7 +61,10 @@
|
||||
QuitRoom,
|
||||
Chat,
|
||||
Reg,
|
||||
CheckReg
|
||||
CheckReg,
|
||||
CreateRoom,
|
||||
UpdateRoom,
|
||||
ChangeRoomSetting
|
||||
}
|
||||
|
||||
public enum SocketRuntimeType
|
||||
|
||||
@ -156,9 +156,9 @@ namespace Milimoe.FunGame.Core.Service
|
||||
/// 用于客户端接收服务器信息
|
||||
/// </summary>
|
||||
/// <returns>通信类型[0]和参数[1]</returns>
|
||||
internal static object[] Receive()
|
||||
internal static Library.Common.Network.SocketObject Receive()
|
||||
{
|
||||
object[] result = Array.Empty<object>();
|
||||
Library.Common.Network.SocketObject result = default;
|
||||
if (Socket != null)
|
||||
{
|
||||
// 从服务器接收消息
|
||||
@ -170,7 +170,7 @@ namespace Milimoe.FunGame.Core.Service
|
||||
Library.Common.Network.JsonObject? json = Library.Common.Network.JsonObject.GetObject(msg);
|
||||
if (json != null)
|
||||
{
|
||||
result = new object[] { json.MessageType, json.Parameters };
|
||||
result = new Library.Common.Network.SocketObject(json.MessageType, json.Token, json.Parameters);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@ -183,9 +183,9 @@ namespace Milimoe.FunGame.Core.Service
|
||||
/// </summary>
|
||||
/// <param name="ClientSocket">客户端Socket</param>
|
||||
/// <returns>通信类型[0]、Token[1]和参数[2]</returns>
|
||||
internal static object[] Receive(Socket ClientSocket)
|
||||
internal static Library.Common.Network.SocketObject Receive(Socket ClientSocket)
|
||||
{
|
||||
object[] result = Array.Empty<object>();
|
||||
Library.Common.Network.SocketObject result = default;
|
||||
if (ClientSocket != null)
|
||||
{
|
||||
// 从客户端接收消息
|
||||
@ -197,7 +197,7 @@ namespace Milimoe.FunGame.Core.Service
|
||||
Library.Common.Network.JsonObject? json = Library.Common.Network.JsonObject.GetObject(msg);
|
||||
if (json != null)
|
||||
{
|
||||
result = new object[] { json.MessageType, json.Token, json.Parameters };
|
||||
result = new Library.Common.Network.SocketObject(json.MessageType, json.Token, json.Parameters);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@ -226,6 +226,9 @@ namespace Milimoe.FunGame.Core.Service
|
||||
SocketMessageType.Chat => SocketSet.Chat,
|
||||
SocketMessageType.Reg => SocketSet.Reg,
|
||||
SocketMessageType.CheckReg => SocketSet.CheckReg,
|
||||
SocketMessageType.CreateRoom => SocketSet.CreateRoom,
|
||||
SocketMessageType.UpdateRoom => SocketSet.UpdateRoom,
|
||||
SocketMessageType.ChangeRoomSetting => SocketSet.ChangeRoomSetting,
|
||||
_ => SocketSet.Unknown,
|
||||
};
|
||||
}
|
||||
@ -241,7 +244,7 @@ namespace Milimoe.FunGame.Core.Service
|
||||
/// <param name="type">通信类型</param>
|
||||
/// <param name="objs">参数</param>
|
||||
/// <returns>结果</returns>
|
||||
internal delegate Task<T> SocketHandler<T>(SocketMessageType type, params object[] objs);
|
||||
internal delegate Task<T> SocketHandler<T>(Library.Common.Network.SocketObject SocketObject);
|
||||
|
||||
/// <summary>
|
||||
/// 异步监听事件
|
||||
@ -249,123 +252,23 @@ namespace Milimoe.FunGame.Core.Service
|
||||
/// <param name="type">通信类型</param>
|
||||
/// <param name="objs">参数</param>
|
||||
/// <returns>线程</returns>
|
||||
internal delegate Task SocketHandler(SocketMessageType type, params object[] objs);
|
||||
|
||||
/// <summary>
|
||||
/// 监听返回值为bool的事件
|
||||
/// </summary>
|
||||
internal static event SocketHandler<bool>? SocketReceiveBoolAsync;
|
||||
|
||||
/// <summary>
|
||||
/// 监听返回值为String的事件
|
||||
/// </summary>
|
||||
internal static event SocketHandler<string>? SocketReceiveStringAsync;
|
||||
|
||||
/// <summary>
|
||||
/// 监听返回值为object的事件
|
||||
/// </summary>
|
||||
internal static event SocketHandler<object>? SocketReceiveObjectAsync;
|
||||
|
||||
/// <summary>
|
||||
/// 监听返回值为int的事件
|
||||
/// </summary>
|
||||
internal static event SocketHandler<int>? SocketReceiveIntAsync;
|
||||
|
||||
/// <summary>
|
||||
/// 监听返回值为decimal的事件
|
||||
/// </summary>
|
||||
internal static event SocketHandler<decimal>? SocketReceiveDecimalAsync;
|
||||
internal delegate Task SocketHandler(Library.Common.Network.SocketObject SocketObject);
|
||||
|
||||
/// <summary>
|
||||
/// 监听没有返回值的事件
|
||||
/// </summary>
|
||||
internal static event SocketHandler? SocketReceiveAsync;
|
||||
|
||||
/// <summary>
|
||||
/// 触发异步返回bool事件
|
||||
/// </summary>
|
||||
/// <param name="type">通信类型</param>
|
||||
/// <param name="objs">参数</param>
|
||||
/// <returns>bool结果</returns>
|
||||
internal static async Task<bool> OnSocketReceiveBoolAsync(SocketMessageType type, params object[] objs)
|
||||
{
|
||||
if (SocketReceiveBoolAsync != null)
|
||||
{
|
||||
return await SocketReceiveBoolAsync.Invoke(type, objs);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 触发异步返回string事件
|
||||
/// </summary>
|
||||
/// <param name="type">通信类型</param>
|
||||
/// <param name="objs">参数</param>
|
||||
/// <returns>string结果</returns>
|
||||
internal static async Task<string> OnSocketReceiveStringAsync(SocketMessageType type, params object[] objs)
|
||||
{
|
||||
if (SocketReceiveStringAsync != null)
|
||||
{
|
||||
return await SocketReceiveStringAsync.Invoke(type, objs);
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 触发异步返回object事件
|
||||
/// </summary>
|
||||
/// <param name="type">通信类型</param>
|
||||
/// <param name="objs">参数</param>
|
||||
/// <returns>object结果</returns>
|
||||
internal static async Task<object> OnSocketReceiveObjectAsync(SocketMessageType type, params object[] objs)
|
||||
{
|
||||
if (SocketReceiveObjectAsync != null)
|
||||
{
|
||||
return await SocketReceiveObjectAsync.Invoke(type, objs);
|
||||
}
|
||||
return General.EntityInstance;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 触发异步返回int事件
|
||||
/// </summary>
|
||||
/// <param name="type">通信类型</param>
|
||||
/// <param name="objs">参数</param>
|
||||
/// <returns>int结果</returns>
|
||||
internal static async Task<int> OnSocketReceiveIntAsync(SocketMessageType type, params object[] objs)
|
||||
{
|
||||
if (SocketReceiveIntAsync != null)
|
||||
{
|
||||
return await SocketReceiveIntAsync.Invoke(type, objs);
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 触发异步返回decimal事件
|
||||
/// </summary>
|
||||
/// <param name="type">通信类型</param>
|
||||
/// <param name="objs">参数</param>
|
||||
/// <returns>decimal结果</returns>
|
||||
internal static async Task<decimal> OnSocketReceiveDecimalAsync(SocketMessageType type, params object[] objs)
|
||||
{
|
||||
if (SocketReceiveDecimalAsync != null)
|
||||
{
|
||||
return await SocketReceiveDecimalAsync.Invoke(type, objs);
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 触发异步无返回值事件
|
||||
/// </summary>
|
||||
/// <param name="type">通信类型</param>
|
||||
/// <param name="objs">参数</param>
|
||||
internal static async Task OnSocketReceiveAsync(SocketMessageType type, params object[] objs)
|
||||
internal static void OnSocketReceiveAsync(Library.Common.Network.SocketObject SocketObject)
|
||||
{
|
||||
if (SocketReceiveAsync != null)
|
||||
{
|
||||
await SocketReceiveAsync.Invoke(type, objs);
|
||||
SocketReceiveAsync.Invoke(SocketObject);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -3,11 +3,11 @@ using Milimoe.FunGame.Desktop.Library;
|
||||
using Milimoe.FunGame.Desktop.Model;
|
||||
using Milimoe.FunGame.Core.Library.Constant;
|
||||
using Milimoe.FunGame.Desktop.UI;
|
||||
using Milimoe.FunGame.Desktop.Library.Interface;
|
||||
using Milimoe.FunGame.Core.Library.Common.Network;
|
||||
|
||||
namespace Milimoe.FunGame.Desktop.Controller
|
||||
{
|
||||
public class RegisterController : ISocketCallBack
|
||||
public class RegisterController
|
||||
{
|
||||
private readonly Register Register;
|
||||
private readonly RegisterModel RegModel;
|
||||
|
||||
@ -1,9 +0,0 @@
|
||||
using Milimoe.FunGame.Core.Library.Constant;
|
||||
|
||||
namespace Milimoe.FunGame.Desktop.Library.Interface
|
||||
{
|
||||
public interface ISocketCallBack
|
||||
{
|
||||
public void SocketHandler(SocketMessageType type, params object[]? objs);
|
||||
}
|
||||
}
|
||||
9
FunGame.Desktop/Library/Interface/ISocketHandler.cs
Normal file
9
FunGame.Desktop/Library/Interface/ISocketHandler.cs
Normal file
@ -0,0 +1,9 @@
|
||||
using Milimoe.FunGame.Core.Library.Common.Network;
|
||||
|
||||
namespace Milimoe.FunGame.Desktop.Library.Interface
|
||||
{
|
||||
public interface ISocketHandler
|
||||
{
|
||||
public void SocketHandler(SocketObject SocketObject);
|
||||
}
|
||||
}
|
||||
@ -1,6 +1,7 @@
|
||||
using Milimoe.FunGame.Core.Api.Utility;
|
||||
using Milimoe.FunGame.Core.Entity;
|
||||
using Milimoe.FunGame.Core.Library.Common.Event;
|
||||
using Milimoe.FunGame.Core.Library.Common.Network;
|
||||
using Milimoe.FunGame.Core.Library.Constant;
|
||||
using Milimoe.FunGame.Core.Library.Exception;
|
||||
using Milimoe.FunGame.Desktop.Controller;
|
||||
@ -296,13 +297,13 @@ namespace Milimoe.FunGame.Desktop.Model
|
||||
Socket?.StartReceiving(ReceivingTask);
|
||||
}
|
||||
|
||||
private object[] GetServerMessage()
|
||||
private SocketObject GetServerMessage()
|
||||
{
|
||||
if (Socket != null && Socket.Connected)
|
||||
{
|
||||
return Socket.Receive();
|
||||
}
|
||||
return new object[2] { SocketMessageType.Unknown, Array.Empty<object>() };
|
||||
return new SocketObject(SocketMessageType.Unknown, Guid.Empty, Array.Empty<object>());
|
||||
}
|
||||
|
||||
private SocketMessageType Receiving()
|
||||
@ -311,9 +312,9 @@ namespace Milimoe.FunGame.Desktop.Model
|
||||
SocketMessageType result = SocketMessageType.Unknown;
|
||||
try
|
||||
{
|
||||
object[] ServerMessage = GetServerMessage();
|
||||
SocketMessageType type = (SocketMessageType)ServerMessage[0];
|
||||
object[] objs = (object[])ServerMessage[1];
|
||||
SocketObject ServerMessage = GetServerMessage();
|
||||
SocketMessageType type = ServerMessage.SocketType;
|
||||
object[] objs = ServerMessage.Parameters;
|
||||
result = type;
|
||||
switch (type)
|
||||
{
|
||||
|
||||
@ -8,7 +8,7 @@ using Milimoe.FunGame.Desktop.UI;
|
||||
|
||||
namespace Milimoe.FunGame.Desktop.Model
|
||||
{
|
||||
public class RegisterModel : ISocketCallBack
|
||||
public class RegisterModel
|
||||
{
|
||||
private readonly Register Register;
|
||||
|
||||
|
||||
@ -10,7 +10,7 @@ using Milimoe.FunGame.Desktop.Library.Interface;
|
||||
|
||||
namespace Milimoe.FunGame.Desktop.UI
|
||||
{
|
||||
public partial class Register : BaseReg, ISocketCallBack
|
||||
public partial class Register : BaseReg
|
||||
{
|
||||
public bool CheckReg { get; set; } = false;
|
||||
public RegisterEventArgs EventArgs { get; set; } = new RegisterEventArgs();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user