public void Handle(ReplicationMessage.CreateChunk message)
        {
            if (_subscriptionId != message.SubscriptionId)
            {
                return;
            }

            if (_activeChunk != null)
            {
                _activeChunk.MarkForDeletion();
                _activeChunk = null;
            }
            _framer.Reset();

            if (message.IsCompletedChunk)
            {
                _activeChunk = Db.Manager.CreateTempChunk(message.ChunkHeader, message.FileSize);
            }
            else
            {
                if (message.ChunkHeader.ChunkStartNumber != Db.Manager.ChunksCount)
                {
                    ReplicationFail("Received request to create a new ongoing chunk #{0}-{1}, but current chunks count is {2}.",
                                    message.ChunkHeader.ChunkStartNumber, message.ChunkHeader.ChunkEndNumber, Db.Manager.ChunksCount);
                }
                Db.Manager.AddNewChunk(message.ChunkHeader, message.FileSize);
            }

            _subscriptionPos      = message.ChunkHeader.ChunkStartPosition;
            _ackedSubscriptionPos = _subscriptionPos;
            Bus.Publish(new ReplicationMessage.AckLogPosition(_subscriptionId, _ackedSubscriptionPos));
        }
        private TcpPackage WrapCreateChunk(ReplicationMessage.CreateChunk msg)
        {
            var dto = new ReplicationMessageDto.CreateChunk(msg.LeaderId.ToByteArray(),
                                                            msg.SubscriptionId.ToByteArray(),
                                                            msg.ChunkHeader.AsByteArray(),
                                                            msg.FileSize,
                                                            msg.IsCompletedChunk);

            return(new TcpPackage(TcpCommand.CreateChunk, Guid.NewGuid(), dto.Serialize()));
        }