您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
66 行
2.8 KiB
66 行
2.8 KiB
using System;
|
|
using Unity.Services.Relay.Models;
|
|
using UnityEngine;
|
|
using RelayService = Unity.Services.Relay.Relay;
|
|
|
|
namespace LobbyRelaySample.relay
|
|
{
|
|
/// <summary>
|
|
/// Wrapper for all the interaction with the Relay API.
|
|
/// Relay acts as an intermediary between hosts and clients for privacy. Each player will connect to an obfuscated IP address provided by Relay as though connecting directly to other players.
|
|
/// </summary>
|
|
public static class RelayAPIInterface
|
|
{
|
|
/// <summary>
|
|
/// A Relay Allocation represents a "server" for a new host.
|
|
/// </summary>
|
|
public static void AllocateAsync(int maxConnections, Action<Allocation> onComplete)
|
|
{
|
|
var task = RelayService.Instance.CreateAllocationAsync(maxConnections);
|
|
AsyncRequestRelay.Instance.DoRequest(task, OnResponse);
|
|
|
|
void OnResponse(Allocation response)
|
|
{
|
|
if (response == null)
|
|
Debug.LogError("Relay returned a null Allocation. This might occur if the Relay service has an outage, if your cloud project ID isn't linked, or if your Relay package version is outdated.");
|
|
else
|
|
onComplete?.Invoke(response);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Only after an Allocation has been completed can a Relay join code be obtained. This code will be stored in the lobby's data as non-public
|
|
/// such that players can retrieve the Relay join code only after connecting to the lobby. (Note that this is not the same as the lobby code.)
|
|
/// </summary>
|
|
public static void GetJoinCodeAsync(Guid hostAllocationId, Action<string> onComplete)
|
|
{
|
|
var task = RelayService.Instance.GetJoinCodeAsync(hostAllocationId);
|
|
AsyncRequestRelay.Instance.DoRequest(task, OnResponse);
|
|
|
|
void OnResponse(string response)
|
|
{
|
|
if (response == null)
|
|
Debug.LogError("Could not retrieve a Relay join code.");
|
|
else
|
|
onComplete?.Invoke(response);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Clients call this to retrieve the host's Allocation via a Relay join code.
|
|
/// </summary>
|
|
public static void JoinAsync(string joinCode, Action<JoinAllocation> onComplete)
|
|
{
|
|
var task = RelayService.Instance.JoinAllocationAsync(joinCode);
|
|
AsyncRequestRelay.Instance.DoRequest(task, OnResponse);
|
|
|
|
void OnResponse(JoinAllocation response)
|
|
{
|
|
if (response == null)
|
|
Debug.LogError("Could not join async with Relay join code " + joinCode);
|
|
else
|
|
onComplete?.Invoke(response);
|
|
}
|
|
}
|
|
}
|
|
}
|