From daf1e2bfd89be37747cd1d028ead05b2002ac101 Mon Sep 17 00:00:00 2001 From: Regalis Date: Tue, 20 Oct 2015 22:28:27 +0300 Subject: [PATCH] ReliableMessages for all reliable networkevents, netstats fix, own character is not networkplayer --- Subsurface/Source/Networking/GameClient.cs | 32 +++++++++++++++------ Subsurface/Source/Networking/GameServer.cs | 3 +- Subsurface/Source/Networking/NetStats.cs | 16 +++++++---- Subsurface/Source/Screens/NetLobbyScreen.cs | 1 + 4 files changed, 35 insertions(+), 17 deletions(-) diff --git a/Subsurface/Source/Networking/GameClient.cs b/Subsurface/Source/Networking/GameClient.cs index e282a0878..a7120cbaf 100644 --- a/Subsurface/Source/Networking/GameClient.cs +++ b/Subsurface/Source/Networking/GameClient.cs @@ -353,15 +353,29 @@ namespace Barotrauma.Networking foreach (NetworkEvent networkEvent in NetworkEvent.events) { - NetOutgoingMessage message = client.CreateMessage(); - message.Write((byte)PacketTypes.NetworkEvent); - - - if (networkEvent.FillData(message)) + if (networkEvent.IsImportant) { - client.SendMessage(message, - (networkEvent.IsImportant) ? NetDeliveryMethod.ReliableUnordered : NetDeliveryMethod.Unreliable); + ReliableMessage reliableMessage = reliableChannel.CreateMessage(); + reliableMessage.InnerMessage.Write((byte)PacketTypes.NetworkEvent); + + if (networkEvent.FillData(reliableMessage.InnerMessage)) + { + reliableChannel.SendMessage(reliableMessage, client.ServerConnection); + } } + else + { + NetOutgoingMessage message = client.CreateMessage(); + message.Write((byte)PacketTypes.NetworkEvent); + + + if (networkEvent.FillData(message)) + { + client.SendMessage(message, NetDeliveryMethod.Unreliable); + } + } + + } NetworkEvent.events.Clear(); @@ -665,8 +679,8 @@ namespace Barotrauma.Networking } Character character = (closestWaypoint == null) ? - new Character(ch, position, true) : - new Character(ch, closestWaypoint, true); + new Character(ch, position, !isMyCharacter) : + new Character(ch, closestWaypoint, !isMyCharacter); character.ID = ID; character.Inventory.ID = inventoryID; diff --git a/Subsurface/Source/Networking/GameServer.cs b/Subsurface/Source/Networking/GameServer.cs index e049978d0..71d779827 100644 --- a/Subsurface/Source/Networking/GameServer.cs +++ b/Subsurface/Source/Networking/GameServer.cs @@ -661,8 +661,7 @@ namespace Barotrauma.Networking if (server.ConnectionsCount>0) { - server.SendMessage(message, recipientConnections, - (networkEvent.IsImportant) ? NetDeliveryMethod.Unreliable : NetDeliveryMethod.ReliableUnordered, 0); + server.SendMessage(message, recipientConnections, NetDeliveryMethod.Unreliable, 0); } } } diff --git a/Subsurface/Source/Networking/NetStats.cs b/Subsurface/Source/Networking/NetStats.cs index 371d75d2a..542543e72 100644 --- a/Subsurface/Source/Networking/NetStats.cs +++ b/Subsurface/Source/Networking/NetStats.cs @@ -21,7 +21,7 @@ namespace Barotrauma.Networking private float[] totalValue; private float[] lastValue; - const float UpdateInterval = 1.0f; + const float UpdateInterval = 0.1f; float updateTimer; public NetStats() @@ -54,11 +54,11 @@ namespace Barotrauma.Networking for (int i = 0; i<3; i++) { - graphs[i].Update(totalValue[i] * 10.0f); + graphs[i].Update(totalValue[i] / UpdateInterval); totalValue[i] = 0.0f; } - updateTimer = UpdateInterval/10.0f; + updateTimer = UpdateInterval; } public void Draw(SpriteBatch spriteBatch, Rectangle rect) @@ -71,10 +71,14 @@ namespace Barotrauma.Networking graphs[(int)NetStatType.ResentMessages].Draw(spriteBatch, rect, null, 0.0f, Color.Red); - spriteBatch.DrawString(GUI.SmallFont, "Peak received: "+graphs[(int)NetStatType.ReceivedBytes].LargestValue()+" bytes/s", + spriteBatch.DrawString(GUI.SmallFont, + "Peak received: "+graphs[(int)NetStatType.ReceivedBytes].LargestValue()+" bytes/s " + + "Avg received: " + graphs[(int)NetStatType.ReceivedBytes].LargestValue()/Graph.ArraySize + " bytes/s", new Vector2(rect.X + 10, rect.Y+10), Color.Cyan); - spriteBatch.DrawString(GUI.SmallFont, "Peak sent: " + graphs[(int)NetStatType.SentBytes].LargestValue() + " bytes/s", + + spriteBatch.DrawString(GUI.SmallFont, "Peak sent: " + graphs[(int)NetStatType.SentBytes].LargestValue() + " bytes/s " + + "Avg sent: " + graphs[(int)NetStatType.SentBytes].LargestValue()/Graph.ArraySize + " bytes/s", new Vector2(rect.X + 10, rect.Y + 30), Color.Orange); spriteBatch.DrawString(GUI.SmallFont, "Peak resent: " + graphs[(int)NetStatType.ResentMessages].LargestValue() + " messages/s", @@ -84,7 +88,7 @@ namespace Barotrauma.Networking class Graph { - const int ArraySize = 100; + public const int ArraySize = 100; private float[] values; diff --git a/Subsurface/Source/Screens/NetLobbyScreen.cs b/Subsurface/Source/Screens/NetLobbyScreen.cs index 9340b3942..4e1cd1ae0 100644 --- a/Subsurface/Source/Screens/NetLobbyScreen.cs +++ b/Subsurface/Source/Screens/NetLobbyScreen.cs @@ -267,6 +267,7 @@ namespace Barotrauma modeList.Enabled = GameMain.Server != null; seedBox.Enabled = GameMain.Server != null; serverMessage.Enabled = GameMain.Server != null; + autoRestartBox.Enabled = GameMain.Server != null; ServerName = (GameMain.Server==null) ? "Server" : GameMain.Server.Name; modeList.OnSelected += SelectMode;