diff options
author | chai <215380520@qq.com> | 2023-10-17 17:33:49 +0800 |
---|---|---|
committer | chai <215380520@qq.com> | 2023-10-17 17:33:49 +0800 |
commit | 77e165d97e7077ca7f1f761cc09b329a992efe72 (patch) | |
tree | 8c11dfe6f4e70872a652c54fb25f112e6f12f6bc | |
parent | a43adafc6449bd611106a458d032b2442b29247d (diff) |
*misc
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: |