aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchai <215380520@qq.com>2023-10-17 17:33:49 +0800
committerchai <215380520@qq.com>2023-10-17 17:33:49 +0800
commit77e165d97e7077ca7f1f761cc09b329a992efe72 (patch)
tree8c11dfe6f4e70872a652c54fb25f112e6f12f6bc
parenta43adafc6449bd611106a458d032b2442b29247d (diff)
*misc
-rw-r--r--MultiplayerToolkit/Assets/MultiplayerToolkit/Backend/Wrap/NetServer.cs13
-rw-r--r--MultiplayerToolkit/Assets/MultiplayerToolkit/Test/TestNetObject/TestNetObjectClient.cs2
-rw-r--r--MultiplayerToolkit/Assets/MultiplayerToolkit/Test/TestNetObject/TestNetObjectHost.cs6
-rw-r--r--MultiplayerToolkit/Assets/MultiplayerToolkit/Test/TestNetObject/TestNetObjectServer.cs23
4 files changed, 32 insertions, 12 deletions
diff --git a/MultiplayerToolkit/Assets/MultiplayerToolkit/Backend/Wrap/NetServer.cs b/MultiplayerToolkit/Assets/MultiplayerToolkit/Backend/Wrap/NetServer.cs
index d8f60fc..c3366d2 100644
--- a/MultiplayerToolkit/Assets/MultiplayerToolkit/Backend/Wrap/NetServer.cs
+++ b/MultiplayerToolkit/Assets/MultiplayerToolkit/Backend/Wrap/NetServer.cs
@@ -82,6 +82,16 @@ namespace MultiplayerToolkit.Backend.Wrap
return m_UdpEndPoint.ToString() == udpEP.ToString();
}
+ public bool HasBindTcp()
+ {
+ return m_TcpClient != null;
+ }
+
+ public bool HasBindUdp()
+ {
+ return m_UdpEndPoint != null;
+ }
+
private async void ReceiveTcpAsync()
{
byte[] receiveBuffer = new byte[RECEIVE_BUFFER_SIZE];
@@ -111,6 +121,9 @@ namespace MultiplayerToolkit.Backend.Wrap
{
try
{
+ if (m_UdpEndPoint == null) // 没有绑定
+ return;
+
if (m_UdpClient != null)
{
byte[] buf = data;
diff --git a/MultiplayerToolkit/Assets/MultiplayerToolkit/Test/TestNetObject/TestNetObjectClient.cs b/MultiplayerToolkit/Assets/MultiplayerToolkit/Test/TestNetObject/TestNetObjectClient.cs
index cf3b563..b3b5f38 100644
--- a/MultiplayerToolkit/Assets/MultiplayerToolkit/Test/TestNetObject/TestNetObjectClient.cs
+++ b/MultiplayerToolkit/Assets/MultiplayerToolkit/Test/TestNetObject/TestNetObjectClient.cs
@@ -13,9 +13,7 @@ public class TestNetObjectClient : MonoBehaviour
enum EMsgID : ushort
{
NetObject = 253,
-
Hello = 51825,
-
}
private int playerId;
diff --git a/MultiplayerToolkit/Assets/MultiplayerToolkit/Test/TestNetObject/TestNetObjectHost.cs b/MultiplayerToolkit/Assets/MultiplayerToolkit/Test/TestNetObject/TestNetObjectHost.cs
index b2afec0..2e20f1a 100644
--- a/MultiplayerToolkit/Assets/MultiplayerToolkit/Test/TestNetObject/TestNetObjectHost.cs
+++ b/MultiplayerToolkit/Assets/MultiplayerToolkit/Test/TestNetObject/TestNetObjectHost.cs
@@ -18,9 +18,7 @@ public class TestNetObjectHost : MonoBehaviour
enum EMsgID : ushort
{
NetObject = 253,
-
Hello = 51825,
-
}
private int playerId;
@@ -58,9 +56,10 @@ public class TestNetObjectHost : MonoBehaviour
switch(msg)
{
- case (ushort)EMsgID.Hello:
+ case (ushort)EMsgID.Hello: // 尝试发送udp,让服务器绑定,不一定会成功,因为udp不可靠
{
playerId = id;
+
Packet echo = Packet.GetWritablePacket();
echo.WriteUshort((ushort)EMsgID.Hello);
echo.WriteInt(playerId);
@@ -77,7 +76,6 @@ public class TestNetObjectHost : MonoBehaviour
}
break;
}
-
}
void SendPacket(Packet packet, ESendOption option)
diff --git a/MultiplayerToolkit/Assets/MultiplayerToolkit/Test/TestNetObject/TestNetObjectServer.cs b/MultiplayerToolkit/Assets/MultiplayerToolkit/Test/TestNetObject/TestNetObjectServer.cs
index 388d3cd..8e0a53a 100644
--- a/MultiplayerToolkit/Assets/MultiplayerToolkit/Test/TestNetObject/TestNetObjectServer.cs
+++ b/MultiplayerToolkit/Assets/MultiplayerToolkit/Test/TestNetObject/TestNetObjectServer.cs
@@ -13,7 +13,7 @@ using UnityEditor.UI;
// 2byte (ushort) 长度,不含这2个字节
// 2byte (ushort) 消息ID
// -----------------------------------
-// 4byte (ushort) playerId
+// 4byte (int) playerId
// 内容
public static class TestNetObjectsConstant
@@ -67,13 +67,16 @@ public class TestNetObjectServer : MonoBehaviour
private void OnNewTcpClient(TcpClient client)
{
+ // Server <- Tcp连接
+ // Server -> welcom连接确认,并返回分配的playerId
+
//TestReceive(client);
Player player = new Player();
player.net.BindTcpClient(client);
player.net.onReceiveTcpData += OnRecvTcpData;
playerList.Add(player);
- // welcome
+ // welcome ,把playerId发过去
Packet hello = Packet.GetWritablePacket();
hello.WriteUshort((ushort)EMsgID.Hello);
hello.WriteInt((int)player.id);
@@ -84,7 +87,7 @@ public class TestNetObjectServer : MonoBehaviour
private void OnRecvTcpData(byte[] data, int len)
{
Packet packet = Packet.GetReadablePacket(data, 0, len);
- HandleMessage(packet, null);
+ HandleMessage(packet, ESendOption.Reliable, null);
}
private void BroadcastToAll(Packet packet, ESendOption option)
@@ -98,17 +101,16 @@ public class TestNetObjectServer : MonoBehaviour
private void OnUdpReceiveData(UdpReceiveResult result)
{
Packet packet = Packet.GetReadablePacket(result.Buffer);
- HandleMessage(packet, result);
+ HandleMessage(packet, ESendOption.Unreliable, result);
}
enum EMsgID : ushort
{
Hello = 51825,
-
NetObject = 253,
}
- private void HandleMessage(Packet packet, object state)
+ private void HandleMessage(Packet packet, ESendOption option, object state)
{
ushort len = packet.ReadUshort();
ushort msg = packet.ReadUshort();
@@ -118,6 +120,15 @@ public class TestNetObjectServer : MonoBehaviour
int id = packet.ReadInt(); // playerId
Player player = GetPlayerById(id);
+ if(option == ESendOption.Unreliable) // 尝试绑定udp endpoint
+ {
+ UdpReceiveResult result = (UdpReceiveResult)state;
+ if(player != null && player.net.IsBindWithUdp(result.RemoteEndPoint))
+ {
+ player.net.BindUdpClient(server.udpClient, result.RemoteEndPoint);
+ }
+ }
+
switch (msg)
{
case (ushort)EMsgID.Hello: