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.

View File

@@ -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)

View File

@@ -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);

View File

@@ -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<NetworkEvent> Events = new List<NetworkEvent>();
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

View File

@@ -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<byte[]> msgBytes = new List<byte[]>();