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);
            }
        }
    }
Esempio n. 3
0
        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);
            }
        }