Ejemplo n.º 1
0
        public void Serialize(ISnapshot baseSnap, ISnapshot snap, Stream stream)
        {
//            _binaryWriter = new MyBinaryWriter(stream);
            _binaryWriter = MyBinaryWriter.Allocate(stream);
            Reset();
            snap.Header.Serialize(_binaryWriter, _version);
            var baseMap    = baseSnap.EntityMap;
            var currentMap = snap.EntityMap;
            SnapshotPatchGenerator handler = new SnapshotPatchGenerator(_serializerManager);

            EntityMapComparator.Diff(baseMap, currentMap, handler, "serialize");
            SnapshotPatch patch = handler.Detach();

            patch.BaseSnapshotSeq = baseSnap.SnapshotSeq;
            patch.Serialize(_binaryWriter, _serializerManager);
            _binaryWriter.ReleaseReference();
            patch.ReleaseReference();
        }
Ejemplo n.º 2
0
        public ISnapshot DeSerializeSnapshot(BinaryReader reader)
        {
            SnapshotHeader header;
            SnapshotPatch  patch = _snapSerializer.DeSerialize(reader, out header);

            ClearOldSnapshot(patch.BaseSnapshotSeq, header.SnapshotSeq);
            var baseSnap = SnapshotCloner.Clone(GetBaseSnapshot(patch.BaseSnapshotSeq));

            baseSnap.Header = header;
            patch.ApplyPatchTo(baseSnap, _snapSerializer.GetSerializerManager());
            patch.ReleaseReference();
            if (_receivedSnapMap.ContainsKey(baseSnap.SnapshotSeq))
            {
                Logger.ErrorFormat("SnapSHotSeq {0} exist", baseSnap.SnapshotSeq);
            }
            else
            {
                _receivedSnapMap.Add(baseSnap.SnapshotSeq, baseSnap);
            }
            baseSnap.AcquireReference();
            return(baseSnap);
        }