예제 #1
0
        public void Send(OutBlob stream)
        {
            stream.BeginPacket(PacketId);
            stream.BeginBitAccess();

            GenericEntityUpdateWriter.WriteIntoPacket(stream,
                                                      _syncSegments,
                                                      _initializeSegments,
                                                      _flagSegments,
                                                      NumIdBits,
                                                      MaxIdValue);

            stream.EndPacket();
        }
        public static void WriteIntoPacket(OutBlob stream,
                                           [NotNull] IEnumerable <IUpdateSegment> syncSegments,
                                           [NotNull] IEnumerable <IUpdateSegment> initializeSegments,
                                           [NotNull] IEnumerable <IUpdateSegment> flagSegments,
                                           int numIdBits, int maxIdValue)
        {
            stream.BeginBitAccess();

            WriteSyncSegments(stream, syncSegments);
            WriteInitSegments(stream, initializeSegments);

            // avoid double enumeration of the flagSegments enumerable
            var enumeratedUpdateSegments =
                flagSegments as IList <IUpdateSegment> ?? flagSegments.ToList();

            WriteInitSegmentsEndMarkerIfNeeded(stream, enumeratedUpdateSegments, numIdBits, maxIdValue);

            stream.EndBitAccess();

            WriteFlagSegments(stream, enumeratedUpdateSegments);
        }