@@ -8,6 +8,8 @@ namespace MLAPI.Transports.UNET
8
8
[ Serializable ]
9
9
public class UnetTransport : IUDPTransport
10
10
{
11
+ private WeakReference temporaryBufferReference ;
12
+
11
13
public ChannelType InternalChannel => ChannelType . ReliableFragmentedSequenced ;
12
14
public uint ServerClientId => new NetId ( 0 , 0 , true ) . GetClientId ( ) ;
13
15
public int serverConnectionId ;
@@ -68,6 +70,27 @@ public NetEventType PollReceive(out uint clientId, out int channelId, ref byte[]
68
70
NetworkEventType eventType = NetworkTransport . Receive ( out int hostId , out int connectionId , out channelId , data , bufferSize , out receivedSize , out byte err ) ;
69
71
clientId = new NetId ( ( byte ) hostId , ( ushort ) connectionId , false ) . GetClientId ( ) ;
70
72
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
+
71
94
if ( errorType == NetworkError . Timeout )
72
95
eventType = NetworkEventType . DisconnectEvent ; //In UNET. Timeouts are not disconnects. We have to translate that here.
73
96
error = 0 ;
0 commit comments