Ver código fonte

参数获取不定长字符串应该用IntPtr封送

tanghai 13 anos atrás
pai
commit
bbb8b24a1a

+ 8 - 4
CSharp/App/Modules/Robot/RobotViewModel.cs

@@ -48,10 +48,14 @@ namespace Modules.Robot
 		{
 			try
 			{
-				Peer peer = await host.ConnectAsync(
-					new Address { Host = "192.168.10.246", Port = 8901 });
-				peer.Send(1, "aaaaaaaaaaa");
-				Packet packet = await peer.ReceiveAsync();
+				using (Peer peer = await host.ConnectAsync(
+					new Address { Host = "192.168.10.246", Port = 8901 }))
+				{
+					Packet packet = await peer.ReceiveAsync();
+					Logger.Debug(packet.Length + " " + packet.Data);
+					
+					await peer.DisconnectLaterAsync();
+				}
 			}
 			catch (ENetException e)
 			{

+ 29 - 0
CSharp/ThirdParty/ENetCS/Packet.cs

@@ -65,5 +65,34 @@ namespace ENet
 				return this.packet;
 			}
 		}
+
+		public uint Length
+		{
+			get
+			{
+				if (this.packet == IntPtr.Zero)
+				{
+					return 0;
+				}
+				return this.Struct.dataLength;
+			}
+		}
+
+		public string Data
+		{
+			get
+			{
+				if (this.packet == IntPtr.Zero)
+				{
+					return "";
+				}
+				ENetPacket pkt = this.Struct;
+				if (pkt.data == IntPtr.Zero)
+				{
+					return "";
+				}
+				return Marshal.PtrToStringAuto(pkt.data, (int)pkt.dataLength);
+			}
+		}
 	}
 }

+ 2 - 2
CSharp/ThirdParty/ENetCS/Peer.cs

@@ -113,7 +113,7 @@ namespace ENet
 			return tcs.Task;
 		}
 
-		public Task<bool> DisconnectAsync(uint data)
+		public Task<bool> DisconnectAsync(uint data = 0)
 		{
 			var tcs = new TaskCompletionSource<bool>();
 			PeerEventsManager[this.peer].Disconnect += e => tcs.TrySetResult(true);
@@ -121,7 +121,7 @@ namespace ENet
 			return tcs.Task;
 		}
 
-		public Task<bool> DisconnectLaterAsync(uint data)
+		public Task<bool> DisconnectLaterAsync(uint data = 0)
 		{
 			var tcs = new TaskCompletionSource<bool>();
 			PeerEventsManager[this.peer].Disconnect += e => tcs.TrySetResult(true);

+ 1 - 2
CSharp/ThirdParty/ENetCS/Structs.cs

@@ -105,8 +105,7 @@ namespace ENet
 	{
 		public uint referenceCount;
 		public uint flags;
-		[MarshalAsAttribute(UnmanagedType.LPStr)]
-		public StringBuilder data;
+		public IntPtr data;
 		public uint dataLength;
 		public ENetPacketFreeCallback freeCallback;
 	}