public static void Send(GameObject managerSubject, NetworkConnection recipient, TileChangeList changeList) { if (changeList == null || changeList.List.Count == 0) { return; } foreach (var changeChunk in changeList.List.ToArray().Chunk(MAX_CHANGES_PER_MESSAGE).Select(TileChangeList.FromList)) { foreach (var entry in changeChunk.List) { Logger.LogTraceFormat("Sending update for {0} layer {1}", Category.TileMaps, entry.Position, entry.LayerType); } string jsondata = JsonUtility.ToJson(changeChunk); TileChangesNewClientSync msg = new TileChangesNewClientSync { ManagerSubject = managerSubject.GetComponent <NetworkIdentity>().netId, data = jsondata }; msg.SendTo(recipient); } }
public void InitServerSync(string data) { //Unpacking the data example (and then run action change) changeList = JsonUtility.FromJson <TileChangeList>(data); foreach (TileChangeEntry entry in changeList.List) { // load tile & apply if (entry.TileType.Equals(TileType.None)) { InternalRemoveTile(entry.Position, entry.LayerType, entry.RemoveAll); } else { InternalUpdateTile(entry.Position, entry.TileType, entry.TileName); } } }
public static void SendTo(GameObject managerSubject, NetworkConnection recipient, TileChangeList changeList) { if (changeList == null || changeList.List.Count == 0) { return; } var netID = managerSubject.GetComponent <NetworkedMatrix>().MatrixSync.netId; foreach (var changeChunk in changeList.List.ToArray().Chunk(MAX_CHANGES_PER_MESSAGE)) { // foreach (var entry in changeChunk.List) // { // Logger.LogTraceFormat("Sending update for {0} layer {1}", Category.TileMaps, entry.Position, // entry.LayerType); // } // I imagine that doesn't help performance /\ List <DelayedData> Changes = new List <DelayedData>(); foreach (var tileChangeEntry in changeChunk) { Changes.Add(new DelayedData(tileChangeEntry, netID)); } NetMessage msg = new NetMessage { MatrixSyncNetID = netID, Changes = Changes }; SendTo(recipient, msg); } }
public static void Send(GameObject managerSubject, NetworkConnection recipient, TileChangeList changeList) { if (changeList == null || changeList.List.Count == 0) { return; } foreach (var changeChunk in changeList.List.ToArray().Chunk(MAX_CHANGES_PER_MESSAGE).Select(TileChangeList.FromList)) { foreach (var entry in changeChunk.List) { Logger.LogTraceFormat("Sending update for {0} layer {1}", Category.TileMaps, entry.Position, entry.LayerType); } //We use NewtonSoft's Json as unity inbuilt doesnt support nullables string jsondata = JsonConvert.SerializeObject(changeChunk, new JsonSerializerSettings() { ReferenceLoopHandling = ReferenceLoopHandling.Ignore }); NetMessage msg = new NetMessage { ManagerSubject = managerSubject.GetComponent <NetworkedMatrix>().MatrixSync.netId, data = jsondata }; SendTo(recipient, msg); } }
public static void SendTo(GameObject managerSubject, NetworkConnection recipient, TileChangeList changeList) { if (changeList == null || changeList.List.Count == 0) { return; } var netID = managerSubject.GetComponent <NetworkedMatrix>().MatrixSync.netId; foreach (var changeChunk in changeList.List.ToArray().Chunk(MAX_CHANGES_PER_MESSAGE)) { List <DelayedData> Changes = new List <DelayedData>(); foreach (var tileChangeEntry in changeChunk) { Changes.Add(new DelayedData(tileChangeEntry)); } NetMessage msg = new NetMessage { MatrixSyncNetID = netID, Changes = Changes }; SendTo(recipient, msg); } }