Reliablesender exception handling, buttons crashing multiplayer, using screwdrivers/wrenches with left click, RestoreCollision exception handling, nerfed c4, UpdateLimbCollisionCategories fix

This commit is contained in:
Regalis
2015-10-23 00:10:27 +03:00
parent 51e68f0949
commit b3462b24b4
34 changed files with 256 additions and 113 deletions

View File

@@ -173,7 +173,7 @@ namespace Barotrauma.Networking
// When this is set to true, we are approved and ready to go
bool CanStart = false;
DateTime timeOut = DateTime.Now + new TimeSpan(0,0,15);
DateTime timeOut = DateTime.Now + new TimeSpan(0,0,20);
// Loop until we are approved
while (!CanStart && !connectCanceled)
@@ -247,9 +247,9 @@ namespace Barotrauma.Networking
}
break;
case NetIncomingMessageType.StatusChanged:
NetConnectionStatus connectionStatus = (NetConnectionStatus)inc.ReadByte();
Debug.WriteLine(connectionStatus);
DebugConsole.NewMessage("Connection status changed: " + client.ConnectionStatus.ToString(), Color.Orange);
NetConnectionStatus connectionStatus = (NetConnectionStatus)inc.ReadByte();
if (connectionStatus == NetConnectionStatus.Disconnected)
{
string denyMessage = inc.ReadString();
@@ -284,6 +284,9 @@ namespace Barotrauma.Networking
if (client.ConnectionStatus != NetConnectionStatus.Connected)
{
var reconnect = new GUIMessageBox("CONNECTION FAILED", "Failed to connect to server.", new string[] { "Retry", "Cancel" });
DebugConsole.NewMessage("Failed to connect to server - connection status: "+client.ConnectionStatus.ToString(), Color.Orange);
reconnect.Buttons[0].OnClicked += RetryConnection;
reconnect.Buttons[0].OnClicked += reconnect.Close;
reconnect.Buttons[1].OnClicked += SelectMainMenu;
@@ -412,7 +415,7 @@ namespace Barotrauma.Networking
case (byte)PacketTypes.StartGame:
if (gameStarted) continue;
GameMain.ShowLoading(StartGame(inc));
GameMain.ShowLoading(StartGame(inc), false);
break;
case (byte)PacketTypes.EndGame:

View File

@@ -248,6 +248,7 @@ namespace Barotrauma.Networking
{
EndButtonHit(null, null);
AutoRestartTimer = 20.0f;
UpdateNetLobby(null,null);
return;
}
}
@@ -705,7 +706,7 @@ namespace Barotrauma.Networking
return false;
}
GameMain.ShowLoading(StartGame(selectedSub));
GameMain.ShowLoading(StartGame(selectedSub), false);
return true;
}

View File

@@ -19,14 +19,23 @@ namespace Barotrauma.Networking.ReliableMessages
receiver = new ReliableReceiver(host);
}
public ReliableMessage CreateMessage(int lengthBytes = 0)
public ReliableMessage CreateMessage()
{
return sender.CreateMessage();
}
public void SendMessage(ReliableMessage message, NetConnection receiver)
{
sender.SendMessage(message, receiver);
try
{
sender.SendMessage(message, receiver);
}
catch (Exception e)
{
#if DEBUG
DebugConsole.ThrowError("Sending a reliable message failed", e);
#endif
}
}
public void HandleResendRequest(NetIncomingMessage inc)
@@ -348,27 +357,34 @@ namespace Barotrauma.Networking.ReliableMessages
return;
}
Debug.WriteLine("Received ack message: " + messageId + ", need to rerequest messages");
Debug.WriteLine("Received ack message: " + messageId + ", need to rerequest messages (last id: "+lastMessageID+")");
if (lastMessageID > ushort.MaxValue / 2 && messageId < short.MaxValue / 2)
{
for (ushort i = (ushort)Math.Min((int)lastMessageID + 1, ushort.MaxValue); i <= ushort.MaxValue; i++)
{
if (i == ushort.MaxValue && lastMessageID == ushort.MaxValue) break;
if (!missingMessages.ContainsKey(i)) missingMessages.Add(i, new MissingMessage(i));
QueueMissingMessage(i);
if (i == ushort.MaxValue) break;
}
for (ushort i = 1; i < messageId; i++)
{
if (!missingMessages.ContainsKey(i)) missingMessages.Add(i, new MissingMessage(i));
QueueMissingMessage(i);
}
}
else
{
//we already wrapped around but message hasn't, so it's an old message
if (lastMessageID < ushort.MaxValue / 2 && messageId > ushort.MaxValue / 2)
{
Debug.WriteLine("old already received message, ignore");
return;
}
for (ushort i = (ushort)Math.Min((int)lastMessageID+1, ushort.MaxValue); i <= messageId; i++)
{
if (!missingMessages.ContainsKey(i)) missingMessages.Add(i, new MissingMessage(i));
QueueMissingMessage(i);
if (i == ushort.MaxValue) break;
}
}