using System.Threading.Tasks;
using AppGame;
using AppGame.Sync;
using Cysharp.Threading.Tasks;
using Plugins.JNGame.Network;
using Plugins.JNGame.Network.Action;

public class JNGSocket : JNSocket
{
    public override async Task OnInit()
    {
        
        AddListener((int)NActionEnum.ServerClientDisconnect,OnServerClientDisconnect);
        AddListener((int)NActionEnum.NAddTileServer,OnNAddTileServer);
        
        await base.OnInit();
    }

    protected override async UniTask<string> GetUrl()
    {
        await UniTask.NextFrame();
        return "ws://127.0.0.1:8080/websocket";
    }
    
    /// <summary>
    /// 有客户端断开服务器连接
    /// </summary>
    /// <param name="obj"></param>
    private void OnServerClientDisconnect(byte[] data)
    {

        var disconnect = JNClientDisconnect.Parser.ParseFrom(data);
        
        //断开Tile服务器连接
        (App.Game.Client as JNGTileClientSystem)?.RemoveSocket(disconnect.ClientId);
        (App.Game.Server as JNGTileServerSystem)?.RemoveSocket(disconnect.ClientId);
        (App.Game.Server as JNGTileSlaveServerSystem)?.RemoveSocket(disconnect.ClientId);
        
    }

    /// <summary>
    /// 有新的Tile服务器
    /// </summary>
    /// <param name="obj"></param>
    private void OnNAddTileServer(byte[] obj)
    {
        App.Event.Dispatch(GEvent.NetNewTileServer);
    }
}