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(); }
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); }