예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }