The PlayResolver
encapsulates all the internals to fetch and join both Rooms and Worlds.
using Coherence.Runtime;
// ensure connection to the play services backend
async Task<bool> PlayResolver.EnsurePlayConnection();
Detailed usage can be found under chapter Rooms.
// Returns true if there is a valid local server running.
// Returns "local" as the region if local server is running.
async Task<(bool, string)> FetchLocalRegions()
// Returns all the regions where rooms are enabled in the portal.
async Task<IReadOnlyList<string>> FetchRegions()
// Fetch a list of rooms currently active in the given region.
// Optionally, filter by tags provided when creating the room.
async Task<IReadOnlyList<RoomData>> FetchRooms(string region, string[] tags = null)
// Create a new room in the region.
async Task<RoomData> CreateRoom(string region, RoomCreationOptions options = null)
// Convert RoomData to EndpointData, to call IClient.Connect(endpoint) directly.
// The second return value is false if the room data is invalid.
(EndpointData, bool) GetRoomEndpointData(RoomData room)
Example usage for Rooms API:
using UnityEngine;
using Coherence.Runtime;
using Coherence.Toolkit;
public class CreatorAndJoiner : MonoBehaviour
{
private CoherenceMonoBridge bridge;
private async void Start()
{
if (!MonoBridgeStore.TryGetBridge(gameObject.scene, out bridge))
{
return;
}
// XXX: try-catch everything
var regions = await PlayResolver.FetchRegions();
var rooms = await PlayResolver.FetchRooms(regions[0]);
if (rooms.Count == 0)
{
var room = await PlayResolver.CreateRoom(regions[0]);
bridge.JoinRoom(room);
}
else
{
bridge.JoinRoom(rooms[0]);
}
}
}
Detailed usage can be found under chapter Worlds.
// Returns true if a local worlds replication server is running.
async Task<bool> EnsureLocalServer()
// Fetches the connection data for local replication server.
async Task<WorldData> FetchLocalWorld()
// Fetches a list of worlds from the portal.
async Task<IReadOnlyList<WorldData>> FetchWorlds()
// Convert WorldData into EndpointData, to call IClient.Connect(endpoint) directly.
// The second return value is false if the world data is invalid.
(EndpointData, bool) GetWorldEndpoint(WorldData world)
Example usage for Worlds API:
using UnityEngine;
using Coherence.Runtime;
using Coherence.Toolkit;
public class WorldJoiner : MonoBehaviour
{
private async void Start()
{
if (!MonoBridgeStore.TryGetBridge(gameObject.scene, out var bridge))
{
return;
}
// XXX: try-catch everything
var worlds = await PlayResolver.FetchWorlds();
if (worlds.Count > 0)
{
bridge.JoinWorld(worlds[0]);
}
}
}