diff --git a/Assets/Scripts/EOSVoiceChat.cs b/Assets/Scripts/EOSVoiceChat.cs index 2fc8341..92be203 100644 --- a/Assets/Scripts/EOSVoiceChat.cs +++ b/Assets/Scripts/EOSVoiceChat.cs @@ -45,6 +45,8 @@ public class EOSVoiceChat public void ConnectToChat(string chatLobbyName, Action onCompleted = null, uint maxChatPlayers = DefaultMaxChatPlayers) { DisconnectChat(); // Leave any currently connected chat lobby + + var connectArgs = new ChatConnectArgs(chatLobbyName, onCompleted, maxChatPlayers); lobbyInterface.CreateLobbySearch(new CreateLobbySearchOptions { MaxResults = 1 }, out var searchHandle); searchHandle.SetLobbyId(new LobbySearchSetLobbyIdOptions { LobbyId = chatLobbyName }); @@ -66,8 +68,8 @@ public class EOSVoiceChat LobbyDetailsHandle = lobbyDetails, PresenceEnabled = false, }, - null, - data => HandleLobbyJoined(data, onCompleted) + connectArgs, + HandleLobbyJoined ); break; default: @@ -86,51 +88,53 @@ public class EOSVoiceChat BucketId = Application.productName, // TODO: do we need anything more specific than this? EnableRTCRoom = true, }, - chatLobbyName, - data => HandleLobbyCreated(data, onCompleted) + connectArgs, + HandleLobbyCreated ); break; } }); } - private void HandleLobbyCreated(CreateLobbyCallbackInfo data, Action onCompleted) + private void HandleLobbyCreated(CreateLobbyCallbackInfo data) { + var connectArgs = (ChatConnectArgs)data.ClientData; switch (data.ResultCode) { case Result.Success: connectedLobbyId = data.LobbyId; Debug.Log($"Chat lobby creation successful, lobby ID = {connectedLobbyId}"); - onCompleted?.Invoke(true); + connectArgs.onCompleted?.Invoke(true); break; case Result.LobbyLobbyAlreadyExists: // This can happen if two clients try to create the same lobby at the same time, a classic race condition. // Try to join the other client's newly created chat lobby instead. connectedLobbyId = null; Debug.Log("Chat lobby already exists, attempting to join it..."); - ConnectToChat((string)data.ClientData, onCompleted); + ConnectToChat(connectArgs.chatLobbyName, connectArgs.onCompleted, connectArgs.maxChatPlayers); break; default: connectedLobbyId = null; Debug.LogError($"Chat lobby creation failed, result code = {data.ResultCode}"); - onCompleted?.Invoke(false); + connectArgs.onCompleted?.Invoke(false); break; } } - private void HandleLobbyJoined(JoinLobbyCallbackInfo data, Action onCompleted) + private void HandleLobbyJoined(JoinLobbyCallbackInfo data) { + var connectArgs = (ChatConnectArgs)data.ClientData; switch (data.ResultCode) { case Result.Success: connectedLobbyId = data.LobbyId; Debug.Log($"Chat lobby joined successfully, lobby ID = {connectedLobbyId}"); - onCompleted?.Invoke(true); + connectArgs.onCompleted?.Invoke(true); break; default: connectedLobbyId = null; Debug.LogError($"Chat lobby join failed, result code = {data.ResultCode}"); - onCompleted?.Invoke(false); + connectArgs.onCompleted?.Invoke(false); break; } } @@ -184,4 +188,18 @@ public class EOSVoiceChat if (!IsConnected) return; } + + private class ChatConnectArgs + { + public readonly string chatLobbyName; + public readonly Action onCompleted; + public readonly uint maxChatPlayers; + + public ChatConnectArgs(string chatLobbyName, Action onCompleted, uint maxChatPlayers) + { + this.chatLobbyName = chatLobbyName; + this.onCompleted = onCompleted; + this.maxChatPlayers = maxChatPlayers; + } + } }