Home › Forums › Support › Send file with progress and stats › Reply To: Send file with progress and stats
March 17, 2013 at 18:31
#492
Keymaster
Heya Sp1rit,
Thanks for your interest in NetworkComms.Net. Setting up a progress bar is relatively straight forward. You are already on the right track with the StreamSendWrapper, a short example that should get you going is as follows:
On the client side you break the send into multiple instances using ThreadSafeStream and StreamSendWrapper.
//This is our progress percent, between 0 and 1
double progressPercentage = 0;
//Initialise stream with 1MB
byte[] buffer = new byte[1024*1024];
DPSBase.ThreadSafeStream dataToSend = new DPSBase.ThreadSafeStream(new System.IO.MemoryStream(buffer));
int totalBytesSent = 0;
//We will send in chunks of 50KB
int sendInChunksOfNBytes = 50 * 1024;
//Get the connection to the target
Connection connection = TCPConnection.GetConnection(new ConnectionInfo("192.168.0.1", 10000));
do
{
//Determine the total number of bytes to send
//We need to watch out for the end of the buffer when we send less than sendInChunksOfNBytes
int bytesToSend = (buffer.Length - totalBytesSent > sendInChunksOfNBytes ? sendInChunksOfNBytes : buffer.Length - totalBytesSent);
DPSBase.StreamSendWrapper streamWrapper = new DPSBase.StreamSendWrapper(dataToSend, totalBytesSent, bytesToSend);
connection.SendObject("PartitionedSend", streamWrapper);
totalBytesSent+=bytesToSend;
progressPercentage = ((double)totalBytesSent / buffer.Length);
}
while (totalBytesSent < buffer.Length);
On the server side you just reassemble the stream as the data comes in:
System.IO.Stream recievedData = new System.IO.MemoryStream();
NetworkComms.AppendGlobalIncomingPacketHandler<byte[]>("PartitionedSend", (packetHeader, connection, incomingBytes) =>
{
Console.WriteLine("\n ... Incoming data from " + connection.ToString());
recievedData.Write(incomingBytes, 0, incomingBytes.Length);
});
If you have any issues just post back.
Marc
