NetworkEvents can be sent using Lidgren's reliable delivery method

This commit is contained in:
Regalis11
2016-01-31 18:09:24 +02:00
parent 7f78582df7
commit 91a0033025
5 changed files with 39 additions and 23 deletions
Binary file not shown.
+5 -2
View File
@@ -373,7 +373,7 @@ namespace Barotrauma.Networking
} }
} }
var message = ComposeNetworkEventMessage(true); var message = ComposeNetworkEventMessage(NetworkEventDeliveryMethod.ReliableChannel);
if (message != null) if (message != null)
{ {
ReliableMessage reliableMessage = reliableChannel.CreateMessage(); ReliableMessage reliableMessage = reliableChannel.CreateMessage();
@@ -383,9 +383,12 @@ namespace Barotrauma.Networking
reliableChannel.SendMessage(reliableMessage, client.ServerConnection); reliableChannel.SendMessage(reliableMessage, client.ServerConnection);
} }
message = ComposeNetworkEventMessage(false); message = ComposeNetworkEventMessage(NetworkEventDeliveryMethod.Unreliable);
if (message != null) client.SendMessage(message, NetDeliveryMethod.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) //foreach (NetworkEvent networkEvent in NetworkEvent.Events)
//{ //{
// if (networkEvent.IsImportant) // if (networkEvent.IsImportant)
+8 -2
View File
@@ -632,7 +632,7 @@ namespace Barotrauma.Networking
foreach (Client c in recipients) foreach (Client c in recipients)
{ {
var message = ComposeNetworkEventMessage(true, c.Connection); var message = ComposeNetworkEventMessage(NetworkEventDeliveryMethod.ReliableChannel, c.Connection);
if (message != null) if (message != null)
{ {
ReliableMessage reliableMessage = c.ReliableChannel.CreateMessage(); ReliableMessage reliableMessage = c.ReliableChannel.CreateMessage();
@@ -642,7 +642,13 @@ namespace Barotrauma.Networking
c.ReliableChannel.SendMessage(reliableMessage, c.Connection); 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) if (message != null)
{ {
server.SendMessage(message, c.Connection, NetDeliveryMethod.Unreliable, 0); server.SendMessage(message, c.Connection, NetDeliveryMethod.Unreliable, 0);
+23 -16
View File
@@ -4,6 +4,13 @@ using System;
namespace Barotrauma.Networking namespace Barotrauma.Networking
{ {
enum NetworkEventDeliveryMethod
{
Unreliable = 0,
ReliableChannel = 1,
ReliableLindgren = 2
}
enum NetworkEventType enum NetworkEventType
{ {
EntityUpdate = 0, EntityUpdate = 0,
@@ -28,27 +35,27 @@ namespace Barotrauma.Networking
{ {
public static List<NetworkEvent> Events = new List<NetworkEvent>(); public static List<NetworkEvent> Events = new List<NetworkEvent>();
private static bool[] isImportant; private static NetworkEventDeliveryMethod[] deliveryMethod;
private static bool[] overridePrevious; private static bool[] overridePrevious;
static NetworkEvent() static NetworkEvent()
{ {
isImportant = new bool[Enum.GetNames(typeof(NetworkEventType)).Length]; deliveryMethod = new NetworkEventDeliveryMethod[Enum.GetNames(typeof(NetworkEventType)).Length];
isImportant[(int)NetworkEventType.ImportantEntityUpdate] = true; deliveryMethod[(int)NetworkEventType.ImportantEntityUpdate] = NetworkEventDeliveryMethod.ReliableChannel;
isImportant[(int)NetworkEventType.ImportantComponentUpdate] = true; deliveryMethod[(int)NetworkEventType.ImportantComponentUpdate] = NetworkEventDeliveryMethod.ReliableChannel;
isImportant[(int)NetworkEventType.KillCharacter] = true; deliveryMethod[(int)NetworkEventType.KillCharacter] = NetworkEventDeliveryMethod.ReliableLindgren;
isImportant[(int)NetworkEventType.SelectCharacter] = true; deliveryMethod[(int)NetworkEventType.SelectCharacter] = NetworkEventDeliveryMethod.ReliableChannel;
isImportant[(int)NetworkEventType.ImportantComponentUpdate] = true; deliveryMethod[(int)NetworkEventType.ImportantComponentUpdate] = NetworkEventDeliveryMethod.ReliableChannel;
isImportant[(int)NetworkEventType.PickItem] = true; deliveryMethod[(int)NetworkEventType.PickItem] = NetworkEventDeliveryMethod.ReliableChannel;
isImportant[(int)NetworkEventType.DropItem] = true; deliveryMethod[(int)NetworkEventType.DropItem] = NetworkEventDeliveryMethod.ReliableChannel;
isImportant[(int)NetworkEventType.InventoryUpdate] = true; deliveryMethod[(int)NetworkEventType.InventoryUpdate] = NetworkEventDeliveryMethod.ReliableChannel;
isImportant[(int)NetworkEventType.ItemFixed] = true; deliveryMethod[(int)NetworkEventType.ItemFixed] = NetworkEventDeliveryMethod.ReliableLindgren;
isImportant[(int)NetworkEventType.UpdateProperty] = true; deliveryMethod[(int)NetworkEventType.UpdateProperty] = NetworkEventDeliveryMethod.ReliableChannel;
isImportant[(int)NetworkEventType.WallDamage] = true; deliveryMethod[(int)NetworkEventType.WallDamage] = NetworkEventDeliveryMethod.ReliableChannel;
overridePrevious = new bool[isImportant.Length]; overridePrevious = new bool[deliveryMethod.Length];
for (int i = 0; i < overridePrevious.Length; i++ ) for (int i = 0; i < overridePrevious.Length; i++ )
{ {
overridePrevious[i] = true; overridePrevious[i] = true;
@@ -82,9 +89,9 @@ namespace Barotrauma.Networking
get { return isClientEvent; } get { return isClientEvent; }
} }
public bool IsImportant public NetworkEventDeliveryMethod DeliveryMethod
{ {
get { return isImportant[(int)eventType]; } get { return deliveryMethod[(int)eventType]; }
} }
public NetworkEventType Type public NetworkEventType Type
@@ -126,11 +126,11 @@ namespace Barotrauma.Networking
Voting = new Voting(); Voting = new Voting();
} }
protected NetOutgoingMessage ComposeNetworkEventMessage(bool isImportant, NetConnection excludedConnection = null) protected NetOutgoingMessage ComposeNetworkEventMessage(NetworkEventDeliveryMethod deliveryMethod, NetConnection excludedConnection = null)
{ {
if (netPeer == null) return 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; if (events.Count == 0) return null;
List<byte[]> msgBytes = new List<byte[]>(); List<byte[]> msgBytes = new List<byte[]>();