From 91a00330253d52f10879b587be5ea68ce03c4bb4 Mon Sep 17 00:00:00 2001 From: Regalis11 Date: Sun, 31 Jan 2016 18:09:24 +0200 Subject: [PATCH] NetworkEvents can be sent using Lidgren's reliable delivery method --- .vs/Subsurface_Solution/v14/.suo | Bin 783360 -> 783360 bytes Subsurface/Source/Networking/GameClient.cs | 9 ++-- Subsurface/Source/Networking/GameServer.cs | 10 ++++- Subsurface/Source/Networking/NetworkEvent.cs | 39 +++++++++++------- Subsurface/Source/Networking/NetworkMember.cs | 4 +- 5 files changed, 39 insertions(+), 23 deletions(-) diff --git a/.vs/Subsurface_Solution/v14/.suo b/.vs/Subsurface_Solution/v14/.suo index fab9934e561e081f24b7a1192bb7cd92278c3b54..a395e4ba0625a7f995bac2329a7d1c7171189ed8 100644 GIT binary patch delta 6815 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 delta 8994 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 diff --git a/Subsurface/Source/Networking/GameClient.cs b/Subsurface/Source/Networking/GameClient.cs index 8b149cc8d..abfc37b62 100644 --- a/Subsurface/Source/Networking/GameClient.cs +++ b/Subsurface/Source/Networking/GameClient.cs @@ -373,7 +373,7 @@ namespace Barotrauma.Networking } } - var message = ComposeNetworkEventMessage(true); + var message = ComposeNetworkEventMessage(NetworkEventDeliveryMethod.ReliableChannel); if (message != null) { ReliableMessage reliableMessage = reliableChannel.CreateMessage(); @@ -383,9 +383,12 @@ namespace Barotrauma.Networking reliableChannel.SendMessage(reliableMessage, client.ServerConnection); } - message = ComposeNetworkEventMessage(false); + message = ComposeNetworkEventMessage(NetworkEventDeliveryMethod.Unreliable); if (message != null) client.SendMessage(message, NetDeliveryMethod.Unreliable); - + + message = ComposeNetworkEventMessage(NetworkEventDeliveryMethod.ReliableLindgren); + if (message != null) client.SendMessage(message, NetDeliveryMethod.ReliableUnordered); + //foreach (NetworkEvent networkEvent in NetworkEvent.Events) //{ // if (networkEvent.IsImportant) diff --git a/Subsurface/Source/Networking/GameServer.cs b/Subsurface/Source/Networking/GameServer.cs index 1a4f3374c..f6fdbd56c 100644 --- a/Subsurface/Source/Networking/GameServer.cs +++ b/Subsurface/Source/Networking/GameServer.cs @@ -632,7 +632,7 @@ namespace Barotrauma.Networking foreach (Client c in recipients) { - var message = ComposeNetworkEventMessage(true, c.Connection); + var message = ComposeNetworkEventMessage(NetworkEventDeliveryMethod.ReliableChannel, c.Connection); if (message != null) { ReliableMessage reliableMessage = c.ReliableChannel.CreateMessage(); @@ -642,7 +642,13 @@ namespace Barotrauma.Networking c.ReliableChannel.SendMessage(reliableMessage, c.Connection); } - message = ComposeNetworkEventMessage(false, c.Connection); + message = ComposeNetworkEventMessage(NetworkEventDeliveryMethod.ReliableLindgren, c.Connection); + if (message!=null) + { + server.SendMessage(message, c.Connection, NetDeliveryMethod.ReliableUnordered); + } + + message = ComposeNetworkEventMessage(NetworkEventDeliveryMethod.Unreliable, c.Connection); if (message != null) { server.SendMessage(message, c.Connection, NetDeliveryMethod.Unreliable, 0); diff --git a/Subsurface/Source/Networking/NetworkEvent.cs b/Subsurface/Source/Networking/NetworkEvent.cs index 17e22e8d7..c2cea2427 100644 --- a/Subsurface/Source/Networking/NetworkEvent.cs +++ b/Subsurface/Source/Networking/NetworkEvent.cs @@ -4,6 +4,13 @@ using System; namespace Barotrauma.Networking { + enum NetworkEventDeliveryMethod + { + Unreliable = 0, + ReliableChannel = 1, + ReliableLindgren = 2 + } + enum NetworkEventType { EntityUpdate = 0, @@ -28,27 +35,27 @@ namespace Barotrauma.Networking { public static List Events = new List(); - private static bool[] isImportant; + private static NetworkEventDeliveryMethod[] deliveryMethod; private static bool[] overridePrevious; static NetworkEvent() { - isImportant = new bool[Enum.GetNames(typeof(NetworkEventType)).Length]; - isImportant[(int)NetworkEventType.ImportantEntityUpdate] = true; - isImportant[(int)NetworkEventType.ImportantComponentUpdate] = true; - isImportant[(int)NetworkEventType.KillCharacter] = true; - isImportant[(int)NetworkEventType.SelectCharacter] = true; + deliveryMethod = new NetworkEventDeliveryMethod[Enum.GetNames(typeof(NetworkEventType)).Length]; + deliveryMethod[(int)NetworkEventType.ImportantEntityUpdate] = NetworkEventDeliveryMethod.ReliableChannel; + deliveryMethod[(int)NetworkEventType.ImportantComponentUpdate] = NetworkEventDeliveryMethod.ReliableChannel; + deliveryMethod[(int)NetworkEventType.KillCharacter] = NetworkEventDeliveryMethod.ReliableLindgren; + deliveryMethod[(int)NetworkEventType.SelectCharacter] = NetworkEventDeliveryMethod.ReliableChannel; - isImportant[(int)NetworkEventType.ImportantComponentUpdate] = true; - isImportant[(int)NetworkEventType.PickItem] = true; - isImportant[(int)NetworkEventType.DropItem] = true; - isImportant[(int)NetworkEventType.InventoryUpdate] = true; - isImportant[(int)NetworkEventType.ItemFixed] = true; + deliveryMethod[(int)NetworkEventType.ImportantComponentUpdate] = NetworkEventDeliveryMethod.ReliableChannel; + deliveryMethod[(int)NetworkEventType.PickItem] = NetworkEventDeliveryMethod.ReliableChannel; + deliveryMethod[(int)NetworkEventType.DropItem] = NetworkEventDeliveryMethod.ReliableChannel; + deliveryMethod[(int)NetworkEventType.InventoryUpdate] = NetworkEventDeliveryMethod.ReliableChannel; + deliveryMethod[(int)NetworkEventType.ItemFixed] = NetworkEventDeliveryMethod.ReliableLindgren; - isImportant[(int)NetworkEventType.UpdateProperty] = true; - isImportant[(int)NetworkEventType.WallDamage] = true; + deliveryMethod[(int)NetworkEventType.UpdateProperty] = NetworkEventDeliveryMethod.ReliableChannel; + deliveryMethod[(int)NetworkEventType.WallDamage] = NetworkEventDeliveryMethod.ReliableChannel; - overridePrevious = new bool[isImportant.Length]; + overridePrevious = new bool[deliveryMethod.Length]; for (int i = 0; i < overridePrevious.Length; i++ ) { overridePrevious[i] = true; @@ -82,9 +89,9 @@ namespace Barotrauma.Networking get { return isClientEvent; } } - public bool IsImportant + public NetworkEventDeliveryMethod DeliveryMethod { - get { return isImportant[(int)eventType]; } + get { return deliveryMethod[(int)eventType]; } } public NetworkEventType Type diff --git a/Subsurface/Source/Networking/NetworkMember.cs b/Subsurface/Source/Networking/NetworkMember.cs index bad6b2348..fb47c8bd2 100644 --- a/Subsurface/Source/Networking/NetworkMember.cs +++ b/Subsurface/Source/Networking/NetworkMember.cs @@ -126,11 +126,11 @@ namespace Barotrauma.Networking Voting = new Voting(); } - protected NetOutgoingMessage ComposeNetworkEventMessage(bool isImportant, NetConnection excludedConnection = null) + protected NetOutgoingMessage ComposeNetworkEventMessage(NetworkEventDeliveryMethod deliveryMethod, NetConnection excludedConnection = null) { if (netPeer == null) return null; - var events = NetworkEvent.Events.FindAll(e => e.IsImportant == isImportant); + var events = NetworkEvent.Events.FindAll(e => e.DeliveryMethod == deliveryMethod); if (events.Count == 0) return null; List msgBytes = new List();