Просмотр исходного кода

增加AMActorLocationHandler跟AMActorLocationRpcHandler,顾名思义,location actor的服务端处理需要继承这两个类

tanghai 7 лет назад
Родитель
Сommit
6a831e6bdd

+ 4 - 4
Proto/OuterMessage.proto

@@ -8,14 +8,14 @@ message Actor_Test // IActorMessage
 	string Info = 1;
 }
 
-message Actor_TestRequest // IActorRequest
+message Actor_TestRequest // IActorLocationRequest
 {
 	int32 RpcId = 90;
 	int64 ActorId = 93;
 	string request = 1;
 }
 
-message Actor_TestResponse // IActorResponse
+message Actor_TestResponse // IActorLocationResponse
 {
 	int32 RpcId = 90;
 	int32 Error = 91;
@@ -23,14 +23,14 @@ message Actor_TestResponse // IActorResponse
 	string response = 1;
 }
 
-message Actor_TransferRequest // IActorRequest
+message Actor_TransferRequest // IActorLocationRequest
 {
 	int32 RpcId = 90;
 	int64 ActorId = 93;
 	int32 MapIndex = 1;
 }
 
-message Actor_TransferResponse // IActorResponse
+message Actor_TransferResponse // IActorLocationResponse
 {
 	int32 RpcId = 90;
 	int32 Error = 91;

+ 1 - 2
Server/Hotfix/Handler/Actor_TestHandler.cs

@@ -6,10 +6,9 @@ namespace ETHotfix
 	[ActorMessageHandler(AppType.Map)]
 	public class Actor_TestHandler : AMActorHandler<Unit, Actor_Test>
 	{
-		protected override async Task Run(Unit unit, Actor_Test message)
+		protected override void Run(Unit unit, Actor_Test message)
 		{
 			Log.Debug(message.Info);
-			await Task.CompletedTask;
 		}
 	}
 }

+ 1 - 1
Server/Hotfix/Handler/Actor_TestRequestHandler.cs

@@ -5,7 +5,7 @@ using ETModel;
 namespace ETHotfix
 {
 	[ActorMessageHandler(AppType.Map)]
-	public class Actor_TestRequestHandler : AMActorRpcHandler<Unit, Actor_TestRequest, Actor_TestResponse>
+	public class Actor_TestRequestHandler : AMActorLocationRpcHandler<Unit, Actor_TestRequest, Actor_TestResponse>
 	{
 		protected override async Task Run(Unit unit, Actor_TestRequest message, Action<Actor_TestResponse> reply)
 		{

+ 1 - 1
Server/Hotfix/Module/FrameSync/C2M_TestActorRequestHandler.cs

@@ -5,7 +5,7 @@ using ETModel;
 namespace ETHotfix
 {
 	[ActorMessageHandler(AppType.Map)]
-	public class C2M_TestActorRequestHandler : AMActorRpcHandler<Unit, C2M_TestActorRequest, M2C_TestActorResponse>
+	public class C2M_TestActorRequestHandler : AMActorLocationRpcHandler<Unit, C2M_TestActorRequest, M2C_TestActorResponse>
 	{
 		protected override async Task Run(Unit unit, C2M_TestActorRequest message, Action<M2C_TestActorResponse> reply)
 		{

+ 3 - 14
Server/Hotfix/Module/FrameSync/G2M_SessionDisconnectHandler.cs

@@ -5,22 +5,11 @@ using ETModel;
 namespace ETHotfix
 {
 	[ActorMessageHandler(AppType.Map)]
-	public class G2M_SessionDisconnectHandler : AMActorRpcHandler<Unit, G2M_SessionDisconnect, ActorResponse>
+	public class G2M_SessionDisconnectHandler : AMActorLocationHandler<Unit, G2M_SessionDisconnect>
 	{
-		protected override async Task Run(Unit unit, G2M_SessionDisconnect message, Action<ActorResponse> reply)
+		protected override void Run(Unit unit, G2M_SessionDisconnect message)
 		{
-			ActorResponse actorResponse = new ActorResponse();
-			try
-			{
-				unit.GetComponent<UnitGateComponent>().IsDisconnect = true;
-				reply(actorResponse);
-			}
-			catch (Exception e)
-			{
-				ReplyError(actorResponse, e, reply);
-			}
-			
-			await Task.CompletedTask;
+			unit.GetComponent<UnitGateComponent>().IsDisconnect = true;
 		}
 	}
 }

+ 3 - 13
Server/Hotfix/Module/FrameSync/OneFrameMessageHandler.cs

@@ -5,21 +5,11 @@ using ETModel;
 namespace ETHotfix
 {
 	[ActorMessageHandler(AppType.Map)]
-	public class OneFrameMessageHandler: AMActorRpcHandler<Unit, OneFrameMessage, ActorResponse>
+	public class OneFrameMessageHandler: AMActorLocationHandler<Unit, OneFrameMessage>
     {
-	    protected override async Task Run(Unit unit, OneFrameMessage message, Action<ActorResponse> reply)
+	    protected override void Run(Unit unit, OneFrameMessage message)
 	    {
-		    ActorResponse actorResponse = new ActorResponse();
-		    try
-		    {
-			    Game.Scene.GetComponent<ServerFrameComponent>().Add(message);
-			    reply(actorResponse);
-		    }
-		    catch (Exception e)
-		    {
-			    ReplyError(actorResponse, e, reply);
-		    }
-		    await Task.CompletedTask;
+			Game.Scene.GetComponent<ServerFrameComponent>().Add(message);
 	    }
     }
 }

+ 4 - 59
Server/Model/Module/Actor/AMActorHandler.cs

@@ -5,7 +5,7 @@ namespace ETModel
 {
 	public abstract class AMActorHandler<E, Message>: IMActorHandler where E: Entity where Message : class, IActorMessage
 	{
-		protected abstract Task Run(E entity, Message message);
+		protected abstract void Run(E entity, Message message);
 
 		public async Task Handle(Session session, Entity entity, object actorMessage)
 		{
@@ -22,69 +22,14 @@ namespace ETModel
 				return;
 			}
 
-			await this.Run(e, msg);
-		}
-
-		public Type GetMessageType()
-		{
-			return typeof (Message);
-		}
-	}
-
-	public abstract class AMActorRpcHandler<E, Request, Response>: IMActorHandler where E: Entity where Request: class, IActorRequest where Response : class, IActorResponse
-	{
-		protected static void ReplyError(Response response, Exception e, Action<Response> reply)
-		{
-			Log.Error(e);
-			response.Error = ErrorCode.ERR_RpcFail;
-			response.Message = e.ToString();
-			reply(response);
-		}
-
-		protected abstract Task Run(E unit, Request message, Action<Response> reply);
-
-		public async Task Handle(Session session, Entity entity, object actorMessage)
-		{
-			try
-			{
-				Request request = actorMessage as Request;
-				if (request == null)
-				{
-					Log.Error($"消息类型转换错误: {actorMessage.GetType().FullName} to {typeof (Request).Name}");
-					return;
-				}
-				E e = entity as E;
-				if (e == null)
-				{
-					Log.Error($"Actor类型转换错误: {entity.GetType().Name} to {typeof(E).Name}");
-					return;
-				}
+			this.Run(e, msg);
 
-				int rpcId = request.RpcId;
-				
-				long instanceId = session.InstanceId;
-				
-				await this.Run(e, request, response =>
-				{
-					// 等回调回来,session可以已经断开了,所以需要判断session InstanceId是否一样
-					if (session.InstanceId != instanceId)
-					{
-						return;
-					}
-					response.RpcId = rpcId;
-					
-					session.Reply(response);
-				});
-			}
-			catch (Exception e)
-			{
-				throw new Exception($"解释消息失败: {actorMessage.GetType().FullName}", e);
-			}
+			await Task.CompletedTask;
 		}
 
 		public Type GetMessageType()
 		{
-			return typeof (Request);
+			return typeof (Message);
 		}
 	}
 }

+ 62 - 0
Server/Model/Module/Actor/AMActorRpcHandler.cs

@@ -0,0 +1,62 @@
+using System;
+using System.Threading.Tasks;
+
+namespace ETModel
+{
+	public abstract class AMActorRpcHandler<E, Request, Response>: IMActorHandler where E: Entity where Request: class, IActorRequest where Response : class, IActorResponse
+	{
+		protected static void ReplyError(Response response, Exception e, Action<Response> reply)
+		{
+			Log.Error(e);
+			response.Error = ErrorCode.ERR_RpcFail;
+			response.Message = e.ToString();
+			reply(response);
+		}
+
+		protected abstract Task Run(E unit, Request message, Action<Response> reply);
+
+		public async Task Handle(Session session, Entity entity, object actorMessage)
+		{
+			try
+			{
+				Request request = actorMessage as Request;
+				if (request == null)
+				{
+					Log.Error($"消息类型转换错误: {actorMessage.GetType().FullName} to {typeof (Request).Name}");
+					return;
+				}
+				E e = entity as E;
+				if (e == null)
+				{
+					Log.Error($"Actor类型转换错误: {entity.GetType().Name} to {typeof(E).Name}");
+					return;
+				}
+
+				int rpcId = request.RpcId;
+				
+				long instanceId = session.InstanceId;
+				
+				await this.Run(e, request, response =>
+				{
+					// 等回调回来,session可以已经断开了,所以需要判断session InstanceId是否一样
+					if (session.InstanceId != instanceId)
+					{
+						return;
+					}
+					response.RpcId = rpcId;
+					
+					session.Reply(response);
+				});
+			}
+			catch (Exception e)
+			{
+				throw new Exception($"解释消息失败: {actorMessage.GetType().FullName}", e);
+			}
+		}
+
+		public Type GetMessageType()
+		{
+			return typeof (Request);
+		}
+	}
+}

+ 1 - 1
Server/Model/Module/Actor/ActorResponse.cs

@@ -4,7 +4,7 @@
 	/// actor RPC消息响应
 	/// </summary>
 	[Message(Opcode.ActorResponse)]
-	public class ActorResponse : IActorResponse
+	public class ActorResponse : IActorLocationResponse
 	{
 		public int RpcId { get; set; }
 

+ 39 - 0
Server/Model/Module/ActorLocation/AMActorLocationHandler.cs

@@ -0,0 +1,39 @@
+using System;
+using System.Threading.Tasks;
+
+namespace ETModel
+{
+	public abstract class AMActorLocationHandler<E, Message>: IMActorHandler where E: Entity where Message : class, IActorLocationMessage
+	{
+		protected abstract void Run(E entity, Message message);
+
+		public async Task Handle(Session session, Entity entity, object actorMessage)
+		{
+			Message msg = actorMessage as Message;
+			if (msg == null)
+			{
+				Log.Error($"消息类型转换错误: {actorMessage.GetType().FullName} to {typeof (Message).Name}");
+				return;
+			}
+			E e = entity as E;
+			if (e == null)
+			{
+				Log.Error($"Actor类型转换错误: {entity.GetType().Name} to {typeof(E).Name}");
+				return;
+			}
+			
+			ActorResponse actorResponse = new ActorResponse();
+			actorResponse.RpcId = msg.RpcId;
+			session.Reply(actorResponse);
+			
+			this.Run(e, msg);
+			
+			await Task.CompletedTask;
+		}
+
+		public Type GetMessageType()
+		{
+			return typeof (Message);
+		}
+	}
+}

+ 62 - 0
Server/Model/Module/ActorLocation/AMActorLocationRpcHandler.cs

@@ -0,0 +1,62 @@
+using System;
+using System.Threading.Tasks;
+
+namespace ETModel
+{
+	public abstract class AMActorLocationRpcHandler<E, Request, Response>: IMActorHandler where E: Entity where Request: class, IActorLocationRequest where Response : class, IActorLocationResponse
+	{
+		protected static void ReplyError(Response response, Exception e, Action<Response> reply)
+		{
+			Log.Error(e);
+			response.Error = ErrorCode.ERR_RpcFail;
+			response.Message = e.ToString();
+			reply(response);
+		}
+
+		protected abstract Task Run(E unit, Request message, Action<Response> reply);
+
+		public async Task Handle(Session session, Entity entity, object actorMessage)
+		{
+			try
+			{
+				Request request = actorMessage as Request;
+				if (request == null)
+				{
+					Log.Error($"消息类型转换错误: {actorMessage.GetType().FullName} to {typeof (Request).Name}");
+					return;
+				}
+				E e = entity as E;
+				if (e == null)
+				{
+					Log.Error($"Actor类型转换错误: {entity.GetType().Name} to {typeof(E).Name}");
+					return;
+				}
+
+				int rpcId = request.RpcId;
+				
+				long instanceId = session.InstanceId;
+				
+				await this.Run(e, request, response =>
+				{
+					// 等回调回来,session可以已经断开了,所以需要判断session InstanceId是否一样
+					if (session.InstanceId != instanceId)
+					{
+						return;
+					}
+					response.RpcId = rpcId;
+					
+					session.Reply(response);
+				});
+			}
+			catch (Exception e)
+			{
+				throw new Exception($"解释消息失败: {actorMessage.GetType().FullName}", e);
+			}
+		}
+
+		public Type GetMessageType()
+		{
+			return typeof (Request);
+		}
+	}
+}

+ 8 - 0
Unity/Assets/Hotfix/Module/Actor.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 85ae3703f8c933a4290c3b7b7e023dfe
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 2 - 1
Unity/Assets/Hotfix/Module/Message/IActorMessage.cs → Unity/Assets/Hotfix/Module/Actor/IActorMessage.cs

@@ -6,8 +6,9 @@ namespace ETHotfix
 		long ActorId { get; set; }
 	}
 
-	public interface IActorRequest : IActorMessage
+	public interface IActorRequest : IRequest
 	{
+		long ActorId { get; set; }
 	}
 
 	public interface IActorResponse : IResponse

+ 1 - 1
Unity/Assets/Hotfix/Module/Message/IActorMessage.cs.meta → Unity/Assets/Hotfix/Module/Actor/IActorMessage.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 8053037dc35c7e34296fdd2c9258fbed
+guid: b8a8cd971b2884d41bcf4db9af703523
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2

+ 8 - 0
Unity/Assets/Hotfix/Module/ActorLocation.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: fdc113766176d3444b88f0b2d0a39820
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 1 - 1
Unity/Assets/Hotfix/Module/Message/IClientActorMessage.cs → Unity/Assets/Hotfix/Module/ActorLocation/IActorLocationMessage.cs

@@ -1,7 +1,7 @@
 namespace ETHotfix
 {
 	// 客户端发送actor消息
-	public interface IClientActorMessage : IActorRequest
+	public interface IActorLocationMessage : IActorRequest
 	{
 	}
 

+ 1 - 1
Unity/Assets/Hotfix/Module/Message/IClientActorMessage.cs.meta → Unity/Assets/Hotfix/Module/ActorLocation/IActorLocationMessage.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: a02c971c7b358c14391076c428438948
+guid: 3fded6892ea9a1545acf1e51b815c096
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2

+ 4 - 4
Unity/Assets/Model/Module/Message/OuterOpcode.cs

@@ -5,16 +5,16 @@ namespace ETModel
 	public partial class Actor_Test : IActorMessage {}
 
 	[Message(OuterOpcode.Actor_TestRequest)]
-	public partial class Actor_TestRequest : IActorRequest {}
+	public partial class Actor_TestRequest : IActorLocationRequest {}
 
 	[Message(OuterOpcode.Actor_TestResponse)]
-	public partial class Actor_TestResponse : IActorResponse {}
+	public partial class Actor_TestResponse : IActorLocationResponse {}
 
 	[Message(OuterOpcode.Actor_TransferRequest)]
-	public partial class Actor_TransferRequest : IActorRequest {}
+	public partial class Actor_TransferRequest : IActorLocationRequest {}
 
 	[Message(OuterOpcode.Actor_TransferResponse)]
-	public partial class Actor_TransferResponse : IActorResponse {}
+	public partial class Actor_TransferResponse : IActorLocationResponse {}
 
 	[Message(OuterOpcode.C2G_EnterMap)]
 	public partial class C2G_EnterMap : IRequest {}

+ 9 - 6
Unity/Unity.Hotfix.csproj

@@ -12,13 +12,16 @@
     <ProjectTypeGuids>{E097FAD1-6243-4DAD-9C02-E9B9EFC3FFC1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
     <TargetFrameworkIdentifier>.NETFramework</TargetFrameworkIdentifier>
     <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
-    <TargetFrameworkProfile></TargetFrameworkProfile>
-    <CompilerResponseFile></CompilerResponseFile>
+    <TargetFrameworkProfile>
+    </TargetFrameworkProfile>
+    <CompilerResponseFile>
+    </CompilerResponseFile>
     <UnityProjectGenerator>VSTU</UnityProjectGenerator>
     <UnityProjectType>Game:1</UnityProjectType>
     <UnityBuildTarget>StandaloneWindows64:19</UnityBuildTarget>
     <UnityVersion>2017.4.11f1</UnityVersion>
-    <RootNamespace></RootNamespace>
+    <RootNamespace>
+    </RootNamespace>
     <LangVersion>6</LangVersion>
   </PropertyGroup>
   <PropertyGroup>
@@ -357,6 +360,8 @@
     <Compile Include="Assets\Hotfix\Entity\Game.cs" />
     <Compile Include="Assets\Hotfix\Entity\Scene.cs" />
     <Compile Include="Assets\Hotfix\Init.cs" />
+    <Compile Include="Assets\Hotfix\Module\ActorLocation\IActorLocationMessage.cs" />
+    <Compile Include="Assets\Hotfix\Module\Actor\IActorMessage.cs" />
     <Compile Include="Assets\Hotfix\Module\Config\ACategory.cs" />
     <Compile Include="Assets\Hotfix\Module\Config\ConfigComponent.cs" />
     <Compile Include="Assets\Hotfix\Module\Config\ConfigHelper.cs" />
@@ -371,8 +376,6 @@
     <Compile Include="Assets\Hotfix\Module\Message\HotfixMessage.cs" />
     <Compile Include="Assets\Hotfix\Module\Message\HotfixMessageDispatcher.cs" />
     <Compile Include="Assets\Hotfix\Module\Message\HotfixOpcode.cs" />
-    <Compile Include="Assets\Hotfix\Module\Message\IActorMessage.cs" />
-    <Compile Include="Assets\Hotfix\Module\Message\IClientActorMessage.cs" />
     <Compile Include="Assets\Hotfix\Module\Message\IMessage.cs" />
     <Compile Include="Assets\Hotfix\Module\Message\IMHandler.cs" />
     <Compile Include="Assets\Hotfix\Module\Message\MessageDispatherComponent.cs" />
@@ -400,4 +403,4 @@
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <Target Name="GenerateTargetFrameworkMonikerAttribute" />
-</Project>
+</Project>

+ 6 - 6
Unity/Unity.sln

@@ -5,10 +5,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.Model", "Unity.Model.
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.ThirdParty", "Unity.ThirdParty.csproj", "{CFBC0A95-3456-3439-6B2E-60FDE0FE5EE1}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.Hotfix", "Unity.Hotfix.csproj", "{350246F3-F094-675F-855B-FB9B18C2B23E}"
-EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.Editor", "Unity.Editor.csproj", "{C17F48D3-964E-E97C-3D2E-966F7A6C6D93}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.Hotfix", "Unity.Hotfix.csproj", "{350246F3-F094-675F-855B-FB9B18C2B23E}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -23,14 +23,14 @@ Global
 		{CFBC0A95-3456-3439-6B2E-60FDE0FE5EE1}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{CFBC0A95-3456-3439-6B2E-60FDE0FE5EE1}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{CFBC0A95-3456-3439-6B2E-60FDE0FE5EE1}.Release|Any CPU.Build.0 = Release|Any CPU
-		{350246F3-F094-675F-855B-FB9B18C2B23E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{350246F3-F094-675F-855B-FB9B18C2B23E}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{350246F3-F094-675F-855B-FB9B18C2B23E}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{350246F3-F094-675F-855B-FB9B18C2B23E}.Release|Any CPU.Build.0 = Release|Any CPU
 		{C17F48D3-964E-E97C-3D2E-966F7A6C6D93}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{C17F48D3-964E-E97C-3D2E-966F7A6C6D93}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{C17F48D3-964E-E97C-3D2E-966F7A6C6D93}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{C17F48D3-964E-E97C-3D2E-966F7A6C6D93}.Release|Any CPU.Build.0 = Release|Any CPU
+		{350246F3-F094-675F-855B-FB9B18C2B23E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{350246F3-F094-675F-855B-FB9B18C2B23E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{350246F3-F094-675F-855B-FB9B18C2B23E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{350246F3-F094-675F-855B-FB9B18C2B23E}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE