Server-side file transfer UI, server notifies the recipient of a file transfer if the transfer is cancelled, fixed TextGetter not working on wrapped GUITextBlocks

This commit is contained in:
Regalis
2017-03-10 19:16:17 +02:00
parent 4f589603d1
commit a1342fdc45
4 changed files with 81 additions and 5 deletions

View File

@@ -266,8 +266,11 @@ namespace Barotrauma.Networking
case (byte)FileTransferMessageType.Cancel:
byte sequenceChannel = inc.ReadByte();
var matchingTransfer = activeTransfers.Find(t => t.Connection == inc.SenderConnection && t.SequenceChannel == sequenceChannel);
if (matchingTransfer != null) StopTransfer(matchingTransfer);
if (matchingTransfer != null)
{
new GUIMessageBox("File transfer cancelled", "The server has cancelled the transfer of the file \"" + matchingTransfer.FileName + "\".");
StopTransfer(matchingTransfer);
}
break;
}
}

View File

@@ -102,6 +102,10 @@ namespace Barotrauma.Networking
const int MaxTransferCountPerRecipient = 5;
public static TimeSpan MaxTransferDuration = new TimeSpan(0, 2, 0);
public delegate void FileTransferDelegate(FileTransferOut fileStreamReceiver);
public FileTransferDelegate OnStarted;
public FileTransferDelegate OnEnded;
private List<FileTransferOut> activeTransfers;
@@ -156,6 +160,8 @@ namespace Barotrauma.Networking
DebugConsole.ThrowError("Failed to initiate file transfer", e);
}
OnStarted(transfer);
return transfer;
}
@@ -163,6 +169,18 @@ namespace Barotrauma.Networking
{
activeTransfers.RemoveAll(t => t.Connection.Status != NetConnectionStatus.Connected);
var endedTransfers = activeTransfers.FindAll(t =>
t.Connection.Status != NetConnectionStatus.Connected ||
t.Status == FileTransferStatus.Finished ||
t.Status == FileTransferStatus.Canceled ||
t.Status == FileTransferStatus.Error);
foreach (FileTransferOut transfer in endedTransfers)
{
activeTransfers.Remove(transfer);
OnEnded(transfer);
}
foreach (FileTransferOut transfer in activeTransfers)
{
transfer.WaitTimer -= deltaTime;
@@ -223,14 +241,16 @@ namespace Barotrauma.Networking
transfer.Status = FileTransferStatus.Finished;
}
}
activeTransfers.RemoveAll(t => t.Status == FileTransferStatus.Finished);
}
public void CancelTransfer(FileTransferOut transfer)
{
transfer.Status = FileTransferStatus.Canceled;
activeTransfers.Remove(transfer);
OnEnded(transfer);
GameMain.Server.SendCancelTransferMsg(transfer);
}
public void ReadFileRequest(NetIncomingMessage inc)