mirror of
https://github.com/Alex-Rachel/TEngine.git
synced 2025-08-07 16:45:10 +00:00
Update
Update
This commit is contained in:
@@ -19,21 +19,6 @@ namespace TEngine.Core.Network
|
|||||||
private static readonly Dictionary<long, Session> Sessions = new ();
|
private static readonly Dictionary<long, Session> Sessions = new ();
|
||||||
public readonly Dictionary<long, FTask<IResponse>> RequestCallback = new();
|
public readonly Dictionary<long, FTask<IResponse>> RequestCallback = new();
|
||||||
|
|
||||||
#if TENGINE_UNITY
|
|
||||||
public delegate void CsMsgDelegate(IResponse msg);
|
|
||||||
|
|
||||||
public readonly Dictionary<uint, CsMsgDelegate> MsgHandles = new Dictionary<uint, CsMsgDelegate>();
|
|
||||||
|
|
||||||
public void RegisterMsgHandler(uint protocolCode,CsMsgDelegate ctx)
|
|
||||||
{
|
|
||||||
if (MsgHandles.ContainsKey(protocolCode))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
MsgHandles.Add(protocolCode,ctx);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
public static void Create(ANetworkMessageScheduler networkMessageScheduler, ANetworkChannel channel)
|
public static void Create(ANetworkMessageScheduler networkMessageScheduler, ANetworkChannel channel)
|
||||||
{
|
{
|
||||||
#if TENGINE_DEVELOP
|
#if TENGINE_DEVELOP
|
||||||
|
@@ -34,6 +34,28 @@ namespace TEngine.Core.Network
|
|||||||
#endif
|
#endif
|
||||||
private static readonly CoroutineLockQueueType ReceiveRouteMessageLock = new CoroutineLockQueueType("ReceiveRouteMessageLock");
|
private static readonly CoroutineLockQueueType ReceiveRouteMessageLock = new CoroutineLockQueueType("ReceiveRouteMessageLock");
|
||||||
|
|
||||||
|
#if TENGINE_UNITY
|
||||||
|
|
||||||
|
public readonly Dictionary<uint, List<Action<IResponse>>> MsgHandles = new Dictionary<uint, List<Action<IResponse>>>();
|
||||||
|
|
||||||
|
public void RegisterMsgHandler(uint protocolCode,Action<IResponse> ctx)
|
||||||
|
{
|
||||||
|
if (!MsgHandles.ContainsKey(protocolCode))
|
||||||
|
{
|
||||||
|
MsgHandles[protocolCode] = new List<Action<IResponse>>();
|
||||||
|
}
|
||||||
|
MsgHandles[protocolCode].Add(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void UnRegisterMsgHandler(uint protocolCode,Action<IResponse> ctx)
|
||||||
|
{
|
||||||
|
if (MsgHandles.TryGetValue(protocolCode, out var handle))
|
||||||
|
{
|
||||||
|
handle.Remove(ctx);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
protected override void OnLoad(int assemblyName)
|
protected override void OnLoad(int assemblyName)
|
||||||
{
|
{
|
||||||
foreach (var type in AssemblyManager.ForEach(assemblyName, typeof(IMessage)))
|
foreach (var type in AssemblyManager.ForEach(assemblyName, typeof(IMessage)))
|
||||||
|
@@ -1,6 +1,5 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using Codice.Client.GameUI.Explorer;
|
|
||||||
using TEngine.Core;
|
using TEngine.Core;
|
||||||
#pragma warning disable CS8600
|
#pragma warning disable CS8600
|
||||||
|
|
||||||
@@ -58,9 +57,12 @@ namespace TEngine.Core.Network
|
|||||||
#else
|
#else
|
||||||
|
|
||||||
#if TENGINE_UNITY
|
#if TENGINE_UNITY
|
||||||
if (session.MsgHandles.TryGetValue(packInfo.ProtocolCode,out var msgDelegate))
|
if (MessageDispatcherSystem.Instance.MsgHandles.TryGetValue(packInfo.ProtocolCode,out var msgDelegates))
|
||||||
{
|
{
|
||||||
msgDelegate.Invoke(aResponse);
|
foreach (var msgDelegate in msgDelegates)
|
||||||
|
{
|
||||||
|
msgDelegate.Invoke(aResponse);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
using System.IO;
|
using System;
|
||||||
|
using System.IO;
|
||||||
using GameBase;
|
using GameBase;
|
||||||
using TEngine;
|
using TEngine;
|
||||||
using TEngine.Core.Network;
|
using TEngine.Core.Network;
|
||||||
@@ -54,6 +55,10 @@ namespace GameLogic
|
|||||||
|
|
||||||
public void Connect(string address, bool reconnect = false)
|
public void Connect(string address, bool reconnect = false)
|
||||||
{
|
{
|
||||||
|
if (Status == GameClientStatus.StatusConnected || Status == GameClientStatus.StatusLogin || Status == GameClientStatus.StatusEnter)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (!reconnect)
|
if (!reconnect)
|
||||||
{
|
{
|
||||||
// SetWatchReconnect(false);
|
// SetWatchReconnect(false);
|
||||||
@@ -71,8 +76,11 @@ namespace GameLogic
|
|||||||
_lastAddress = address;
|
_lastAddress = address;
|
||||||
|
|
||||||
Status = reconnect ? GameClientStatus.StatusReconnect : GameClientStatus.StatusInit;
|
Status = reconnect ? GameClientStatus.StatusReconnect : GameClientStatus.StatusInit;
|
||||||
|
|
||||||
Scene.CreateSession(address, ProtocolType, OnConnectComplete, OnConnectFail);
|
if (Scene.Session == null || Scene.Session.IsDisposed)
|
||||||
|
{
|
||||||
|
Scene.CreateSession(address, ProtocolType, OnConnectComplete, OnConnectFail);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnConnectComplete()
|
private void OnConnectComplete()
|
||||||
@@ -116,5 +124,15 @@ namespace GameLogic
|
|||||||
}
|
}
|
||||||
Scene.Session.Send(memoryStream,rpcId,routeTypeOpCode,routeId);
|
Scene.Session.Send(memoryStream,rpcId,routeTypeOpCode,routeId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void RegisterMsgHandler(uint protocolCode,Action<IResponse> ctx)
|
||||||
|
{
|
||||||
|
MessageDispatcherSystem.Instance.RegisterMsgHandler(protocolCode,ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void UnRegisterMsgHandler(uint protocolCode,Action<IResponse> ctx)
|
||||||
|
{
|
||||||
|
MessageDispatcherSystem.Instance.UnRegisterMsgHandler(protocolCode,ctx);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -0,0 +1,22 @@
|
|||||||
|
using TEngine.Core.Network;
|
||||||
|
|
||||||
|
namespace GameLogic
|
||||||
|
{
|
||||||
|
public class NetworkUtils
|
||||||
|
{
|
||||||
|
public static bool CheckError(IResponse response)
|
||||||
|
{
|
||||||
|
bool hasError = false;
|
||||||
|
if (response == null)
|
||||||
|
{
|
||||||
|
var networkError = "NetWork Response Error";
|
||||||
|
hasError = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
hasError = response.ErrorCode != 0;
|
||||||
|
}
|
||||||
|
return hasError;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,3 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 4c373208f2ca4f28b35a28434a3b1103
|
||||||
|
timeCreated: 1689262967
|
8
Assets/GameScripts/HotFix/GameLogic/NetWorkDemo.meta
Normal file
8
Assets/GameScripts/HotFix/GameLogic/NetWorkDemo.meta
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: fd38f6cec6fb1864596745f8fc7067d8
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@@ -58,12 +58,7 @@ class NetWorkDemoUI : UIWindow
|
|||||||
Log.Info("请输入账号和密码");
|
Log.Info("请输入账号和密码");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
PlayerNetSys.Instance.DoLoginReq(m_inputName.text,m_inputPassWord.text);
|
||||||
GameClient.Instance.Send(new H_C2G_LoginRequest()
|
|
||||||
{
|
|
||||||
UserName = m_inputName.text,
|
|
||||||
Password = m_inputPassWord.text
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnClickRegisterBtn()
|
private void OnClickRegisterBtn()
|
||||||
|
@@ -13,17 +13,35 @@ namespace GameLogic
|
|||||||
public override void Init()
|
public override void Init()
|
||||||
{
|
{
|
||||||
base.Init();
|
base.Init();
|
||||||
|
GameClient.Instance.RegisterMsgHandler(OuterOpcode.H_G2C_LoginResponse,OnLoginRes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void OnLoginRes(IResponse response)
|
||||||
}
|
|
||||||
public class H_C2G_LoginRequestHandler : MessageRPC<H_C2G_LoginRequest,H_G2C_LoginResponse>
|
|
||||||
{
|
|
||||||
protected override async FTask Run(Session session, H_C2G_LoginRequest request, H_G2C_LoginResponse response, Action reply)
|
|
||||||
{
|
{
|
||||||
Log.Debug($"收到请求登录的消息 request:{request.ToJson()}");
|
if (NetworkUtils.CheckError(response))
|
||||||
response.Text = "登录成功";
|
{
|
||||||
await FTask.CompletedTask;
|
GameClient.Instance.Status = GameClientStatus.StatusConnected;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
H_G2C_LoginResponse ret = (H_G2C_LoginResponse)response;
|
||||||
|
Log.Debug(ret.ToJson());
|
||||||
|
GameClient.Instance.Status = GameClientStatus.StatusEnter;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DoLoginReq(string userName,string passWord)
|
||||||
|
{
|
||||||
|
if (GameClient.Instance.Status == GameClientStatus.StatusEnter)
|
||||||
|
{
|
||||||
|
Log.Info("当前已经登录成功。");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
H_C2G_LoginRequest loginRequest =new H_C2G_LoginRequest()
|
||||||
|
{
|
||||||
|
UserName = userName,
|
||||||
|
Password = passWord
|
||||||
|
};
|
||||||
|
GameClient.Instance.Send(loginRequest);
|
||||||
|
GameClient.Instance.Status = GameClientStatus.StatusLogin;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Reference in New Issue
Block a user