网络建立连接断开连接,回到主线程处理

This commit is contained in:
sin365 2025-05-14 14:06:45 +08:00
parent 306199dba8
commit 0d3024521c
6 changed files with 75 additions and 21 deletions

View File

@ -2,10 +2,7 @@
using nn.fs;
#endif
using nn.fs;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
public class AxiNSIO
{

View File

@ -1,5 +1,4 @@
using Sony.Vita.Dialog;
using System.Collections.Generic;
using System.Collections.Generic;
namespace AxiIO
{

View File

@ -70,7 +70,7 @@ namespace AxibugEmuOnline.Client
SavDataIdx = SavDataIdx
};
App.log.Info($"SendDelGameSavList");
App.network.SendToServer((int)CommandID.CmdGamesavGetGameSavList, ProtoBufHelper.Serizlize(req));
App.network.SendToServer((int)CommandID.CmdGamesavDelGameSav, ProtoBufHelper.Serizlize(req));
}
void RecvDelGameSavList(byte[] reqData)
@ -105,7 +105,7 @@ namespace AxibugEmuOnline.Client
App.log.Info($"上传即时存档数据 原数据大小:{RawData.Length},压缩后;{compressRawData.Length}");
App.log.Info($"上传截图 原数据大小:{SavImgData.Length},压缩后;{compressImgData.Length}");
App.network.SendToServer((int)CommandID.CmdGamesavGetGameSavList, ProtoBufHelper.Serizlize(req));
App.network.SendToServer((int)CommandID.CmdGamesavUploadGameSav, ProtoBufHelper.Serizlize(req));
}
void RecvUpLoadGameSav(byte[] reqData)

View File

@ -46,7 +46,7 @@ namespace AxibugEmuOnline.Client
float LastLoopTime_15s;
private void Update()
{
NetMsg.Instance.DequeueNesMsg();
NetMsg.Instance.NextNetEvent();
LoopAction_tick?.Invoke();

View File

@ -1,4 +1,5 @@
using AxibugEmuOnline.Client.ClientCore;
using AxibugEmuOnline.Client.Event;
using AxibugProtobuf;
using System;
using System.Collections.Generic;
@ -15,11 +16,15 @@ namespace AxibugEmuOnline.Client.Network
private Dictionary<int, List<Delegate>> netEventDic = new Dictionary<int, List<Delegate>>(128);
private Queue<ValueTuple<int, int, byte[]>> queueNetMsg = new Queue<ValueTuple<int, int, byte[]>>();
public static object lockQueueNetMsg = new object();
private Queue<Action> queueEventFromNet = new Queue<Action>();
public static object lockQueueEventFromNet = new object();
private NetMsg() { }
public static object lockQueueObj = new object();
#region RegisterMsgEvent
@ -59,13 +64,56 @@ namespace AxibugEmuOnline.Client.Network
netEventDic[cmd].Remove(callback);
if (netEventDic[cmd].Count == 0) netEventDic.Remove(cmd);
}
}
}
#endregion
#region PostEvent
public void EnqueueNesMsg(int cmd, int ERRCODE, byte[] arg)
public void NextNetEvent()
{
lock (lockQueueObj)
DequeueNesMsg();
DequeueEventFromNet();
}
#region PostEventFromNet
public void EnqueueEventFromNet(Action act)
{
lock (lockQueueEventFromNet)
{
queueEventFromNet.Enqueue(act);
}
}
public void DequeueEventFromNet()
{
lock (lockQueueEventFromNet)
{
while (queueEventFromNet.Count > 0)
{
var msgData = queueEventFromNet.Dequeue();
PostNetEventFromNet(msgData);
}
}
}
void PostNetEventFromNet(Action act)
{
try
{
act?.Invoke();
}
catch(Exception ex)
{
App.log.Error(ex.ToString());
}
}
#endregion
#region PostNetMsg
public void EnqueueNetMsg(int cmd, int ERRCODE, byte[] arg)
{
lock (lockQueueNetMsg)
{
queueNetMsg.Enqueue(new ValueTuple<int, int, byte[]>(cmd, ERRCODE, arg));
}
@ -73,7 +121,7 @@ namespace AxibugEmuOnline.Client.Network
public void DequeueNesMsg()
{
lock (lockQueueObj)
lock (lockQueueNetMsg)
{
while (queueNetMsg.Count > 0)
{

View File

@ -15,11 +15,11 @@ namespace AxibugEmuOnline.Client.Network
{
public NetworkHelper()
{
OnConnected += NetworkConnected;
//指定接收服务器数据事件
OnReceiveData += GetDataCallBack;
//断开连接
OnClose += OnConnectClose;
OnConnected += NetworkConnected;
//网络库调试信息输出事件,用于打印网络内容
OnLogOut += NetworkDeBugLog;
}
@ -39,7 +39,17 @@ namespace AxibugEmuOnline.Client.Network
/// </summary>
const int ReConnectTryTime = 1000;
public void NetworkConnected(bool IsConnect)
void NetworkConnected(bool IsConnect)
{
NetMsg.Instance.EnqueueEventFromNet(() => NetworkConnected_Delegate(IsConnect));
}
void OnConnectClose()
{
NetMsg.Instance.EnqueueEventFromNet(() => OnConnectClose_Delegate());
}
void NetworkConnected_Delegate(bool IsConnect)
{
NetworkDeBugLog($"NetworkConnected:{IsConnect}");
if (IsConnect)
@ -63,7 +73,7 @@ namespace AxibugEmuOnline.Client.Network
}
}
public void NetworkDeBugLog(string str)
void NetworkDeBugLog(string str)
{
//用于Unity内的输出
//Debug.Log("NetCoreDebug >> "+str);
@ -76,7 +86,7 @@ namespace AxibugEmuOnline.Client.Network
/// <param name="CMDID">协议ID</param>
/// <param name="ERRCODE">错误编号</param>
/// <param name="data">业务数据</param>
public void GetDataCallBack(int CMDID, int ERRCODE, byte[] data)
void GetDataCallBack(int CMDID, int ERRCODE, byte[] data)
{
//NetworkDeBugLog("收到消息 CMDID =>" + CMDID + " ERRCODE =>" + ERRCODE + " 数据长度=>" + data.Length);
try
@ -86,7 +96,7 @@ namespace AxibugEmuOnline.Client.Network
if (CMDID <= (int)CommandID.CmdPong)
NetMsg.Instance.PostNetMsgEvent(CMDID, ERRCODE, data);
else//加入队列,主线程来取
NetMsg.Instance.EnqueueNesMsg(CMDID, ERRCODE, data);
NetMsg.Instance.EnqueueNetMsg(CMDID, ERRCODE, data);
}
catch (Exception ex)
{
@ -97,7 +107,7 @@ namespace AxibugEmuOnline.Client.Network
/// <summary>
/// 关闭连接
/// </summary>
public void OnConnectClose()
void OnConnectClose_Delegate()
{
NetworkDeBugLog("OnConnectClose");
Eventer.Instance.PostEvent(EEvent.OnLossLoginState);