private void SendToClients(IEnumerable <FactoryShellData> data) { var networkData = data.Select(ToNetworkData).ToArray(); var packet = new SyncData { Shells = networkData }.CreateBinaryObjectPacket(); observable.Publish(new SendToClientsCommand(packet)); }
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; }