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

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; using nn.fs;
#endif #endif
using nn.fs;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
public class AxiNSIO public class AxiNSIO
{ {

View File

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

View File

@ -70,7 +70,7 @@ namespace AxibugEmuOnline.Client
SavDataIdx = SavDataIdx SavDataIdx = SavDataIdx
}; };
App.log.Info($"SendDelGameSavList"); 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) void RecvDelGameSavList(byte[] reqData)
@ -105,7 +105,7 @@ namespace AxibugEmuOnline.Client
App.log.Info($"上传即时存档数据 原数据大小:{RawData.Length},压缩后;{compressRawData.Length}"); App.log.Info($"上传即时存档数据 原数据大小:{RawData.Length},压缩后;{compressRawData.Length}");
App.log.Info($"上传截图 原数据大小:{SavImgData.Length},压缩后;{compressImgData.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) void RecvUpLoadGameSav(byte[] reqData)

View File

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

View File

@ -1,4 +1,5 @@
using AxibugEmuOnline.Client.ClientCore; using AxibugEmuOnline.Client.ClientCore;
using AxibugEmuOnline.Client.Event;
using AxibugProtobuf; using AxibugProtobuf;
using System; using System;
using System.Collections.Generic; 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 Dictionary<int, List<Delegate>> netEventDic = new Dictionary<int, List<Delegate>>(128);
private Queue<ValueTuple<int, int, byte[]>> queueNetMsg = new Queue<ValueTuple<int, int, byte[]>>(); 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() { } private NetMsg() { }
public static object lockQueueObj = new object();
#region RegisterMsgEvent #region RegisterMsgEvent
@ -62,10 +67,53 @@ namespace AxibugEmuOnline.Client.Network
} }
#endregion #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)); queueNetMsg.Enqueue(new ValueTuple<int, int, byte[]>(cmd, ERRCODE, arg));
} }
@ -73,7 +121,7 @@ namespace AxibugEmuOnline.Client.Network
public void DequeueNesMsg() public void DequeueNesMsg()
{ {
lock (lockQueueObj) lock (lockQueueNetMsg)
{ {
while (queueNetMsg.Count > 0) while (queueNetMsg.Count > 0)
{ {

View File

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