diff --git a/Server/Hotfix/Handler/ActorRpc_TestHandler.cs b/Server/Hotfix/Handler/ActorRpc_TestHandler.cs new file mode 100644 index 0000000000000000000000000000000000000000..f36d3bd028be0b59bdddcf43f6a68b908ccdeb12 --- /dev/null +++ b/Server/Hotfix/Handler/ActorRpc_TestHandler.cs @@ -0,0 +1,17 @@ +using System; +using System.Threading.Tasks; +using Model; + +namespace Hotfix +{ + [ActorMessageHandler(AppType.Map)] + public class ActorRpc_TestRequestHandler : AMActorRpcHandler + { + protected override async Task Run(Unit entity, ActorRpc_TestRequest message, Action reply) + { + Log.Info(message.request); + reply(new ActorRpc_TestResponse() {response = "response actor rpc"}); + return true; + } + } +} \ No newline at end of file diff --git a/Server/Hotfix/Handler/Actor_TestHandler.cs b/Server/Hotfix/Handler/Actor_TestHandler.cs index 70a8c178851ead703cde02b416b79e62d2f5a12c..9f844d8ac8eb219e5673ef1f67c11e030a33bcc2 100644 --- a/Server/Hotfix/Handler/Actor_TestHandler.cs +++ b/Server/Hotfix/Handler/Actor_TestHandler.cs @@ -8,7 +8,7 @@ namespace Hotfix { protected override async Task Run(Unit unit, Actor_Test message) { - Log.Info(message.Info); + Log.Debug(message.Info); unit.GetComponent().GetActorProxy().Send(message); return true; diff --git a/Server/Hotfix/Server.Hotfix.csproj b/Server/Hotfix/Server.Hotfix.csproj index 9eaf478072c56b9cb3779f360ae2744cd34734b9..37009423093636089324550f51684934dfcd6980 100644 --- a/Server/Hotfix/Server.Hotfix.csproj +++ b/Server/Hotfix/Server.Hotfix.csproj @@ -36,6 +36,7 @@ + diff --git a/Server/Model/Component/ActorComponent.cs b/Server/Model/Component/ActorComponent.cs index 63e14bb6fc647a64e6b3f3a0890be03985e5e7c2..85df855c181023cac5182ca3f0df99f39ec035ce 100644 --- a/Server/Model/Component/ActorComponent.cs +++ b/Server/Model/Component/ActorComponent.cs @@ -7,7 +7,7 @@ namespace Model public struct ActorMessageInfo { public Session Session; - public IActorMessage Message; + public ActorRequest Message; } [ObjectEvent] @@ -64,14 +64,15 @@ namespace Model public void Add(ActorMessageInfo info) { this.queue.Enqueue(info); - + if (this.tcs == null) { return; } - - this.tcs?.SetResult(this.queue.Dequeue()); + + var t = this.tcs; this.tcs = null; + t.SetResult(this.queue.Dequeue()); } private Task GetAsync() diff --git a/Server/Model/Component/ActorMessageDispatherComponent.cs b/Server/Model/Component/ActorMessageDispatherComponent.cs index c52655e0bd1c899b7bdd0adc8118a78d367a2128..ee67cf2b57c9a6513ac4de4636c604fc1ad3a615 100644 --- a/Server/Model/Component/ActorMessageDispatherComponent.cs +++ b/Server/Model/Component/ActorMessageDispatherComponent.cs @@ -71,14 +71,23 @@ namespace Model return actorHandler; } - public async Task Handle(Session session, Entity entity, IActorMessage message) + public async Task Handle(Session session, Entity entity, ActorRequest message) { - if (!this.handlers.TryGetValue(message.GetType(), out IMActorHandler handler)) + ARequest request = message.AMessage as ARequest; + if (request == null) + { + Log.Error($"ActorRequest.AMessage as ARequest fail: {message.AMessage.GetType().FullName}"); + return false; + } + + request.RpcId = message.RpcId; + + if (!this.handlers.TryGetValue(request.GetType(), out IMActorHandler handler)) { Log.Error($"not found message handler: {message.GetType().FullName}"); return false; } - return await handler.Handle(session, entity, message); + return await handler.Handle(session, entity, request); } public override void Dispose() diff --git a/Server/Model/Component/MessageDispatherComponent.cs b/Server/Model/Component/MessageDispatherComponent.cs index 6e08ec0e1080101c4c88d247cc8932fe4034a778..11fd20023820f8ec7956a7564f4662d7e7150141 100644 --- a/Server/Model/Component/MessageDispatherComponent.cs +++ b/Server/Model/Component/MessageDispatherComponent.cs @@ -68,7 +68,7 @@ namespace Model } } - public void Handle(Session session, object message) + public void Handle(Session session, AMessage message) { if (!this.handlers.TryGetValue(message.GetType(), out List actions)) { diff --git a/Server/Model/Entity/ActorProxy.cs b/Server/Model/Entity/ActorProxy.cs index 396d0448bfbe6e283414df369244a706a1efa72a..93f0fb6c472ed5f1d2f88e88d51abdfcd007589b 100644 --- a/Server/Model/Entity/ActorProxy.cs +++ b/Server/Model/Entity/ActorProxy.cs @@ -18,9 +18,9 @@ namespace Model public class ActorMessageTask: ActorTask { private readonly ActorProxy proxy; - private readonly ARequest message; + private readonly AMessage message; - public ActorMessageTask(ActorProxy proxy, ARequest message) + public ActorMessageTask(ActorProxy proxy, AMessage message) { this.proxy = proxy; this.message = message; @@ -28,7 +28,8 @@ namespace Model public override async Task Run() { - AResponse response = await this.proxy.RealCall(this.message, this.proxy.CancellationTokenSource.Token); + ActorRequest request = new ActorRequest() { Id = this.proxy.Id, AMessage = this.message }; + ActorResponse response = await this.proxy.RealCall(request, this.proxy.CancellationTokenSource.Token); return response; } @@ -41,14 +42,14 @@ namespace Model /// Rpc消息,需要等待返回 /// /// - public class ActorRpcTask : ActorTask where Response: AActorResponse + public class ActorRpcTask : ActorTask where Response: AResponse { private readonly ActorProxy proxy; - private readonly AActorRequest message; + private readonly ARequest message; public readonly TaskCompletionSource Tcs = new TaskCompletionSource(); - public ActorRpcTask(ActorProxy proxy, AActorRequest message) + public ActorRpcTask(ActorProxy proxy, ARequest message) { this.proxy = proxy; this.message = message; @@ -56,7 +57,8 @@ namespace Model public override async Task Run() { - Response response = await this.proxy.RealCall(this.message, this.proxy.CancellationTokenSource.Token); + ActorRequest request = new ActorRequest() { Id = this.proxy.Id, AMessage = this.message }; + Response response = await this.proxy.RealCall(request, this.proxy.CancellationTokenSource.Token); if (response.Error != ErrorCode.ERR_NotFoundActor) { this.Tcs.SetResult(response); @@ -221,32 +223,31 @@ namespace Model ++this.WindowSize; } this.Remove(); - } + } catch (Exception e) { Log.Error(e.ToString()); } } - public void Send(AActorMessage message) + public void Send(AMessage message) { - message.Id = this.Id; ActorMessageTask task = new ActorMessageTask(this, message); this.Add(task); } - public Task Call(AActorRequest request)where Response : AActorResponse + public Task Call(ARequest request)where Response : AResponse { - request.Id = this.Id; ActorRpcTask task = new ActorRpcTask(this, request); this.Add(task); return task.Tcs.Task; } - public async Task RealCall(ARequest request, CancellationToken cancellationToken) where Response: AResponse + public async Task RealCall(ActorRequest request, CancellationToken cancellationToken) where Response: AResponse { try { + request.Id = this.Id; Session session = Game.Scene.GetComponent().Get(this.Address); Response response = await session.Call(request, cancellationToken); return response; diff --git a/Server/Model/Entity/Message/InnerMessage.cs b/Server/Model/Entity/Message/InnerMessage.cs index e8d4f8a2152f2c5f61addcb44953bd1c25a3e965..5f10406473a487d039f273a9b29fbfc163649c91 100644 --- a/Server/Model/Entity/Message/InnerMessage.cs +++ b/Server/Model/Entity/Message/InnerMessage.cs @@ -2,7 +2,10 @@ using System.Collections.Generic; using MongoDB.Bson.Serialization.Attributes; // ڲϢ Opcode10000ʼ -namespace Model { [Message(Opcode.M2A_Reload)] [BsonIgnoreExtraElements] public class M2A_Reload : ARequest { } +namespace Model { + /// /// װactorϢ /// [Message(Opcode.ActorRequest)] [BsonIgnoreExtraElements] public class ActorRequest : ARequest { public long Id { get; set; } public AMessage AMessage { get; set; } } + + /// /// actor RPCϢӦ /// [Message(Opcode.ActorResponse)] [BsonIgnoreExtraElements] public class ActorResponse : AResponse { } [Message(Opcode.M2A_Reload)] [BsonIgnoreExtraElements] public class M2A_Reload : ARequest { } [Message(Opcode.A2M_Reload)] [BsonIgnoreExtraElements] public class A2M_Reload : AResponse { } diff --git a/Server/Model/Entity/Message/InnerOpcode.cs b/Server/Model/Entity/Message/InnerOpcode.cs index f973f439f8673c72657e0bc43aaf4b04c8081bb2..aee7442c6b4575fc3c2cd19e36da247eba7a85e9 100644 --- a/Server/Model/Entity/Message/InnerOpcode.cs +++ b/Server/Model/Entity/Message/InnerOpcode.cs @@ -2,6 +2,9 @@ { public static partial class Opcode { + public const ushort ActorRequest = 1; + public const ushort ActorResponse = 2; + public const ushort ActorResponseWithM = 3; public const ushort G2G_LockRequest = 10; public const ushort G2G_LockResponse = 11; public const ushort G2G_LockReleaseRequest = 12; diff --git a/Server/Model/Entity/Session.cs b/Server/Model/Entity/Session.cs index 4e989fd6d60f503ec9152eae56b77f3794e4527d..f25db63a498cd1ff597ad68441731f89166f223a 100644 --- a/Server/Model/Entity/Session.cs +++ b/Server/Model/Entity/Session.cs @@ -117,7 +117,7 @@ namespace Model return; } - this.network.MessageDispatcher.Dispatch(this, opcode, offset, messageBytes, message); + this.network.MessageDispatcher.Dispatch(this, opcode, offset, messageBytes, (AMessage)message); } /// @@ -127,6 +127,7 @@ namespace Model where Response : AResponse { request.RpcId = ++RpcId; + //Log.Debug($"{request.GetType().FullName} {request.RpcId}"); this.SendMessage(request); var tcs = new TaskCompletionSource(); @@ -141,7 +142,7 @@ namespace Model tcs.SetException(new RpcException(response.Error, response.Message)); return; } - //Log.Debug($"recv: {response.ToJson()}"); + //Log.Debug($"recv: {MongoHelper.ToJson(response)}"); tcs.SetResult(response); } catch (Exception e) diff --git a/Server/Model/Message/AActorMessage.cs b/Server/Model/Message/AActorMessage.cs index a47c3231f108f1f4aa39309735a9438edf1e2620..06d4baf65cc8e4c55cb9a93d4ec4fc6464cbda2f 100644 --- a/Server/Model/Message/AActorMessage.cs +++ b/Server/Model/Message/AActorMessage.cs @@ -1,33 +1,14 @@ -using MongoDB.Bson.Serialization.Attributes; - -namespace Model +namespace Model { - public interface IActorMessage - { - [BsonIgnoreIfDefault] - long Id { get; set; } - } - - public abstract class AActorMessage: ARequest, IActorMessage - { - [BsonIgnoreIfDefault] - public long Id { get; set; } - } - - public abstract class ActorMessageResponse : AResponse + public abstract class AActorMessage : AMessage { } - public abstract class AActorRequest : ARequest, IActorMessage + public abstract class AActorRequest : ARequest { - [BsonIgnoreIfDefault] - public long Id { get; set; } } - /// - /// 服务端回的RPC消息需要继承这个抽象类 - /// - public abstract class AActorResponse: AResponse + public abstract class AActorResponse : AResponse { } } \ No newline at end of file diff --git a/Server/Model/Message/AMActorHandler.cs b/Server/Model/Message/AMActorHandler.cs index 4cec7437bb22cdeab0f063788518780053f08663..71dd002b64f9a3632a2c6ed5b69ce0d24801f953 100644 --- a/Server/Model/Message/AMActorHandler.cs +++ b/Server/Model/Message/AMActorHandler.cs @@ -3,11 +3,11 @@ using System.Threading.Tasks; namespace Model { - public abstract class AMActorHandler: IMActorHandler where E: Entity where Message : AActorMessage + public abstract class AMActorHandler: IMActorHandler where E: Entity where Message : AMessage { protected abstract Task Run(E entity, Message message); - public async Task Handle(Session session, Entity entity, object msg) + public async Task Handle(Session session, Entity entity, AMessage msg) { Message message = msg as Message; if (message == null) @@ -42,7 +42,7 @@ namespace Model protected abstract Task Run(E entity, Request message, Action reply); - public async Task Handle(Session session, Entity entity, object message) + public async Task Handle(Session session, Entity entity, AMessage message) { try { diff --git a/Server/Model/Message/AMHandler.cs b/Server/Model/Message/AMHandler.cs index b10ecc799a05e746291bbb8ec2618f85d153316f..3fe4eb8d4e39659e82344c22973f6347a2b3d634 100644 --- a/Server/Model/Message/AMHandler.cs +++ b/Server/Model/Message/AMHandler.cs @@ -6,7 +6,7 @@ namespace Model { protected abstract void Run(Session session, Message message); - public void Handle(Session session, object msg) + public void Handle(Session session, AMessage msg) { Message message = msg as Message; if (message == null) @@ -34,7 +34,7 @@ namespace Model protected abstract void Run(Session session, Request message, Action reply); - public void Handle(Session session, object message) + public void Handle(Session session, AMessage message) { try { diff --git a/Server/Model/Message/AMessage.cs b/Server/Model/Message/AMessage.cs index bfc30dbb83de0cffb3e15ed09afd9da7650e042b..657723fef124d7430fb6790fc7d81333c029ff2a 100644 --- a/Server/Model/Message/AMessage.cs +++ b/Server/Model/Message/AMessage.cs @@ -15,7 +15,7 @@ namespace Model /// /// 服务端回的RPC消息需要继承这个抽象类 /// - public abstract class AResponse + public abstract class AResponse: AMessage { public uint RpcId; diff --git a/Server/Model/Message/IEntityActorHandler.cs b/Server/Model/Message/IEntityActorHandler.cs index df24026e291793cc48796996c658279d25f8ec98..edba0e36b8a8823f019016a361db2f92963f8c08 100644 --- a/Server/Model/Message/IEntityActorHandler.cs +++ b/Server/Model/Message/IEntityActorHandler.cs @@ -4,7 +4,7 @@ namespace Model { public interface IEntityActorHandler { - Task Handle(Session session, Entity entity, IActorMessage message); + Task Handle(Session session, Entity entity, ActorRequest message); } /// @@ -12,17 +12,16 @@ namespace Model /// public class GateSessionEntityActorHandler : IEntityActorHandler { - public async Task Handle(Session session, Entity entity, IActorMessage message) + public async Task Handle(Session session, Entity entity, ActorRequest message) { - message.Id = 0; - ((Session)entity).Send((AMessage)message); + ((Session)entity).Send(message.AMessage); return true; } } public class CommonEntityActorHandler : IEntityActorHandler { - public async Task Handle(Session session, Entity entity, IActorMessage message) + public async Task Handle(Session session, Entity entity, ActorRequest message) { return await Game.Scene.GetComponent().Handle(session, entity, message); } diff --git a/Server/Model/Message/IMActorHandler.cs b/Server/Model/Message/IMActorHandler.cs index 31e41a9c69a100f9e2afe53873a991ef60226a46..c1ea3234b5fa2722b0a0fd371b68bc268ce91625 100644 --- a/Server/Model/Message/IMActorHandler.cs +++ b/Server/Model/Message/IMActorHandler.cs @@ -5,7 +5,7 @@ namespace Model { public interface IMActorHandler { - Task Handle(Session session, Entity entity, object message); + Task Handle(Session session, Entity entity, AMessage message); Type GetMessageType(); } } \ No newline at end of file diff --git a/Server/Model/Message/IMHandler.cs b/Server/Model/Message/IMHandler.cs index dda2cbab90c83787441e4c29737ff36cf3a84db0..1db84008b85e8c59f8f7ede3de5f0a849ab59188 100644 --- a/Server/Model/Message/IMHandler.cs +++ b/Server/Model/Message/IMHandler.cs @@ -4,7 +4,7 @@ namespace Model { public interface IMHandler { - void Handle(Session session, object message); + void Handle(Session session, AMessage message); Type GetMessageType(); } } \ No newline at end of file diff --git a/Server/Model/Message/IMessageDispatcher.cs b/Server/Model/Message/IMessageDispatcher.cs index daa9b9d1898946163c26aa012a64a9a11a678675..25c621736f749d5baabaa3fab112170d4da663b2 100644 --- a/Server/Model/Message/IMessageDispatcher.cs +++ b/Server/Model/Message/IMessageDispatcher.cs @@ -2,6 +2,6 @@ { public interface IMessageDispatcher { - void Dispatch(Session session, ushort opcode, int offset, byte[] messageBytes, object message); + void Dispatch(Session session, ushort opcode, int offset, byte[] messageBytes, AMessage message); } } diff --git a/Server/Model/Message/InnerMessageDispatcher.cs b/Server/Model/Message/InnerMessageDispatcher.cs index 965aa26c9f6a44cc0e7af2191e5a0f606c1caf72..2e7773714f0b65e7afa5c21df2acb685f9f1930c 100644 --- a/Server/Model/Message/InnerMessageDispatcher.cs +++ b/Server/Model/Message/InnerMessageDispatcher.cs @@ -4,13 +4,14 @@ namespace Model { public class InnerMessageDispatcher: IMessageDispatcher { - public void Dispatch(Session session, ushort opcode, int offset, byte[] messageBytes, object message) + public void Dispatch(Session session, ushort opcode, int offset, byte[] messageBytes, AMessage message) { // 收到actor消息分发给actor自己去处理 - if (message is IActorMessage actorMessage) + if (message is ActorRequest actorRequest) { - Entity entity = Game.Scene.GetComponent().Get(actorMessage.Id); - entity.GetComponent().Add(new ActorMessageInfo() { Session = session, Message = actorMessage }); + //Log.Info(MongoHelper.ToJson(actorRequest)); + Entity entity = Game.Scene.GetComponent().Get(actorRequest.Id); + entity.GetComponent().Add(new ActorMessageInfo() { Session = session, Message = actorRequest }); return; } diff --git a/Server/Model/Message/OuterMessageDispatcher.cs b/Server/Model/Message/OuterMessageDispatcher.cs index 79492acb1b0643324204c3b1cd15c2711d30e51a..f60f89a3010bab46bbd34b475a812c0da3eb62a9 100644 --- a/Server/Model/Message/OuterMessageDispatcher.cs +++ b/Server/Model/Message/OuterMessageDispatcher.cs @@ -4,31 +4,30 @@ namespace Model { public class OuterMessageDispatcher: IMessageDispatcher { - public async void Dispatch(Session session, ushort opcode, int offset, byte[] messageBytes, object message) + public async void Dispatch(Session session, ushort opcode, int offset, byte[] messageBytes, AMessage message) { // gate session收到actor消息直接转发给actor自己去处理 - if (message is AActorMessage aActorMessage) + if (message is AActorMessage) { long unitId = session.GetComponent().Player.UnitId; - aActorMessage.Id = unitId; - ActorProxy actorProxy = Game.Scene.GetComponent().Get(aActorMessage.Id); - actorProxy.Send(aActorMessage); + ActorProxy actorProxy = Game.Scene.GetComponent().Get(unitId); + actorProxy.Send(message); return; } // gate session收到actor rpc消息,先向actor 发送rpc请求,再将请求结果返回客户端 if (message is AActorRequest aActorRequest) { - ActorProxy actorProxy = Game.Scene.GetComponent().Get(aActorRequest.Id); - aActorRequest.Id = session.GetComponent().Player.Id; + long unitId = session.GetComponent().Player.UnitId; + ActorProxy actorProxy = Game.Scene.GetComponent().Get(unitId); uint rpcId = aActorRequest.RpcId; - AActorResponse aActorResponse = await actorProxy.Call(aActorRequest); - aActorResponse.RpcId = rpcId; - session.Reply(aActorResponse); + AResponse response = await actorProxy.Call(aActorRequest); + response.RpcId = rpcId; + session.Reply(response); return; } - if (message is AMessage) + if (message != null) { Game.Scene.GetComponent().Handle(session, message); return; diff --git a/Unity/Assets/Scripts/Base/Message/AActorMessage.cs b/Unity/Assets/Scripts/Base/Message/AActorMessage.cs index aab71c2b9e18a41fab42897e07eb116687176563..06d4baf65cc8e4c55cb9a93d4ec4fc6464cbda2f 100644 --- a/Unity/Assets/Scripts/Base/Message/AActorMessage.cs +++ b/Unity/Assets/Scripts/Base/Message/AActorMessage.cs @@ -1,31 +1,14 @@ -using MongoDB.Bson.Serialization.Attributes; - -namespace Model +namespace Model { - public interface IActorMessage - { - long Id { get; set; } - } - - public abstract class AActorMessage: ARequest, IActorMessage - { - public long Id { get; set; } - } - - public abstract class ActorMessageResponse : AResponse + public abstract class AActorMessage : AMessage { } - public abstract class AActorRequest : ARequest, IActorMessage + public abstract class AActorRequest : ARequest { - [BsonIgnoreIfDefault] - public long Id { get; set; } } - /// - /// 服务端回的RPC消息需要继承这个抽象类 - /// - public abstract class AActorResponse: AResponse + public abstract class AActorResponse : AResponse { } } \ No newline at end of file diff --git a/Unity/Assets/Scripts/Base/Message/AMHandler.cs b/Unity/Assets/Scripts/Base/Message/AMHandler.cs index 13f1aef89530bd9de7ed3a110210e1fad8dbe226..f62c2d2261e4dbe7526933240bb90bbaf1e55dfe 100644 --- a/Unity/Assets/Scripts/Base/Message/AMHandler.cs +++ b/Unity/Assets/Scripts/Base/Message/AMHandler.cs @@ -6,7 +6,7 @@ namespace Model { protected abstract void Run(Message message); - public void Handle(object msg) + public void Handle(AMessage msg) { Message message = msg as Message; if (message == null) diff --git a/Unity/Assets/Scripts/Base/Message/ClientDispatcher.cs b/Unity/Assets/Scripts/Base/Message/ClientDispatcher.cs index 026c3c4bbabaa0eb699b29fb38ee595b3ae143c2..e5ac154c8a55af71e4ac8b0c602341953055be99 100644 --- a/Unity/Assets/Scripts/Base/Message/ClientDispatcher.cs +++ b/Unity/Assets/Scripts/Base/Message/ClientDispatcher.cs @@ -11,7 +11,7 @@ namespace Model // 普通消息或者是Rpc请求消息 if (message is AMessage || message is ARequest) { - MessageInfo messageInfo = new MessageInfo(opcode, message); + MessageInfo messageInfo = new MessageInfo(opcode, (AMessage)message); if (opcode < 2000) { Game.Scene.GetComponent().Run(CrossIdType.MessageDeserializeFinish, messageInfo); diff --git a/Unity/Assets/Scripts/Base/Message/IMHandler.cs b/Unity/Assets/Scripts/Base/Message/IMHandler.cs index 6d8d9f6aa2421a6b8bb7bd89cc7ee18c8587da5d..b5c2bfd8b498d959c005dbe920077596ca494326 100644 --- a/Unity/Assets/Scripts/Base/Message/IMHandler.cs +++ b/Unity/Assets/Scripts/Base/Message/IMHandler.cs @@ -4,7 +4,7 @@ namespace Model { public interface IMHandler { - void Handle(object message); + void Handle(AMessage message); Type GetMessageType(); } } \ No newline at end of file diff --git a/Unity/Assets/Scripts/Base/Message/MessageInfo.cs b/Unity/Assets/Scripts/Base/Message/MessageInfo.cs index 1abb7b107be120c0da9f56a31984c9ac171c7695..9453e436e645f42b178c5189ce4717c82402589c 100644 --- a/Unity/Assets/Scripts/Base/Message/MessageInfo.cs +++ b/Unity/Assets/Scripts/Base/Message/MessageInfo.cs @@ -3,9 +3,9 @@ public class MessageInfo { public ushort Opcode { get; } - public object Message { get; set; } + public AMessage Message { get; set; } - public MessageInfo(ushort opcode, object message) + public MessageInfo(ushort opcode, AMessage message) { this.Opcode = opcode; this.Message = message; diff --git a/Unity/Assets/Scripts/Base/Network/TNet/TChannel.cs b/Unity/Assets/Scripts/Base/Network/TNet/TChannel.cs index d6c26bd62eb96038a5eea98f74da89284d93a18e..43efe93181f2724baf34a0305ae2f479b77185f9 100644 --- a/Unity/Assets/Scripts/Base/Network/TNet/TChannel.cs +++ b/Unity/Assets/Scripts/Base/Network/TNet/TChannel.cs @@ -210,6 +210,10 @@ namespace Model catch (ObjectDisposedException) { } + catch (System.IO.IOException) + { + this.OnError(this, SocketError.NetworkReset); + } catch (Exception e) { Log.Error(e.ToString()); diff --git a/Unity/Assets/Scripts/Entity/Message/Opcode.cs b/Unity/Assets/Scripts/Entity/Message/Opcode.cs index d7e850e82c82e44bfd8de8f227020b2aa66b5e17..a82c7a59f2951d9baa7f640c7ee2ac1a9731bab0 100644 --- a/Unity/Assets/Scripts/Entity/Message/Opcode.cs +++ b/Unity/Assets/Scripts/Entity/Message/Opcode.cs @@ -12,5 +12,7 @@ public const ushort C2M_Reload = 1008; public const ushort Actor_Test = 2001; + public const ushort ActorRpc_TestRequest = 2002; + public const ushort ActorRpc_TestResponse = 2003; } } diff --git a/Unity/Assets/Scripts/Entity/Message/OuterMessage.cs b/Unity/Assets/Scripts/Entity/Message/OuterMessage.cs index 39a218d01379a6d78d5f62e36aec88a516a96200..bef7cbcb9168892784e38ac9e2caa0a9a2b130f7 100644 --- a/Unity/Assets/Scripts/Entity/Message/OuterMessage.cs +++ b/Unity/Assets/Scripts/Entity/Message/OuterMessage.cs @@ -42,10 +42,18 @@ namespace Model public string Info; } + [Message(Opcode.ActorRpc_TestRequest)] + public class ActorRpc_TestRequest : AActorRequest + { + public string request; + } - - - + [Message(Opcode.ActorRpc_TestResponse)] + public class ActorRpc_TestResponse : AActorResponse + { + public string response; + } + [Message(Opcode.C2M_Reload)] public class C2M_Reload: ARequest { diff --git a/Unity/Hotfix/UI/UILobby/Component/UILobbyComponent.cs b/Unity/Hotfix/UI/UILobby/Component/UILobbyComponent.cs index 88665750cc37389b33af324dc195c8e88fe200e6..8e8c0a8f6358ab8e356f62a8be8fedb6346ec921 100644 --- a/Unity/Hotfix/UI/UILobby/Component/UILobbyComponent.cs +++ b/Unity/Hotfix/UI/UILobby/Component/UILobbyComponent.cs @@ -32,7 +32,10 @@ namespace Hotfix Log.Info("登陆gate成功!"); // 发送一个actor消息 - gateSession.Send(new Actor_Test() { Info = "message client->gate->map->gate->client" }); + //gateSession.Send(new Actor_Test() { Info = "message client->gate->map->gate->client" }); + + ActorRpc_TestResponse response = await gateSession.Call(new ActorRpc_TestRequest() { request = "request actor test rpc" }); + Log.Info($"recv response: {JsonHelper.ToJson(response)}"); } catch (Exception e) {