@@ -57,7 +57,7 @@ public class BubbleTransport : Transport
5757
5858 [ DllImport ( "__Internal" ) ]
5959 private static extern void RegisterInviteRecieveCallback ( OnInviteRecievedDelegate InviteRecieved ) ;
60- #endregion
60+ #endregion
6161
6262 public int MinPlayers = 2 ;
6363 public int MaxReceivesPerTick = 1000 ;
@@ -75,11 +75,21 @@ public class InviteRecievedEvent : UnityEvent { }
7575 [ SerializeField ]
7676 private MatchFoundEvent inviteRecieved = new MatchFoundEvent ( ) ;
7777
78- static List < ArraySegment < Byte > > clientMessageBuffer = new List < ArraySegment < byte > > ( ) ;
78+ static List < MessageBuffer > clientMessageBuffer = new List < MessageBuffer > ( ) ;
79+ static List < MessageBuffer > serverMessageBuffer = new List < MessageBuffer > ( ) ;
80+ struct MessageBuffer
81+ {
82+ public ArraySegment < byte > data ;
83+ public int channelId ;
84+ public int connId ;
7985
80- //Done this way as structs seem to be pretty slow
81- static List < ArraySegment < Byte > > serverMessageBuffer = new List < ArraySegment < byte > > ( ) ;
82- static List < int > serverMessageBufferConnIds = new List < int > ( ) ;
86+ public MessageBuffer ( ArraySegment < byte > data , int channelId , int connId )
87+ {
88+ this . data = data ;
89+ this . channelId = channelId ;
90+ this . connId = connId ;
91+ }
92+ }
8393
8494
8595 bool available = true ;
@@ -137,7 +147,7 @@ public void FindMatch()
137147 }
138148
139149
140- #region Misc
150+ #region Misc
141151 public override bool Available ( )
142152 {
143153#if UNITY_IOS
@@ -155,11 +165,11 @@ public override void ClientConnect(string address) { }
155165 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
156166
157167 //Sizes from: https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/GameKit_Guide/Matchmaking/Matchmaking.html
158- public override int GetMaxPacketSize ( int channelId = 0 ) { return channelId == 0 ? 89088 : 1000 ; }
168+ public override int GetMaxPacketSize ( int channelId = 0 ) { return channelId == 0 ? 89088 : 1000 ; }
159169
160170 public override void Shutdown ( )
161171 {
162- if ( Available ( ) )
172+ if ( Available ( ) )
163173 {
164174 _Shutdown ( ) ;
165175 connected = false ;
@@ -180,7 +190,7 @@ static void OnInviteRecieved()
180190 NetworkManager . singleton . StopClient ( ) ;
181191 return ;
182192 }
183- else if ( instance . InviteRecievedScene != null && instance . InviteRecievedScene != SceneManager . GetActiveScene ( ) . path )
193+ else if ( instance . InviteRecievedScene != null && instance . InviteRecievedScene != SceneManager . GetActiveScene ( ) . path )
184194 {
185195 SceneManager . sceneLoaded += OnSceneLoaded ;
186196 SceneManager . LoadScene ( instance . InviteRecievedScene ) ;
@@ -196,9 +206,9 @@ static void OnSceneLoaded(Scene scene, LoadSceneMode mode)
196206 SceneManager . sceneLoaded -= OnSceneLoaded ;
197207 OnInviteRecieved ( ) ;
198208 }
199- #endregion
209+ #endregion
200210
201- #region Client
211+ #region Client
202212 public override bool ClientConnected ( )
203213 {
204214 return connected && ! Mirror . NetworkServer . active ;
@@ -210,7 +220,7 @@ public override void ClientDisconnect()
210220 _Shutdown ( ) ;
211221 }
212222
213- public override void ClientSend ( ArraySegment < byte > segment , int channelId )
223+ public override void ClientSend ( ArraySegment < byte > segment , int channelId )
214224 {
215225 if ( ! connected || segment . Count > GetMaxPacketSize ( channelId ) ) return ;
216226 if ( channelId > 1 ) { Debug . LogError ( "Only channels 0 and 1 are supported" ) ; return ; }
@@ -230,29 +240,29 @@ static void ClientDisconnectedCallback()
230240 instance . needToDisconnectFlag = true ;
231241 }
232242
233- delegate void OnClientDidDataRecievedDelegate ( IntPtr data , int offset , int count ) ;
243+ delegate void OnClientDidDataRecievedDelegate ( IntPtr data , int offset , int count , int channelId ) ;
234244 [ AOT . MonoPInvokeCallback ( typeof ( OnClientDidDataRecievedDelegate ) ) ]
235- static void OnClientDidDataRecieved ( IntPtr data , int offset , int count )
245+ static void OnClientDidDataRecieved ( IntPtr data , int offset , int count , int channelId )
236246 {
237247 if ( ! instance . connected )
238248 return ;
239249 /*
240250 We get a pointer back from the plugin containing the location of the array of bytes
241251 Data recieved is formatted like this:
242252
243- -----------------------------------------------------
244- | | |
245- | offset | Byte Array containing all data... |
246- | 1 Byte | Rest of the array |
247- | | |
248- -----------------------------------------------------
253+ ---------------------------------------------------------------
254+ | | | |
255+ | offset | channel | Byte Array containing all data... |
256+ | 1 Byte | 1 Byte | Rest of the array |
257+ | | | |
258+ ---------------------------------------------------------------
249259
250260 Objective C code splits this up into offset and count and sends it here
251261 */
252262 byte [ ] _data = new byte [ count ] ;
253263 Marshal . Copy ( data , _data , 0 , count ) ;
254264
255- clientMessageBuffer . Add ( new ArraySegment < byte > ( _data , offset , count ) ) ;
265+ clientMessageBuffer . Add ( new MessageBuffer ( new ArraySegment < byte > ( _data , offset , count ) , channelId , 0 ) ) ;
256266 }
257267
258268 delegate void OnClientStartDelegate ( ) ;
@@ -265,9 +275,9 @@ static void OnClientStartCallback()
265275 NetworkManager . singleton . StartClient ( ) ;
266276 instance . OnClientConnected ? . Invoke ( ) ;
267277 }
268- #endregion
278+ #endregion
269279
270- #region Server
280+ #region Server
271281 public override bool ServerActive ( )
272282 {
273283 return connected && Mirror . NetworkServer . active ;
@@ -300,30 +310,29 @@ static void ServerDisconnectedCallback(int connID)
300310 instance . OnServerDisconnected ? . Invoke ( connID ) ;
301311 }
302312
303- delegate void OnServerDidDataRecievedDelegate ( int connId , IntPtr data , int offset , int count ) ;
313+ delegate void OnServerDidDataRecievedDelegate ( int connId , IntPtr data , int offset , int count , int channelId ) ;
304314 [ AOT . MonoPInvokeCallback ( typeof ( OnServerDidDataRecievedDelegate ) ) ]
305- static void OnServerDidDataRecieved ( int connId , IntPtr data , int offset , int count )
315+ static void OnServerDidDataRecieved ( int connId , IntPtr data , int offset , int count , int channelId )
306316 {
307317 if ( ! instance . connected )
308318 return ;
309319 /*
310320 We get a pointer back from the plugin containing the location of the array of bytes
311321 Data recieved is formatted like this:
312-
313- -----------------------------------------------------
314- | | |
315- | offset | Byte Array containing all data... |
316- | 1 Byte | Rest of the array |
317- | | |
318- -----------------------------------------------------
322+
323+ ---------------------------------------------------------------
324+ | | | |
325+ | offset | channel | Byte Array containing all data... |
326+ | 1 Byte | 1 Byte | Rest of the array |
327+ | | | |
328+ ---------------------------------------------------------------
319329
320330 Objective C code splits this up into offset and count and sends it here
321331 */
322332 byte [ ] _data = new byte [ count ] ;
323333 Marshal . Copy ( data , _data , 0 , count ) ;
324334
325- serverMessageBuffer . Add ( new ArraySegment < byte > ( _data , offset , count ) ) ;
326- serverMessageBufferConnIds . Add ( connId ) ;
335+ clientMessageBuffer . Add ( new MessageBuffer ( new ArraySegment < byte > ( _data , offset , count ) , channelId , connId ) ) ;
327336 }
328337
329338 /// <summary>
@@ -364,7 +373,7 @@ public override void ServerStop()
364373 public override void ClientLateUpdate ( )
365374 {
366375 if ( instance != this || ! enabled ) return ;
367- if ( needToDisconnectFlag )
376+ if ( needToDisconnectFlag )
368377 {
369378 OnClientDisconnected ? . Invoke ( ) ;
370379 needToDisconnectFlag = false ;
@@ -373,7 +382,9 @@ public override void ClientLateUpdate()
373382 //This executes any messages that were recieved in the last frame
374383 for ( int i = 0 ; i < clientMessageBuffer . Count && i < MaxReceivesPerTick ; i ++ )
375384 {
376- OnClientDataReceived ? . Invoke ( clientMessageBuffer [ 0 ] , 0 ) ;
385+ //Channel set as 0 because I can't work out the channel from the message
386+ //I may want to add something that sends the channel as well later
387+ OnClientDataReceived ? . Invoke ( clientMessageBuffer [ 0 ] . data , clientMessageBuffer [ 0 ] . channelId ) ;
377388 clientMessageBuffer . RemoveAt ( 0 ) ;
378389 }
379390 }
@@ -384,15 +395,16 @@ public override void ServerLateUpdate()
384395 //This executes any messages that were recieved in the last frame
385396 for ( int i = 0 ; i < serverMessageBuffer . Count && i < MaxReceivesPerTick ; i ++ )
386397 {
387- OnServerDataReceived ? . Invoke ( serverMessageBufferConnIds [ 0 ] , serverMessageBuffer [ 0 ] , 0 ) ;
398+ //Channel set as 0 because I can't work out the channel from the message
399+ //I may want to add something that sends the channel as well later
400+ OnServerDataReceived ? . Invoke ( serverMessageBuffer [ 0 ] . connId , serverMessageBuffer [ 0 ] . data , serverMessageBuffer [ 0 ] . channelId ) ;
388401 serverMessageBuffer . RemoveAt ( 0 ) ;
389- serverMessageBufferConnIds . RemoveAt ( 0 ) ;
390402 }
391403 }
392404 private void Start ( )
393405 {
394406 //Done on start so we only accept an invite when when the scene has fully finished loading
395- if ( Available ( ) )
407+ if ( Available ( ) )
396408 _InitGameCenter ( ) ;
397409 }
398410 private void Awake ( )
0 commit comments