Skip to content

Commit 27ed35f

Browse files
authored
WIP for a few things
Trying to make it send over the channel ID as well as the data. It isn't going great, even though it should be easy
1 parent 37e476e commit 27ed35f

File tree

2 files changed

+69
-52
lines changed

2 files changed

+69
-52
lines changed

BubbleTransport/BubbleTransport.cs

Lines changed: 51 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -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()

BubbleTransport/Plugins/GCController.m

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66

77
extern UIViewController *UnityGetGLViewController();
88

9-
typedef void (*OnClientDidDataRecievedDelegate)(intptr_t data, uint32_t offset, uint32_t count);
9+
typedef void (*OnClientDidDataRecievedDelegate)(intptr_t data, uint32_t offset, uint32_t count, uint32_t ChannelId);
1010
OnClientDidDataRecievedDelegate ClientRecievedData = NULL;
11-
typedef void (*OnServerDidDataRecievedDelegate)(int connId, intptr_t data, uint32_t offset, uint32_t count);
11+
typedef void (*OnServerDidDataRecievedDelegate)(int connId, intptr_t data, uint32_t offset, uint32_t count, uint32_t ChannelId);
1212
OnServerDidDataRecievedDelegate ServerRecievedData = NULL;
1313
typedef void (*OnServerConnectedDelegate)(int connId);
1414
OnServerConnectedDelegate ServerConnected = NULL;
@@ -122,17 +122,20 @@ - (void)match:(GKMatch *)match didReceiveData:(NSData *)data fromRemotePlayer:(G
122122

123123
Byte offset;
124124
[data getBytes:&offset length:1];
125+
Byte channelId;
126+
[data getBytes:&channelId range:NSMakeRange(1,1)];
127+
NSLog(@"%d", (int)channelId);
125128

126129
Byte byteData[len-1];
127-
[data getBytes:byteData range:NSMakeRange(1,len-1)];
130+
[data getBytes:byteData range:NSMakeRange(2,len-2)];
128131
intptr_t i = byteData;
129132
if(isServer)
130133
{
131-
ServerRecievedData([self getConnID:player], i, (int)offset, (int)len-1);
134+
ServerRecievedData([self getConnID:player], i, (int)offset, (int)len-2, (int)channelId);
132135
}
133136
else
134137
{
135-
ClientRecievedData(i, (int)offset, (int)len-1);
138+
ClientRecievedData(i, (int)offset, (int)len-2, (int)channelId);
136139
}
137140
}
138141

@@ -157,23 +160,25 @@ void _Shutdown()
157160
}
158161
void SendMessageToServer(Byte data[], int offset, int count, int channel)
159162
{
160-
Byte dataoffset[(NSUInteger)count+1];
163+
Byte dataoffset[(NSUInteger)count+2];
161164
dataoffset[0] = (Byte)offset;
162-
memcpy(dataoffset+1, data, count);
163-
NSData *dataToSend = [NSData dataWithBytes:dataoffset length:count+1];
165+
dataoffset[1] = (Byte)channel;
166+
memcpy(dataoffset+2, data, count);
167+
NSData *dataToSend = [NSData dataWithBytes:dataoffset length:count+2];
164168

165169
[GCController sendDataToServer:dataToSend datamode:channel];
166170
}
167171
void SendMessageToClient(int clientId, Byte data[], int offset, int count, int channel)
168172
{
169-
Byte dataoffset[(NSUInteger)count+1];
173+
Byte dataoffset[(NSUInteger)count+2];
170174
dataoffset[0] = (Byte)offset;
171-
memcpy(dataoffset+1, data, count);
172-
NSData *dataToSend = [NSData dataWithBytes:dataoffset length:count+1];
175+
dataoffset[1] = (Byte)channel;
176+
memcpy(dataoffset+2, data, count);
177+
NSData *dataToSend = [NSData dataWithBytes:dataoffset length:count+2];
173178

174179
[GCController sendDataToPlayer:dataToSend toPlayer:clientId datamode:channel];
175180
}
176-
typedef void (*OnClientDidDataRecievedDelegate)(intptr_t data, uint32_t offset, uint32_t count);
181+
typedef void (*OnClientDidDataRecievedDelegate)(intptr_t data, uint32_t offset, uint32_t count, uint32_t ChannelId);
177182
void RegisterClientDataRecieveCallback(OnClientDidDataRecievedDelegate callback)
178183
{
179184
if(ClientRecievedData == NULL)
@@ -229,7 +234,7 @@ void RegisterOnClientDisconnectedCallback(OnClientDisconnectedDelegate callback)
229234
ClientDisconnected = callback;
230235
}
231236
}
232-
typedef void (*OnServerDidDataRecievedDelegate)(int connId, intptr_t data, uint32_t offset, uint32_t count);
237+
typedef void (*OnServerDidDataRecievedDelegate)(int connId, intptr_t data, uint32_t offset, uint32_t count, uint32_t ChannelId);
233238
void RegisterServerDataRecieveCallback(OnServerDidDataRecievedDelegate callback)
234239
{
235240
if(ServerRecievedData == NULL)

0 commit comments

Comments
 (0)