Skip to content

Instantly share code, notes, and snippets.

@SocketWeaver
Created April 26, 2019 04:22
Show Gist options
  • Save SocketWeaver/68e9e4b2994e84a2f90ebd7e43338413 to your computer and use it in GitHub Desktop.
Save SocketWeaver/68e9e4b2994e84a2f90ebd7e43338413 to your computer and use it in GitHub Desktop.
basic matchmaking logic
using UnityEngine;
using SWNetwork;
using UnityEngine.SceneManagement;
public class Lobby : MonoBehaviour
{
void Start()
{
NetworkClient.Lobby.OnRoomReadyEvent += Lobby_OnRoomReadyEvent;
NetworkClient.Lobby.OnFailedToStartRoomEvent += Lobby_OnFailedToStartRoomEvent;
NetworkClient.Lobby.OnLobbyConncetedEvent += Lobby_OnLobbyConncetedEvent;
}
void onDestroy()
{
NetworkClient.Lobby.OnRoomReadyEvent -= Lobby_OnRoomReadyEvent;
NetworkClient.Lobby.OnFailedToStartRoomEvent -= Lobby_OnFailedToStartRoomEvent;
NetworkClient.Lobby.OnLobbyConncetedEvent -= Lobby_OnLobbyConncetedEvent;
}
public void Play()
{
NetworkClient.Lobby.JoinOrCreateRoom(true, 2, HandleJoinOrCreatedRoom);
}
void RegisterPlayer()
{
NetworkClient.Lobby.Register((successful, reply, error) =>
{
if (successful)
{
Debug.Log("Registered " + reply);
if (reply.started)
{
ConnectToRoom();
}
}
else
{
Debug.Log("Failed to register " + error);
}
});
}
void StartRoom()
{
NetworkClient.Lobby.StartRoom((okay, error) =>
{
if (okay)
{
Debug.Log("Started room");
}
else
{
Debug.Log("Failed to start room " + error);
}
});
}
void ConnectToRoom()
{
NetworkClient.Instance.ConnectToRoom(HandleConnectedToRoom);
}
void HandleConnectedToRoom(bool connected)
{
if (connected)
{
Debug.Log("Connected to room");
SceneManager.LoadScene("game");
}
else
{
Debug.Log("Failed to connect to room");
}
}
void HandleJoinOrCreatedRoom(bool successful, SWJoinRoomReply reply, SWLobbyError error)
{
if (successful)
{
Debug.Log("Joined or created room " + reply);
if (reply.started)
{
ConnectToRoom();
}
else if (NetworkClient.Lobby.IsOwner)
{
StartRoom();
}
}
else
{
Debug.Log("Failed to join or create room " + error);
}
}
// Lobby events handlers
void Lobby_OnRoomReadyEvent(SWRoomReadyEventData eventData)
{
Debug.Log("Room is ready: roomId= " + eventData.roomId);
ConnectToRoom();
}
void Lobby_OnFailedToStartRoomEvent(SWFailedToStartRoomEventData eventData)
{
Debug.Log("Failed to start room: " + eventData);
}
void Lobby_OnLobbyConncetedEvent()
{
Debug.Log("Lobby connected");
RegisterPlayer();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment