diff --git a/Server/Model/Module/Demo/Unit.cs b/Server/Model/Module/Demo/Unit.cs index d658131f7c17af809db12c4a5ff9aad511b87702..5b96d6003fa457a99a3756a7988498e9da401bfd 100644 --- a/Server/Model/Module/Demo/Unit.cs +++ b/Server/Model/Module/Demo/Unit.cs @@ -10,7 +10,7 @@ namespace ETModel } [ObjectSystem] - public class UnitSystem : AwakeSystem + public class UnitAwakeSystem : AwakeSystem { public override void Awake(Unit self, UnitType a) { @@ -30,11 +30,6 @@ namespace ETModel this.UnitType = unitType; } - public override void EndDeSerialize() - { - Game.EventSystem.Add(this); - } - public override void Dispose() { if (this.IsDisposed) diff --git a/Server/Model/Server.Model.csproj b/Server/Model/Server.Model.csproj index 05d0912ed4dd8d5dfa0d97c3fc29e4d969117cbc..781b0b6a515a4ee82a4388c82b4dd7b1ee4641b5 100644 --- a/Server/Model/Server.Model.csproj +++ b/Server/Model/Server.Model.csproj @@ -44,6 +44,9 @@ Base\Async\MoveNextRunner.cs + + Base\Base\IDeserializeSystem.cs + Base\UnityMath\Color32.cs @@ -131,7 +134,6 @@ - diff --git a/Unity/Assets/Hotfix/Base/Object/Component.cs b/Unity/Assets/Hotfix/Base/Object/Component.cs index 32616d899d15c32afb53556aca0005afa9017cc6..9feefc867389b321b0e8b2fc9af37cf66c6f38e8 100644 --- a/Unity/Assets/Hotfix/Base/Object/Component.cs +++ b/Unity/Assets/Hotfix/Base/Object/Component.cs @@ -4,7 +4,7 @@ using MongoDB.Bson.Serialization.Attributes; namespace ETHotfix { [BsonIgnoreExtraElements] - public abstract class Component : Object, IDisposable, IComponentSerialize + public abstract class Component : Object, IDisposable { [BsonIgnore] public long InstanceId { get; protected set; } @@ -84,12 +84,9 @@ namespace ETHotfix } } - public virtual void BeginSerialize() - { - } - - public virtual void EndDeSerialize() + public override void EndInit() { + Game.EventSystem.Deserialize(this); } } } \ No newline at end of file diff --git a/Unity/Assets/Hotfix/Base/Object/Entity.cs b/Unity/Assets/Hotfix/Base/Object/Entity.cs index 64d7c831f8ee0e8ca763fa5c0801a170b1ca518f..5069133eee72010812caf16489740a2657c04368 100644 --- a/Unity/Assets/Hotfix/Base/Object/Entity.cs +++ b/Unity/Assets/Hotfix/Base/Object/Entity.cs @@ -243,25 +243,5 @@ namespace ETHotfix Log.Error(e); } } - - public override void BeginSerialize() - { - base.BeginSerialize(); - - foreach (Component component in this.components) - { - component.BeginSerialize(); - } - } - - public override void EndDeSerialize() - { - base.EndDeSerialize(); - - foreach (Component component in this.components) - { - component.EndDeSerialize(); - } - } } } \ No newline at end of file diff --git a/Unity/Assets/Hotfix/Base/Object/EventSystem.cs b/Unity/Assets/Hotfix/Base/Object/EventSystem.cs index 6efc5406dcb7eedd7ee6d45b85727b5ae7b7923d..f082a14aee477a70abade4fb49eb2ca7ef31e14d 100644 --- a/Unity/Assets/Hotfix/Base/Object/EventSystem.cs +++ b/Unity/Assets/Hotfix/Base/Object/EventSystem.cs @@ -25,6 +25,8 @@ namespace ETHotfix private readonly UnOrderMultiMap lateUpdateSystems = new UnOrderMultiMap(); private readonly UnOrderMultiMap changeSystems = new UnOrderMultiMap(); + + private readonly UnOrderMultiMap deserializeSystems = new UnOrderMultiMap(); private Queue updates = new Queue(); private Queue updates2 = new Queue(); @@ -65,46 +67,32 @@ namespace ETHotfix object obj = Activator.CreateInstance(type); - IAwakeSystem objectSystem = obj as IAwakeSystem; - if (objectSystem != null) - { - this.awakeSystems.Add(objectSystem.Type(), objectSystem); - } - - IUpdateSystem updateSystem = obj as IUpdateSystem; - if (updateSystem != null) - { - this.updateSystems.Add(updateSystem.Type(), updateSystem); - } - - ILateUpdateSystem lateUpdateSystem = obj as ILateUpdateSystem; - if (lateUpdateSystem != null) - { - this.lateUpdateSystems.Add(lateUpdateSystem.Type(), lateUpdateSystem); - } - - IStartSystem startSystem = obj as IStartSystem; - if (startSystem != null) - { - this.startSystems.Add(startSystem.Type(), startSystem); - } - - IDestroySystem destroySystem = obj as IDestroySystem; - if (destroySystem != null) - { - this.destroySystems.Add(destroySystem.Type(), destroySystem); - } - - ILoadSystem loadSystem = obj as ILoadSystem; - if (loadSystem != null) - { - this.loadSystems.Add(loadSystem.Type(), loadSystem); - } - - IChangeSystem changeSystem = obj as IChangeSystem; - if (changeSystem != null) - { - this.changeSystems.Add(changeSystem.Type(), changeSystem); + switch (obj) + { + case IAwakeSystem objectSystem: + this.awakeSystems.Add(objectSystem.Type(), objectSystem); + break; + case IUpdateSystem updateSystem: + this.updateSystems.Add(updateSystem.Type(), updateSystem); + break; + case ILateUpdateSystem lateUpdateSystem: + this.lateUpdateSystems.Add(lateUpdateSystem.Type(), lateUpdateSystem); + break; + case IStartSystem startSystem: + this.startSystems.Add(startSystem.Type(), startSystem); + break; + case IDestroySystem destroySystem: + this.destroySystems.Add(destroySystem.Type(), destroySystem); + break; + case ILoadSystem loadSystem: + this.loadSystems.Add(loadSystem.Type(), loadSystem); + break; + case IChangeSystem changeSystem: + this.changeSystems.Add(changeSystem.Type(), changeSystem); + break; + case IDeserializeSystem deserializeSystem: + this.deserializeSystems.Add(deserializeSystem.Type(), deserializeSystem); + break; } } @@ -197,6 +185,32 @@ namespace ETHotfix { this.allComponents.Remove(instanceId); } + + public void Deserialize(Component component) + { + List iDeserializeSystems = this.deserializeSystems[component.GetType()]; + if (iDeserializeSystems == null) + { + return; + } + + foreach (IDeserializeSystem deserializeSystem in iDeserializeSystems) + { + if (deserializeSystem == null) + { + continue; + } + + try + { + deserializeSystem.Run(component); + } + catch (Exception e) + { + Log.Error(e); + } + } + } public void Awake(Component component) { diff --git a/Unity/Assets/Hotfix/Base/Object/IComponentSerialize.cs b/Unity/Assets/Hotfix/Base/Object/IComponentSerialize.cs deleted file mode 100644 index a9599743e5331284a60c1d5f3f31eb84456f5443..0000000000000000000000000000000000000000 --- a/Unity/Assets/Hotfix/Base/Object/IComponentSerialize.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace ETHotfix -{ - // 在序列化前或者反序列化之后需要做一些操作,可以实现该接口,该接口的方法需要手动调用 - // 相比ISupportInitialize接口,BeginSerialize在BeginInit之前调用,EndDeSerialize在EndInit之后调用 - // 并且需要手动调用,可以在反序列化之后,在次方法中将注册组件到EventSystem之中等等 - public interface IComponentSerialize - { - // 序列化之前调用 - void BeginSerialize(); - // 反序列化之后调用 - void EndDeSerialize(); - } -} \ No newline at end of file diff --git a/Unity/Assets/Hotfix/Base/Object/IDeserializeSystem.cs b/Unity/Assets/Hotfix/Base/Object/IDeserializeSystem.cs new file mode 100644 index 0000000000000000000000000000000000000000..8aca9428910a5080bbe87f5dc668263106624c8b --- /dev/null +++ b/Unity/Assets/Hotfix/Base/Object/IDeserializeSystem.cs @@ -0,0 +1,25 @@ +using System; + +namespace ETHotfix +{ + public interface IDeserializeSystem + { + Type Type(); + void Run(object o); + } + + public abstract class DeserializeSystem : IDeserializeSystem + { + public void Run(object o) + { + this.Deserialize((T)o); + } + + public Type Type() + { + return typeof(T); + } + + public abstract void Deserialize(T self); + } +} diff --git a/Unity/Assets/Hotfix/Base/Object/IComponentSerialize.cs.meta b/Unity/Assets/Hotfix/Base/Object/IDeserializeSystem.cs.meta similarity index 83% rename from Unity/Assets/Hotfix/Base/Object/IComponentSerialize.cs.meta rename to Unity/Assets/Hotfix/Base/Object/IDeserializeSystem.cs.meta index d647d383a598dc83458e6dc3a0dc8b52b69c5d86..426de1ebb6428dee5a5b457686ba66cd82280ece 100644 --- a/Unity/Assets/Hotfix/Base/Object/IComponentSerialize.cs.meta +++ b/Unity/Assets/Hotfix/Base/Object/IDeserializeSystem.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: f4c02bef60f3a024eb86be6cbe51eefe +guid: f3e96494042eb2445b639892a5a761af MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Unity/Assets/Model/Base/Object/Component.cs b/Unity/Assets/Model/Base/Object/Component.cs index 205c808b3a6fb1a46b17c6dac32270ac6b512e5c..497cc5fe66d15099f65504d4d79e83dffc867d20 100644 --- a/Unity/Assets/Model/Base/Object/Component.cs +++ b/Unity/Assets/Model/Base/Object/Component.cs @@ -4,7 +4,7 @@ using MongoDB.Bson.Serialization.Attributes; namespace ETModel { [BsonIgnoreExtraElements] - public abstract class Component : Object, IDisposable, IComponentSerialize + public abstract class Component : Object, IDisposable { [BsonIgnore] public long InstanceId { get; private set; } @@ -84,12 +84,9 @@ namespace ETModel } } - public virtual void BeginSerialize() - { - } - - public virtual void EndDeSerialize() + public override void EndInit() { + Game.EventSystem.Deserialize(this); } } } \ No newline at end of file diff --git a/Unity/Assets/Model/Base/Object/Entity.cs b/Unity/Assets/Model/Base/Object/Entity.cs index 197d0d0ac55705a5e0addc3e2f42aaa9ccf4b96c..5b2222320d0b9b501f370c197b1f8fe631ccf2ea 100644 --- a/Unity/Assets/Model/Base/Object/Entity.cs +++ b/Unity/Assets/Model/Base/Object/Entity.cs @@ -243,25 +243,5 @@ namespace ETModel Log.Error(e); } } - - public override void BeginSerialize() - { - base.BeginSerialize(); - - foreach (Component component in this.components) - { - component.BeginSerialize(); - } - } - - public override void EndDeSerialize() - { - base.EndDeSerialize(); - - foreach (Component component in this.components) - { - component.EndDeSerialize(); - } - } } } \ No newline at end of file diff --git a/Unity/Assets/Model/Base/Object/EventSystem.cs b/Unity/Assets/Model/Base/Object/EventSystem.cs index dfef626e019e499f6fae2fce4de7d6cf8af81ebb..28d05eee42173a74f6d96a3b1c393d422881aa8a 100644 --- a/Unity/Assets/Model/Base/Object/EventSystem.cs +++ b/Unity/Assets/Model/Base/Object/EventSystem.cs @@ -33,6 +33,8 @@ namespace ETModel private readonly UnOrderMultiMap lateUpdateSystems = new UnOrderMultiMap(); private readonly UnOrderMultiMap changeSystems = new UnOrderMultiMap(); + + private readonly UnOrderMultiMap deserializeSystems = new UnOrderMultiMap(); private Queue updates = new Queue(); private Queue updates2 = new Queue(); @@ -82,46 +84,32 @@ namespace ETModel object obj = Activator.CreateInstance(type); - IAwakeSystem objectSystem = obj as IAwakeSystem; - if (objectSystem != null) - { - this.awakeSystems.Add(objectSystem.Type(), objectSystem); - } - - IUpdateSystem updateSystem = obj as IUpdateSystem; - if (updateSystem != null) - { - this.updateSystems.Add(updateSystem.Type(), updateSystem); - } - - ILateUpdateSystem lateUpdateSystem = obj as ILateUpdateSystem; - if (lateUpdateSystem != null) - { - this.lateUpdateSystems.Add(lateUpdateSystem.Type(), lateUpdateSystem); - } - - IStartSystem startSystem = obj as IStartSystem; - if (startSystem != null) - { - this.startSystems.Add(startSystem.Type(), startSystem); - } - - IDestroySystem destroySystem = obj as IDestroySystem; - if (destroySystem != null) - { - this.destroySystems.Add(destroySystem.Type(), destroySystem); - } - - ILoadSystem loadSystem = obj as ILoadSystem; - if (loadSystem != null) - { - this.loadSystems.Add(loadSystem.Type(), loadSystem); - } - - IChangeSystem changeSystem = obj as IChangeSystem; - if (changeSystem != null) - { - this.changeSystems.Add(changeSystem.Type(), changeSystem); + switch (obj) + { + case IAwakeSystem objectSystem: + this.awakeSystems.Add(objectSystem.Type(), objectSystem); + break; + case IUpdateSystem updateSystem: + this.updateSystems.Add(updateSystem.Type(), updateSystem); + break; + case ILateUpdateSystem lateUpdateSystem: + this.lateUpdateSystems.Add(lateUpdateSystem.Type(), lateUpdateSystem); + break; + case IStartSystem startSystem: + this.startSystems.Add(startSystem.Type(), startSystem); + break; + case IDestroySystem destroySystem: + this.destroySystems.Add(destroySystem.Type(), destroySystem); + break; + case ILoadSystem loadSystem: + this.loadSystems.Add(loadSystem.Type(), loadSystem); + break; + case IChangeSystem changeSystem: + this.changeSystems.Add(changeSystem.Type(), changeSystem); + break; + case IDeserializeSystem deserializeSystem: + this.deserializeSystems.Add(deserializeSystem.Type(), deserializeSystem); + break; } } @@ -207,6 +195,32 @@ namespace ETModel this.allComponents.TryGetValue(id, out component); return component; } + + public void Deserialize(Component component) + { + List iDeserializeSystems = this.deserializeSystems[component.GetType()]; + if (iDeserializeSystems == null) + { + return; + } + + foreach (IDeserializeSystem deserializeSystem in iDeserializeSystems) + { + if (deserializeSystem == null) + { + continue; + } + + try + { + deserializeSystem.Run(component); + } + catch (Exception e) + { + Log.Error(e); + } + } + } public void Awake(Component component) { diff --git a/Unity/Assets/Model/Base/Object/IComponentSerialize.cs b/Unity/Assets/Model/Base/Object/IComponentSerialize.cs deleted file mode 100644 index 84d98f7c6527cf2e5d0e7be553293af714ead848..0000000000000000000000000000000000000000 --- a/Unity/Assets/Model/Base/Object/IComponentSerialize.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace ETModel -{ - // 在序列化前或者反序列化之后需要做一些操作,可以实现该接口,该接口的方法需要手动调用 - // 相比ISupportInitialize接口,BeginSerialize在BeginInit之前调用,EndDeSerialize在EndInit之后调用 - // 并且需要手动调用,可以在反序列化之后,在次方法中将注册组件到EventSystem之中等等 - public interface IComponentSerialize - { - // 序列化之前调用 - void BeginSerialize(); - // 反序列化之后调用 - void EndDeSerialize(); - } -} \ No newline at end of file diff --git a/Unity/Assets/Model/Base/Object/IDeserializeSystem.cs b/Unity/Assets/Model/Base/Object/IDeserializeSystem.cs new file mode 100644 index 0000000000000000000000000000000000000000..a11ee62f4306c9cf645f36d3ed28add603f585d9 --- /dev/null +++ b/Unity/Assets/Model/Base/Object/IDeserializeSystem.cs @@ -0,0 +1,30 @@ +using System; + +namespace ETModel +{ + public interface IDeserializeSystem + { + Type Type(); + void Run(object o); + } + + /// + /// 反序列化后执行的System + /// 要小心使用这个System,因为对象假如要保存到数据库,到dbserver也会进行反序列化,那么也会执行该System + /// + /// + public abstract class DeserializeSystem : IDeserializeSystem + { + public void Run(object o) + { + this.Deserialize((T)o); + } + + public Type Type() + { + return typeof(T); + } + + public abstract void Deserialize(T self); + } +} diff --git a/Unity/Assets/Model/Base/Object/IComponentSerialize.cs.meta b/Unity/Assets/Model/Base/Object/IDeserializeSystem.cs.meta similarity index 69% rename from Unity/Assets/Model/Base/Object/IComponentSerialize.cs.meta rename to Unity/Assets/Model/Base/Object/IDeserializeSystem.cs.meta index 06b8738efec2872b318310b3df97e6518b4aba63..ab5169239b7727b049eda9a1fdc9e3cf618a335a 100644 --- a/Unity/Assets/Model/Base/Object/IComponentSerialize.cs.meta +++ b/Unity/Assets/Model/Base/Object/IDeserializeSystem.cs.meta @@ -1,8 +1,7 @@ fileFormatVersion: 2 -guid: 1d4dd4af4f735fc43a9893df26ab0bce -timeCreated: 1526888904 -licenseType: Pro +guid: 5e19578888c954c48ae3e6d6cd5a3ceb MonoImporter: + externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 diff --git a/Unity/Unity.Hotfix.csproj b/Unity/Unity.Hotfix.csproj index fb5068d14a852e139c9089c917990b918a48821b..e6a850ab8a706adcf48c335b6f18e61c6cf8ca9c 100644 --- a/Unity/Unity.Hotfix.csproj +++ b/Unity/Unity.Hotfix.csproj @@ -70,7 +70,7 @@ - + diff --git a/Unity/Unity.Model.csproj b/Unity/Unity.Model.csproj index b287093beb0ca1a8509e7501b3e844d59adb2fec..7bc736e8b379d6c105e447fa8387e6e9dd3ecb05 100644 --- a/Unity/Unity.Model.csproj +++ b/Unity/Unity.Model.csproj @@ -101,7 +101,7 @@ - + diff --git a/Unity/Unity.sln b/Unity/Unity.sln index 8a9d5c5e83cc955e4842cbfdf179d6ee255d1d33..692fdca9e2f38aac542b439d8dc4dd33cad7cf50 100644 --- a/Unity/Unity.sln +++ b/Unity/Unity.sln @@ -4,10 +4,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.Model", "Unity.Model. EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.ThirdParty", "Unity.ThirdParty.csproj", "{E15BADD2-3A26-309A-AB0F-DC5B08044350}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.Editor", "Unity.Editor.csproj", "{CD311104-1830-B119-81B6-5DBEE2467FFB}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.Hotfix", "Unity.Hotfix.csproj", "{1066F652-6A89-D1C4-9881-1A19DF7AB80E}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.Editor", "Unity.Editor.csproj", "{CD311104-1830-B119-81B6-5DBEE2467FFB}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -22,14 +22,14 @@ Global {E15BADD2-3A26-309A-AB0F-DC5B08044350}.Debug|Any CPU.Build.0 = Debug|Any CPU {E15BADD2-3A26-309A-AB0F-DC5B08044350}.Release|Any CPU.ActiveCfg = Release|Any CPU {E15BADD2-3A26-309A-AB0F-DC5B08044350}.Release|Any CPU.Build.0 = Release|Any CPU - {CD311104-1830-B119-81B6-5DBEE2467FFB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CD311104-1830-B119-81B6-5DBEE2467FFB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CD311104-1830-B119-81B6-5DBEE2467FFB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CD311104-1830-B119-81B6-5DBEE2467FFB}.Release|Any CPU.Build.0 = Release|Any CPU {1066F652-6A89-D1C4-9881-1A19DF7AB80E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1066F652-6A89-D1C4-9881-1A19DF7AB80E}.Debug|Any CPU.Build.0 = Debug|Any CPU {1066F652-6A89-D1C4-9881-1A19DF7AB80E}.Release|Any CPU.ActiveCfg = Release|Any CPU {1066F652-6A89-D1C4-9881-1A19DF7AB80E}.Release|Any CPU.Build.0 = Release|Any CPU + {CD311104-1830-B119-81B6-5DBEE2467FFB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CD311104-1830-B119-81B6-5DBEE2467FFB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CD311104-1830-B119-81B6-5DBEE2467FFB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CD311104-1830-B119-81B6-5DBEE2467FFB}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE