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)
|
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)
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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[]>();
|
||||||
|
|||||||
Reference in New Issue
Block a user