public Stream GetChanges(int turns) { List <SyncObject> changed; if (manageGlobalAddressing) { changed = changeRecord.GetSyncObjects(turns + 1); } else { changed = new List <SyncObject>(); changed.AddRange(objects.Compare(syncCopy)); foreach (int key in added.Keys) { changed.Add(new SyncObject(key, SyncCode.NewLocal)); } } Stream s = new MemoryStream(); StateFormatter bf = new StateFormatter(); foreach (SyncObject syncObj in changed) { bf.Serialize(s, syncObj.Code); switch (syncObj.Code) { case SyncCode.NewLocal: bf.Serialize(s, added[syncObj.Key]); break; case SyncCode.New: case SyncCode.Update: bf.Serialize(s, objects[syncObj.Key]); break; case SyncCode.Delete: bf.Serialize(s, syncObj.Key); break; default: throw new BurntimeLogicException(); } } bf.Serialize(s, SyncCode.End); s.Seek(0, SeekOrigin.Begin); return(s); }
public void Save(Stream stream) { StateFormatter bf = new StateFormatter(); bf.Serialize(stream, root.ID); foreach (StateObject state in objects.Values) { bf.Serialize(stream, state); } foreach (StateObject state in added.Values) { bf.Serialize(stream, state); } stream.Seek(0, SeekOrigin.Begin); }
public Stream GetAllStates() { Stream s = new MemoryStream(); StateFormatter bf = new StateFormatter(); bf.Serialize(s, SyncCode.RootId); bf.Serialize(s, root.ID); foreach (StateObject obj in objects.Values) { bf.Serialize(s, SyncCode.New); bf.Serialize(s, obj); } bf.Serialize(s, SyncCode.End); s.Seek(0, SeekOrigin.Begin); return(s); }