From e4bdfe3fc73c04ef149e545050a294f042d6de12 Mon Sep 17 00:00:00 2001 From: Endel Dreyer Date: Sun, 1 Nov 2020 18:48:13 -0300 Subject: [PATCH] colyseus/colyseus-hx#40 --- .../Colyseus/Serializer/Schema/Schema.cs | 23 +++++++++++++++---- .../Serializer/Schema/Types/ArraySchema.cs | 4 ++-- .../Serializer/Schema/Types/MapSchema.cs | 4 ++-- Server/package.json | 2 +- 4 files changed, 24 insertions(+), 9 deletions(-) diff --git a/Assets/Plugins/Colyseus/Serializer/Schema/Schema.cs b/Assets/Plugins/Colyseus/Serializer/Schema/Schema.cs index 3c0edef4..67df45cd 100644 --- a/Assets/Plugins/Colyseus/Serializer/Schema/Schema.cs +++ b/Assets/Plugins/Colyseus/Serializer/Schema/Schema.cs @@ -80,9 +80,8 @@ public class DataChange public delegate void KeyValueEventHandler(T value, K key); public delegate void OnRemoveEventHandler(); - public interface ISchemaCollection + public interface ISchemaCollection : IRef { - void MoveEventHandlers(ISchemaCollection previousInstance); void InvokeOnAdd(object item, object index); void InvokeOnChange(object item, object index); void InvokeOnRemove(object item, object index); @@ -115,6 +114,8 @@ public interface IRef object GetByIndex(int index); void DeleteByIndex(int index); + + void MoveEventHandlers(IRef previousInstance); } public class Schema : IRef @@ -176,6 +177,21 @@ public object this[string propertyName] return fieldChildTypes; } + public void MoveEventHandlers(IRef previousInstance) + { + OnChange = ((Schema)previousInstance).OnChange; + OnRemove = ((Schema)previousInstance).OnRemove; + + foreach (var item in ((Schema)previousInstance).fieldsByIndex) + { + var child = GetByIndex(item.Key); + if (child is IRef) + { + ((IRef)child).MoveEventHandlers((IRef)previousInstance.GetByIndex(item.Key)); + } + } + } + public void Decode(byte[] bytes, Iterator it = null, ReferenceTracker refs = null) { var decode = Decoder.GetInstance(); @@ -349,8 +365,7 @@ public void Decode(byte[] bytes, Iterator it = null, ReferenceTracker refs = nul if (previousValue != null) { - ((Schema)value).OnChange = ((Schema)previousValue).OnChange; - ((Schema)value).OnRemove = ((Schema)previousValue).OnRemove; + ((Schema)value).MoveEventHandlers((Schema)previousValue); if ( ((IRef)previousValue).__refId > 0 && diff --git a/Assets/Plugins/Colyseus/Serializer/Schema/Types/ArraySchema.cs b/Assets/Plugins/Colyseus/Serializer/Schema/Types/ArraySchema.cs index 7722eda4..ceb580e9 100644 --- a/Assets/Plugins/Colyseus/Serializer/Schema/Types/ArraySchema.cs +++ b/Assets/Plugins/Colyseus/Serializer/Schema/Types/ArraySchema.cs @@ -4,7 +4,7 @@ namespace Colyseus.Schema { - public class ArraySchema : ISchemaCollection, IRef + public class ArraySchema : ISchemaCollection { public Dictionary Items; public event KeyValueEventHandler OnAdd; @@ -159,7 +159,7 @@ public void TriggerAll() } } - public void MoveEventHandlers(ISchemaCollection previousInstance) + public void MoveEventHandlers(IRef previousInstance) { OnAdd = ((ArraySchema)previousInstance).OnAdd; OnChange = ((ArraySchema)previousInstance).OnChange; diff --git a/Assets/Plugins/Colyseus/Serializer/Schema/Types/MapSchema.cs b/Assets/Plugins/Colyseus/Serializer/Schema/Types/MapSchema.cs index a761aa66..0ab72fd6 100644 --- a/Assets/Plugins/Colyseus/Serializer/Schema/Types/MapSchema.cs +++ b/Assets/Plugins/Colyseus/Serializer/Schema/Types/MapSchema.cs @@ -5,7 +5,7 @@ namespace Colyseus.Schema { - public class MapSchema : ISchemaCollection, IRef + public class MapSchema : ISchemaCollection { public OrderedDictionary Items = new OrderedDictionary(); public event KeyValueEventHandler OnAdd; @@ -225,7 +225,7 @@ public void TriggerAll() } } - public void MoveEventHandlers(ISchemaCollection previousInstance) + public void MoveEventHandlers(IRef previousInstance) { OnAdd = ((MapSchema)previousInstance).OnAdd; OnChange = ((MapSchema)previousInstance).OnChange; diff --git a/Server/package.json b/Server/package.json index dc94c03e..ecbc019f 100644 --- a/Server/package.json +++ b/Server/package.json @@ -14,7 +14,7 @@ }, "dependencies": { "@colyseus/social": "^0.10.0", - "colyseus": "^0.14.0", + "colyseus": "^0.14.1", "cors": "^2.8.5", "express": "^4.13.3", "express-jwt": "^5.3.1",