Esempio n. 1
0
        private void SendToClients(IEnumerable <FactoryShellData> data)
        {
            var networkData = data.Select(ToNetworkData).ToArray();
            var packet = new SyncData {
                Shells = networkData
            }.CreateBinaryObjectPacket();

            observable.Publish(new SendToClientsCommand(packet));
        }
Esempio n. 2
0
        private void SynchronizeWithServerData(SyncData newData)
        {
            var guidsFromNewData = newData.Shells.Select(shell => shell.Guid);
            var guidsFromOldData = lastReceivedShells.Select(shell => shell.Guid);
            var newGuids         = guidsFromNewData.Except(guidsFromOldData);
            var oldGuids         = guidsFromOldData.Except(guidsFromNewData);
            var newShells        = newData.Shells.Join(newGuids, shell => shell.Guid, guid => guid, (shell, guid) => shell);
            var oldShells        = lastReceivedShells.Join(oldGuids, shell => shell.Guid, guid => guid, (shell, guid) => shell);

            newShells.ForEach(shell => observable.Publish(new CreateShellCommand(shell.Type, shell.Guid, shell.Position, shell.Rotation)));
            oldShells.ForEach(shell => observable.Publish(new RemoveShellCommand(shell.Guid)));
            lastReceivedShells = newData.Shells;
        }