介入网络收发

This commit is contained in:
bob
2025-07-26 15:19:14 +08:00
parent 88cea0b5c6
commit 553153c61d
10 changed files with 490 additions and 542 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -1,2 +1,11 @@
fileFormatVersion: 2
guid: cf5bc579defd25640b8f277220459410
guid: ac16629ba2ddb4832bfc3548b7a92da0
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,2 +1,11 @@
fileFormatVersion: 2
guid: dc84d27ae0bdf764fb50b6d543cbcf7e
guid: 79e8bd7cb8ff94462a0108fac5149a46
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,9 +1,9 @@
namespace NBC
{
// Route协议定义(需要定义1000以上、因为1000以内的框架预留)
public static class RouteType
{
public const int GateRoute = 1001; // Gate
public const int ChatRoute = 1002; // Chat
}
}
// Route协议定义(需要定义1000以上、因为1000以内的框架预留)
public static class RouteType
{
public const int GateRoute = 1001; // Gate
public const int ChatRoute = 1002; // Chat
}
}

View File

@@ -1,2 +1,11 @@
fileFormatVersion: 2
guid: 76b668cc0db30b34ab2a64d695b14ac4
guid: 93ff0f8f28d294cdab3c6346d873065d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using UnityEngine;
namespace NBC
@@ -73,10 +74,34 @@ namespace NBC
private async FTask StartAsync()
{
// 初始化框架
await NBC.Platform.Unity.Entry.Initialize(GetType().Assembly);
var assemblies = AppDomain.CurrentDomain.GetAssemblies();
List<System.Reflection.Assembly> loadAssemblies = new List<System.Reflection.Assembly>();
foreach (var assembly in assemblies)
{
// 跳过系统程序集以提高性能(可选)
if (IsSystemAssembly(assembly))
continue;
loadAssemblies.Add(assembly);
}
await NBC.Platform.Unity.Entry.Initialize(loadAssemblies.ToArray());
_scene = await Scene.Create(SceneRuntimeMode.MainThread);
UI = _scene.AddComponent<UIComponent>();
OnInitialized?.Invoke();
}
// 判断是否是系统程序集(可选优化)
private static bool IsSystemAssembly(System.Reflection.Assembly assembly)
{
string assemblyName = assembly.FullName;
return assemblyName.StartsWith("System") ||
assemblyName.StartsWith("Microsoft.") ||
assemblyName.StartsWith("UnityEngine") ||
assemblyName.StartsWith("UnityEditor") ||
assemblyName.StartsWith("mscorlib") ||
assemblyName.StartsWith("netstandard") ||
assemblyName.StartsWith("nunit.") ||
assemblyName.StartsWith("Unity.");
}
}
}

View File

@@ -72,8 +72,9 @@ namespace NBC.Network.Interface
private void LoadInner(long assemblyIdentity)
{
var nmsl = AssemblySystem.ForEach(assemblyIdentity, typeof(IMessage));
// 遍历所有实现了IMessage接口的类型获取OpCode并添加到_networkProtocols字典中
foreach (var type in AssemblySystem.ForEach(assemblyIdentity, typeof(IMessage)))
foreach (var type in nmsl)
{
var obj = (IMessage) Activator.CreateInstance(type);
var opCode = obj.OpCode();

View File

@@ -231,6 +231,7 @@ namespace NBC.PacketParser
var memoryStreamLength = 0;
var messageType = message.GetType();
var memoryStream = Network.MemoryStreamBufferPool.RentMemoryStream(MemoryStreamBufferSource.Pack);
var nmsl = message.OpCode();
OpCodeIdStruct opCodeIdStruct = message.OpCode();
memoryStream.Seek(Packet.OuterPacketHeadLength, SeekOrigin.Begin);

View File

@@ -5,6 +5,7 @@ using Assets.Scripts.Hotfix;
using FairyGUI;
using NBC;
using NBC.Network;
using NBC.Platform.Unity;
using UnityEngine;
using UnityEngine.Audio;
using UnityEngine.Video;
@@ -150,18 +151,31 @@ namespace NBF
private async FTask OnLoginButtonClick()
{
// NBC.Platform.Unity.Entry.Initialize(GetType().Assembly);
// 根据用户名来选择目标的鉴权服务器
// 根据鉴权服务器地址来创建一个新的网络会话
_session = SessionHelper.CreateSession(App.Main, "127.0.0.1:20001", OnConnectComplete,
OnConnectFail,
OnConnectDisconnect);
var acc = "test001";
// // 发送一个注册的请求消息到目标服务器
// var responseReg = (A2C_RegisterResponse)await _session.Call(new C2A_RegisterRequest()
// {
// Username = acc,
// Password = acc
// });
// 发送登录的请求给服务器
var response = (A2C_LoginResponse)await _session.Call(new C2A_LoginRequest()
{
Username = "test001",
Password = "test001",
Username = acc,
Password = acc,
LoginType = 1
});
if (response.ErrorCode != 0)
{
Log.Error($"登录发生错误{response.ErrorCode}");