Browse Source

Up to date with NX repo, 5c39695

Matthew Coburn 6 years ago
parent
commit
fb7aa8a666
4 changed files with 42 additions and 17 deletions
  1. 1 1
      ENet-CSharp.nuspec
  2. 2 0
      README.md
  3. 9 8
      Source/Managed/ENet.cs
  4. 30 8
      Source/Native/enet.h

+ 1 - 1
ENet-CSharp.nuspec

@@ -2,7 +2,7 @@
 <package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
 <package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
   <metadata>
   <metadata>
     <id>ENet-CSharp</id>
     <id>ENet-CSharp</id>
-    <version>2.2.8</version>
+    <version>2.2.9</version>
     <title>ENet-CSharp</title>
     <title>ENet-CSharp</title>
     <authors>Stanislav Denisov</authors>
     <authors>Stanislav Denisov</authors>
     <owners>nxrighthere</owners>
     <owners>nxrighthere</owners>

+ 2 - 0
README.md

@@ -237,6 +237,8 @@ Definitions of a flags for `Peer.Send()` function:
 
 
 `PacketFlags.UnreliableFragmented` a packet will be unreliably fragmented if it exceeds the MTU. By default packets larger than MTU are fragmented reliably.
 `PacketFlags.UnreliableFragmented` a packet will be unreliably fragmented if it exceeds the MTU. By default packets larger than MTU are fragmented reliably.
 
 
+`PacketFlags.Instant` a packet will not be bundled with other packets at a next service iteration and sent instantly instead. This delivery type trades multiplexing efficiency in favor of latency. The same packet can't be used for multiple `Peer.Send()` calls.
+
 #### EventType
 #### EventType
 Definitions of event types for `Event.Type` property:
 Definitions of event types for `Event.Type` property:
 
 

+ 9 - 8
Source/Managed/ENet.cs

@@ -35,7 +35,8 @@ namespace ENet {
 		Reliable = 1 << 0,
 		Reliable = 1 << 0,
 		Unsequenced = 1 << 1,
 		Unsequenced = 1 << 1,
 		NoAllocate = 1 << 2,
 		NoAllocate = 1 << 2,
-		UnreliableFragmented = 1 << 3
+		UnreliableFragmented = 1 << 3,
+		Instant = 1 << 4
 	}
 	}
 
 
 	public enum EventType {
 	public enum EventType {
@@ -61,14 +62,14 @@ namespace ENet {
 	}
 	}
 
 
 	[StructLayout(LayoutKind.Sequential)]
 	[StructLayout(LayoutKind.Sequential)]
-	public struct ENetAddress {
+	internal struct ENetAddress {
 		[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
 		[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
 		public byte[] ip;
 		public byte[] ip;
 		public ushort port;
 		public ushort port;
 	}
 	}
 
 
 	[StructLayout(LayoutKind.Sequential)]
 	[StructLayout(LayoutKind.Sequential)]
-	public struct ENetEvent {
+	internal struct ENetEvent {
 		public EventType type;
 		public EventType type;
 		public IntPtr peer;
 		public IntPtr peer;
 		public byte channelID;
 		public byte channelID;
@@ -77,7 +78,7 @@ namespace ENet {
 	}
 	}
 
 
 	[StructLayout(LayoutKind.Sequential)]
 	[StructLayout(LayoutKind.Sequential)]
-	public struct ENetCallbacks {
+	internal struct ENetCallbacks {
 		public AllocCallback malloc;
 		public AllocCallback malloc;
 		public FreeCallback free;
 		public FreeCallback free;
 		public NoMemoryCallback noMemory;
 		public NoMemoryCallback noMemory;
@@ -529,7 +530,7 @@ namespace ENet {
 			CheckCreated();
 			CheckCreated();
 
 
 			packet.CheckCreated();
 			packet.CheckCreated();
-			Native.enet_host_broadcast_excluding(nativeHost, channelID, packet.NativeData, excludedPeer.NativeData);
+			Native.enet_host_broadcast_exclude(nativeHost, channelID, packet.NativeData, excludedPeer.NativeData);
 			packet.NativeData = IntPtr.Zero;
 			packet.NativeData = IntPtr.Zero;
 		}
 		}
 
 
@@ -873,7 +874,7 @@ namespace ENet {
 		public const uint timeoutLimit = 32;
 		public const uint timeoutLimit = 32;
 		public const uint timeoutMinimum = 5000;
 		public const uint timeoutMinimum = 5000;
 		public const uint timeoutMaximum = 30000;
 		public const uint timeoutMaximum = 30000;
-		public const uint version = (2 << 16) | (2 << 8) | (9);
+		public const uint version = (2 << 16) | (3 << 8) | (0);
 
 
 		public static bool Initialize() {
 		public static bool Initialize() {
 			return Native.enet_initialize() == 0;
 			return Native.enet_initialize() == 0;
@@ -966,7 +967,7 @@ namespace ENet {
 		internal static extern void enet_host_broadcast(IntPtr host, byte channelID, IntPtr packet);
 		internal static extern void enet_host_broadcast(IntPtr host, byte channelID, IntPtr packet);
 
 
 		[DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)]
 		[DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)]
-		internal static extern void enet_host_broadcast_excluding(IntPtr host, byte channelID, IntPtr packet, IntPtr excludedPeer);
+		internal static extern void enet_host_broadcast_exclude(IntPtr host, byte channelID, IntPtr packet, IntPtr excludedPeer);
 
 
 		[DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)]
 		[DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)]
 		internal static extern void enet_host_broadcast_selective(IntPtr host, byte channelID, IntPtr packet, IntPtr[] peers, IntPtr peersLength);
 		internal static extern void enet_host_broadcast_selective(IntPtr host, byte channelID, IntPtr packet, IntPtr[] peers, IntPtr peersLength);
@@ -1082,4 +1083,4 @@ namespace ENet {
 		[DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)]
 		[DllImport(nativeLibrary, CallingConvention = CallingConvention.Cdecl)]
 		internal static extern void enet_peer_reset(IntPtr peer);
 		internal static extern void enet_peer_reset(IntPtr peer);
 	}
 	}
-}
+}

+ 30 - 8
Source/Native/enet.h

@@ -30,8 +30,8 @@
 #include <time.h>
 #include <time.h>
 
 
 #define ENET_VERSION_MAJOR 2
 #define ENET_VERSION_MAJOR 2
-#define ENET_VERSION_MINOR 2
-#define ENET_VERSION_PATCH 9
+#define ENET_VERSION_MINOR 3
+#define ENET_VERSION_PATCH 0
 #define ENET_VERSION_CREATE(major, minor, patch) (((major) << 16) | ((minor) << 8) | (patch))
 #define ENET_VERSION_CREATE(major, minor, patch) (((major) << 16) | ((minor) << 8) | (patch))
 #define ENET_VERSION_GET_MAJOR(version) (((version) >> 16) & 0xFF)
 #define ENET_VERSION_GET_MAJOR(version) (((version) >> 16) & 0xFF)
 #define ENET_VERSION_GET_MINOR(version) (((version) >> 8) & 0xFF)
 #define ENET_VERSION_GET_MINOR(version) (((version) >> 8) & 0xFF)
@@ -470,6 +470,7 @@ extern "C" {
 		ENET_PACKET_FLAG_UNSEQUENCED           = (1 << 1),
 		ENET_PACKET_FLAG_UNSEQUENCED           = (1 << 1),
 		ENET_PACKET_FLAG_NO_ALLOCATE           = (1 << 2),
 		ENET_PACKET_FLAG_NO_ALLOCATE           = (1 << 2),
 		ENET_PACKET_FLAG_UNRELIABLE_FRAGMENTED = (1 << 3),
 		ENET_PACKET_FLAG_UNRELIABLE_FRAGMENTED = (1 << 3),
+		ENET_PACKET_FLAG_INSTANT               = (1 << 4),
 		ENET_PACKET_FLAG_SENT                  = (1 << 8)
 		ENET_PACKET_FLAG_SENT                  = (1 << 8)
 	} ENetPacketFlag;
 	} ENetPacketFlag;
 
 
@@ -739,7 +740,7 @@ extern "C" {
 	ENET_API int enet_host_service(ENetHost*, ENetEvent*, enet_uint32);
 	ENET_API int enet_host_service(ENetHost*, ENetEvent*, enet_uint32);
 	ENET_API void enet_host_flush(ENetHost*);
 	ENET_API void enet_host_flush(ENetHost*);
 	ENET_API void enet_host_broadcast(ENetHost*, enet_uint8, ENetPacket*);
 	ENET_API void enet_host_broadcast(ENetHost*, enet_uint8, ENetPacket*);
-	ENET_API void enet_host_broadcast_excluding(ENetHost*, enet_uint8, ENetPacket*, ENetPeer*);
+	ENET_API void enet_host_broadcast_exclude(ENetHost*, enet_uint8, ENetPacket*, ENetPeer*);
 	ENET_API void enet_host_broadcast_selective(ENetHost*, enet_uint8, ENetPacket*, ENetPeer**, size_t);
 	ENET_API void enet_host_broadcast_selective(ENetHost*, enet_uint8, ENetPacket*, ENetPeer**, size_t);
 	ENET_API void enet_host_channel_limit(ENetHost*, size_t);
 	ENET_API void enet_host_channel_limit(ENetHost*, size_t);
 	ENET_API void enet_host_bandwidth_limit(ENetHost*, enet_uint32, enet_uint32);
 	ENET_API void enet_host_bandwidth_limit(ENetHost*, enet_uint32, enet_uint32);
@@ -1150,9 +1151,9 @@ extern "C" {
 	}
 	}
 
 
 	size_t enet_string_copy(char* destination, const char* source, size_t length) {
 	size_t enet_string_copy(char* destination, const char* source, size_t length) {
-		register char *d = destination;
-		register const char *s = source;
-		register size_t n = length;
+		char *d = destination;
+		const char *s = source;
+		size_t n = length;
 
 
 		if (n != 0 && --n != 0) {
 		if (n != 0 && --n != 0) {
 			do {
 			do {
@@ -3251,6 +3252,9 @@ extern "C" {
 		if (enet_peer_queue_outgoing_command(peer, &command, packet, 0, packet->dataLength) == NULL)
 		if (enet_peer_queue_outgoing_command(peer, &command, packet, 0, packet->dataLength) == NULL)
 			return -1;
 			return -1;
 
 
+		if (packet->flags & ENET_PACKET_FLAG_INSTANT)
+			enet_host_flush(peer->host);
+
 		return 0;
 		return 0;
 	}
 	}
 
 
@@ -4103,6 +4107,9 @@ extern "C" {
 	void enet_host_broadcast(ENetHost* host, enet_uint8 channelID, ENetPacket* packet) {
 	void enet_host_broadcast(ENetHost* host, enet_uint8 channelID, ENetPacket* packet) {
 		ENetPeer* currentPeer;
 		ENetPeer* currentPeer;
 
 
+		if (packet->flags & ENET_PACKET_FLAG_INSTANT)
+			++packet->referenceCount;
+
 		for (currentPeer = host->peers; currentPeer < &host->peers[host->peerCount]; ++currentPeer) {
 		for (currentPeer = host->peers; currentPeer < &host->peers[host->peerCount]; ++currentPeer) {
 			if (currentPeer->state != ENET_PEER_STATE_CONNECTED)
 			if (currentPeer->state != ENET_PEER_STATE_CONNECTED)
 				continue;
 				continue;
@@ -4110,13 +4117,19 @@ extern "C" {
 			enet_peer_send(currentPeer, channelID, packet);
 			enet_peer_send(currentPeer, channelID, packet);
 		}
 		}
 
 
+		if (packet->flags & ENET_PACKET_FLAG_INSTANT)
+			--packet->referenceCount;
+
 		if (packet->referenceCount == 0)
 		if (packet->referenceCount == 0)
 			enet_packet_destroy(packet);
 			enet_packet_destroy(packet);
 	}
 	}
 
 
-	void enet_host_broadcast_excluding(ENetHost* host, enet_uint8 channelID, ENetPacket* packet, ENetPeer* excludedPeer) {
+	void enet_host_broadcast_exclude(ENetHost* host, enet_uint8 channelID, ENetPacket* packet, ENetPeer* excludedPeer) {
 		ENetPeer* currentPeer;
 		ENetPeer* currentPeer;
 
 
+		if (packet->flags & ENET_PACKET_FLAG_INSTANT)
+			++packet->referenceCount;
+
 		for (currentPeer = host->peers; currentPeer < &host->peers[host->peerCount]; ++currentPeer) {
 		for (currentPeer = host->peers; currentPeer < &host->peers[host->peerCount]; ++currentPeer) {
 			if (currentPeer->state != ENET_PEER_STATE_CONNECTED || currentPeer == excludedPeer)
 			if (currentPeer->state != ENET_PEER_STATE_CONNECTED || currentPeer == excludedPeer)
 				continue;
 				continue;
@@ -4124,8 +4137,11 @@ extern "C" {
 			enet_peer_send(currentPeer, channelID, packet);
 			enet_peer_send(currentPeer, channelID, packet);
 		}
 		}
 
 
+		if (packet->flags & ENET_PACKET_FLAG_INSTANT)
+			--packet->referenceCount;
+
 		if (packet->referenceCount == 0)
 		if (packet->referenceCount == 0)
-			enet_packet_destroy(packet);		
+			enet_packet_destroy(packet);
 	}
 	}
 
 
 	void enet_host_broadcast_selective(ENetHost* host, enet_uint8 channelID, ENetPacket* packet, ENetPeer** peers, size_t length) {
 	void enet_host_broadcast_selective(ENetHost* host, enet_uint8 channelID, ENetPacket* packet, ENetPeer** peers, size_t length) {
@@ -4135,6 +4151,9 @@ extern "C" {
 		if (host == NULL)
 		if (host == NULL)
 			return;
 			return;
 
 
+		if (packet->flags & ENET_PACKET_FLAG_INSTANT)
+			++packet->referenceCount;
+
 		for (i = 0; i < length; i++) {
 		for (i = 0; i < length; i++) {
 			currentPeer = peers[i];
 			currentPeer = peers[i];
 
 
@@ -4144,6 +4163,9 @@ extern "C" {
 			enet_peer_send(currentPeer, channelID, packet);
 			enet_peer_send(currentPeer, channelID, packet);
 		}
 		}
 
 
+		if (packet->flags & ENET_PACKET_FLAG_INSTANT)
+			--packet->referenceCount;
+
 		if (packet->referenceCount == 0)
 		if (packet->referenceCount == 0)
 			enet_packet_destroy(packet);
 			enet_packet_destroy(packet);
 	}
 	}