Skip to content

Commit 780997c

Browse files
committed
Fix for messages that are larger than the available receive buffer. resolves issue encountered on client connect where all synced data is sent in one uncompressed "handshake" message
1 parent 83ddcc6 commit 780997c

File tree

2 files changed

+19
-7
lines changed

2 files changed

+19
-7
lines changed

MLAPI/Data/Transports/UNET/UnetTransport.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,17 @@ public NetEventType PollReceive(out uint clientId, out int channelId, ref byte[]
6868
NetworkEventType eventType = NetworkTransport.Receive(out int hostId, out int connectionId, out channelId, data, bufferSize, out receivedSize, out byte err);
6969
clientId = new NetId((byte)hostId, (ushort)connectionId, false).GetClientId();
7070
NetworkError errorType = (NetworkError)err;
71+
72+
if (errorType == NetworkError.MessageToLong)
73+
{
74+
byte[] tempBuffer = new byte[receivedSize];
75+
eventType = NetworkTransport.Receive(out hostId, out connectionId, out channelId, tempBuffer, tempBuffer.Length, out receivedSize, out err);
76+
data = tempBuffer;
77+
}
78+
errorType = (NetworkError)err;
79+
clientId = new NetId((byte)hostId, (ushort)connectionId, false).GetClientId();
80+
81+
7182
if (errorType == NetworkError.Timeout)
7283
eventType = NetworkEventType.DisconnectEvent; //In UNET. Timeouts are not disconnects. We have to translate that here.
7384
error = 0;

MLAPI/MonoBehaviours/Core/NetworkingManager.cs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
using MLAPI.Transports.UNET;
2121
using BitStream = MLAPI.Serialization.BitStream;
2222
using System.Security.Cryptography.X509Certificates;
23+
using UnityEngine.Networking;
2324

2425
namespace MLAPI
2526
{
@@ -644,13 +645,13 @@ private void Update()
644645
do
645646
{
646647
processedEvents++;
647-
uint clientId;
648-
int channelId;
649-
int receivedSize;
650-
byte error;
651-
byte[] data = messageBuffer;
652-
eventType = NetworkConfig.NetworkTransport.PollReceive(out clientId, out channelId, ref data, data.Length, out receivedSize, out error);
648+
eventType = NetworkConfig.NetworkTransport.PollReceive(out uint clientId, out int channelId, ref messageBuffer, messageBuffer.Length, out int receivedSize, out byte error);
653649

650+
if ((NetworkError)error == NetworkError.MessageToLong)
651+
{
652+
byte[] b = messageBuffer;
653+
eventType = NetworkConfig.NetworkTransport.PollReceive(out clientId, out channelId, ref b, b.Length, out receivedSize, out error);
654+
}
654655
switch (eventType)
655656
{
656657
case NetEventType.Connect:
@@ -731,7 +732,7 @@ private void Update()
731732
case NetEventType.Data:
732733
if (LogHelper.CurrentLogLevel <= LogLevel.Developer) LogHelper.LogInfo($"Incoming Data From {clientId} : {receivedSize} bytes");
733734

734-
HandleIncomingData(clientId, data, channelId, receivedSize);
735+
HandleIncomingData(clientId, messageBuffer, channelId, receivedSize);
735736
break;
736737
case NetEventType.Disconnect:
737738
NetworkProfiler.StartEvent(TickType.Receive, 0, "NONE", "TRANSPORT_DISCONNECT");

0 commit comments

Comments
 (0)