NetworkEvents can be sent using Lidgren's reliable delivery method
This commit is contained in:
Binary file not shown.
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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[]>();
|
||||
|
||||
Reference in New Issue
Block a user