void WriteChunkCallback(XmlDictionaryWriter writer, object state) { ChunkState chunkState = (ChunkState)state; writer.WriteStartElement(ChunkingUtils.ChunkElement, ChunkingUtils.ChunkNs); writer.WriteBase64(chunkState.Buffer, 0, chunkState.Count); writer.WriteEndElement(); }
void CreateChunkMessage() { ChunkBodyWriter bodyWriter = new ChunkBodyWriter(this.WriteChunkCallback, this.chunkState); Message chunk = Message.CreateMessage(this.version, ChunkingUtils.ChunkAction, bodyWriter); chunk.Headers.Add(this.messageIdHeader); chunk.Headers.Add(MessageHeader.CreateHeader(ChunkingUtils.ChunkNumberHeader, ChunkingUtils.ChunkNs, this.chunkNum, true)); this.outputChannel.Send(chunk, chunkingTimeout.RemainingTime()); Console.WriteLine(" > Sent chunk {0} of message {1}", chunkNum, this.messageId); this.chunkNum++; this.chunkState = new ChunkState(); }
public override void WriteBase64(byte[] buffer, int index, int count) { if (chunkState == null) { chunkState = new ChunkState(); } int remaining = chunkState.AppendBytes(buffer, index, count); if (chunkState.Count == ChunkingUtils.ChunkSize) { CreateChunkMessage(); } int end = index + count - 1; while (remaining > 0) { int start = end - remaining + 1; remaining = chunkState.AppendBytes(buffer, start, remaining); if (chunkState.Count == ChunkingUtils.ChunkSize) { CreateChunkMessage(); } } }