mirror of
https://github.com/project-redbud/FunGame-Core.git
synced 2025-04-22 12:09:34 +08:00

* 使基于HTTPClient的DataRequest能够收到回复;添加了适用于Gaming的DataRequest;优化了加载器的加载逻辑;依赖集合的优化 * 执行代理清理;优化模组模板 * 删除GamingEvent无用的事件;删除result哈希表;删除无用的Item/Skill类;GameModuleLoader优化
121 lines
3.6 KiB
C#
121 lines
3.6 KiB
C#
using Milimoe.FunGame.Core.Interface.Sockets;
|
||
using Milimoe.FunGame.Core.Library.Common.Architecture;
|
||
using Milimoe.FunGame.Core.Library.Common.Network;
|
||
using Milimoe.FunGame.Core.Service;
|
||
|
||
namespace Milimoe.FunGame.Core.Controller
|
||
{
|
||
/// <summary>
|
||
/// <para>继承 AsyncAwaiter 用法:</para>
|
||
/// <para>1、调用Socket.Send()前,请设置为等待状态:SetWorking();</para>
|
||
/// <para>2、调用Socket.Send() == Success后,请等待任务完成:WaitForWorkDone();</para>
|
||
/// <para>3、在其他任何地方修改Working状态,均会使任务终止。</para>
|
||
/// </summary>
|
||
public class SocketHandlerController : AsyncAwaiter<SocketObject>, ISocketHandler, IDisposable
|
||
{
|
||
/// <summary>
|
||
/// 接收到的SocketObject实例
|
||
/// </summary>
|
||
protected override SocketObject Work { get; set; }
|
||
|
||
/// <summary>
|
||
/// Socket
|
||
/// </summary>
|
||
private readonly Socket? _Socket;
|
||
|
||
/// <summary>
|
||
/// WebSocket
|
||
/// </summary>
|
||
private readonly HTTPClient? _WebSocket;
|
||
|
||
/// <summary>
|
||
/// 继承请调用base构造
|
||
/// </summary>
|
||
/// <param name="socket">Socket</param>
|
||
public SocketHandlerController(Socket? socket)
|
||
{
|
||
if (socket != null)
|
||
{
|
||
_Socket = socket;
|
||
socket.BindEvent(new SocketManager.SocketReceiveHandler(SocketHandler));
|
||
}
|
||
else throw new SocketCreateReceivingException();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 继承请调用base构造
|
||
/// </summary>
|
||
/// <param name="websocket">Socket</param>
|
||
public SocketHandlerController(HTTPClient? websocket)
|
||
{
|
||
if (websocket != null)
|
||
{
|
||
_WebSocket = websocket;
|
||
websocket.BindEvent(new SocketManager.SocketReceiveHandler(SocketHandler));
|
||
}
|
||
else throw new SocketCreateReceivingException();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 继承请重写此方法
|
||
/// </summary>
|
||
/// <param name="SocketObject">SocketObject</param>
|
||
public virtual void SocketHandler(SocketObject SocketObject)
|
||
{
|
||
|
||
}
|
||
|
||
/// <summary>
|
||
/// 判断是否已经Disposed
|
||
/// </summary>
|
||
private bool IsDisposed = false;
|
||
|
||
/// <summary>
|
||
/// 公开的Dispose方法
|
||
/// </summary>
|
||
public void Dispose()
|
||
{
|
||
OnDisposed();
|
||
Dispose(true);
|
||
GC.SuppressFinalize(this);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 关闭时
|
||
/// </summary>
|
||
/// <param name="Disposing"></param>
|
||
protected void Dispose(bool Disposing)
|
||
{
|
||
if (!IsDisposed)
|
||
{
|
||
if (Disposing)
|
||
{
|
||
_Socket?.BindEvent(new SocketManager.SocketReceiveHandler(SocketHandler), true);
|
||
_WebSocket?.BindEvent(new SocketManager.SocketReceiveHandler(SocketHandler), true);
|
||
}
|
||
}
|
||
IsDisposed = true;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 关闭事件
|
||
/// </summary>
|
||
protected delegate void DisposedEvent();
|
||
|
||
/// <summary>
|
||
/// <para>Controller关闭时事件</para>
|
||
/// <para>不建议new Dispose()方法,建议使用事件</para>
|
||
/// <para>事件会在base.Dispose()执行前触发</para>
|
||
/// </summary>
|
||
protected event DisposedEvent? Disposed;
|
||
|
||
/// <summary>
|
||
/// 触发关闭事件
|
||
/// </summary>
|
||
protected void OnDisposed()
|
||
{
|
||
Disposed?.Invoke();
|
||
}
|
||
}
|
||
}
|