Extension method for reading/writing enums in netbuffers, (untested) classes for sending files

This commit is contained in:
Regalis11
2016-02-24 15:45:45 +02:00
parent c613e5fcf8
commit 6f51c6fb33
10 changed files with 270 additions and 128 deletions
@@ -0,0 +1,70 @@
using Lidgren.Network;
using System;
using System.IO;
namespace Barotrauma.Networking
{
class FileStreamReceiver
{
private NetClient s_client;
private ulong s_length;
private ulong s_received;
private FileStream s_writeStream;
private int s_timeStarted;
public FileTransferStatus Status
{
get;
private set;
}
public float BytesPerSecond
{
get;
private set;
}
public FileStreamReceiver(NetClient client)
{
s_client = client;
Status = FileTransferStatus.NotStarted;
}
public void ReadMessage(NetIncomingMessage inc)
{
int chunkLen = inc.LengthBytes;
if (s_length == 0)
{
s_length = inc.ReadUInt64();
string filename = inc.ReadString();
s_writeStream = new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.None);
s_timeStarted = Environment.TickCount;
Status = FileTransferStatus.NotStarted;
return;
}
byte[] all = inc.ReadBytes(inc.LengthBytes);
s_received += (ulong)all.Length;
s_writeStream.Write(all, 0, all.Length);
int passed = Environment.TickCount - s_timeStarted;
float psec = passed / 1000.0f;
BytesPerSecond = s_received / psec;
Status = FileTransferStatus.Receiving;
if (s_received >= s_length)
{
s_writeStream.Flush();
s_writeStream.Close();
s_writeStream.Dispose();
Status = FileTransferStatus.Finished;
}
}
}
}