@@ -8,6 +8,8 @@ namespace MLAPI.Transports.UNET
88 [ Serializable ]
99 public class UnetTransport : IUDPTransport
1010 {
11+ private WeakReference temporaryBufferReference ;
12+
1113 public ChannelType InternalChannel => ChannelType . ReliableFragmentedSequenced ;
1214 public uint ServerClientId => new NetId ( 0 , 0 , true ) . GetClientId ( ) ;
1315 public int serverConnectionId ;
@@ -68,6 +70,27 @@ public NetEventType PollReceive(out uint clientId, out int channelId, ref byte[]
6870 NetworkEventType eventType = NetworkTransport . Receive ( out int hostId , out int connectionId , out channelId , data , bufferSize , out receivedSize , out byte err ) ;
6971 clientId = new NetId ( ( byte ) hostId , ( ushort ) connectionId , false ) . GetClientId ( ) ;
7072 NetworkError errorType = ( NetworkError ) err ;
73+
74+ if ( errorType == NetworkError . MessageToLong )
75+ {
76+ byte [ ] tempBuffer ;
77+ if ( temporaryBufferReference != null && temporaryBufferReference . IsAlive && ( ( byte [ ] ) temporaryBufferReference . Target ) . Length >= receivedSize )
78+ {
79+ tempBuffer = ( byte [ ] ) temporaryBufferReference . Target ;
80+ }
81+ else
82+ {
83+ tempBuffer = new byte [ receivedSize ] ;
84+ temporaryBufferReference = new WeakReference ( tempBuffer ) ;
85+ }
86+
87+ eventType = NetworkTransport . Receive ( out hostId , out connectionId , out channelId , tempBuffer , tempBuffer . Length , out receivedSize , out err ) ;
88+ data = tempBuffer ;
89+ }
90+ errorType = ( NetworkError ) err ;
91+ clientId = new NetId ( ( byte ) hostId , ( ushort ) connectionId , false ) . GetClientId ( ) ;
92+
93+
7194 if ( errorType == NetworkError . Timeout )
7295 eventType = NetworkEventType . DisconnectEvent ; //In UNET. Timeouts are not disconnects. We have to translate that here.
7396 error = 0 ;
0 commit comments