mirror of
https://github.com/project-redbud/FunGame-Core.git
synced 2025-04-21 11:39:35 +08:00

* 重做 WebSocket 监听;为服务器统一了多种数据连接访问时的处理;统一编码为 UTF-8 * ModelManager已更名并移动到工具命名空间中 * 完成 WebSocket 消息处理系统 * 添加Socket异步接收数据流;修复TaskUtility阻塞的问题;优化心跳、房间、模组 * 添加枚举 * 删除多余字符 * 添加监听器的名称 * 修改了命名
50 lines
1.8 KiB
C#
50 lines
1.8 KiB
C#
using System.Text.Json.Serialization;
|
||
using Milimoe.FunGame.Core.Library.Constant;
|
||
using Milimoe.FunGame.Core.Service;
|
||
|
||
namespace Milimoe.FunGame.Core.Library.Common.Network
|
||
{
|
||
[Serializable]
|
||
public readonly struct SocketObject
|
||
{
|
||
public SocketMessageType SocketType { get; } = SocketMessageType.Unknown;
|
||
public Guid Token { get; } = Guid.Empty;
|
||
public object[] Parameters { get; } = [];
|
||
public int Length => Parameters.Length;
|
||
|
||
// 从参数列表中获取指定索引的参数的Json字符串
|
||
// -- 此索引器仅返回Json字符串,对象类型请使用反序列化方法GetParam<T>() --
|
||
// -- 当然也可以自己反序列化 --
|
||
// -- 基本类型可能有效,但仍建议使用反序列化方法 --
|
||
public object? this[int index]
|
||
{
|
||
get
|
||
{
|
||
if (index >= Parameters.Length) throw new IndexOutOfArrayLengthException();
|
||
object? obj = Parameters[index];
|
||
return JsonManager.GetObject(obj.ToString() ?? "");
|
||
}
|
||
}
|
||
|
||
[JsonConstructor]
|
||
public SocketObject(SocketMessageType type, Guid token, params object[] args)
|
||
{
|
||
SocketType = type;
|
||
Token = token;
|
||
if (args != null && args.Length > 0) Parameters = args;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 从参数列表中获取指定类型和索引的参数
|
||
/// </summary>
|
||
/// <typeparam name="T">类型</typeparam>
|
||
/// <param name="index">索引</param>
|
||
/// <returns>类型的参数</returns>
|
||
/// <exception cref="IndexOutOfArrayLengthException">索引超过数组上限</exception>
|
||
public T? GetParam<T>(int index)
|
||
{
|
||
return JsonManager.GetObject<T>(this, index);
|
||
}
|
||
}
|
||
}
|