using System;
using System.Collections.Generic;
using UnityEngine.Scripting;
using System.Runtime.Serialization;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
namespace Unity.Services.Relay.Models
{
///
/// An allocation created via a join code
///
/// ID of the allocation
/// Connection endpoints for the assigned relay server
/// relay_server param
/// Base64-encoded key required for the HMAC signature of the BIND message
/// Base64 encoded representation of an encrypted connection data blob describing this allocation. Required for establishing communication with other players.
/// Base64 encoded form of AllocationID. When decoded, this is the exact expected byte alignment to be used when crafting relay protocol messages that require AllocationID. eg. PING, CONNECT_REQUEST, RELAY, CLOSE, etc.
/// Base64 encoded representation of an encrypted connection data blob describing the allocation and relay server of the player who created the join code. Used for establishing communication with the host.
[Preserve]
[DataContract(Name = "JoinAllocation")]
public class JoinAllocation
{
[Preserve]
public JoinAllocation(System.Guid allocationId, List serverEndpoints, RelayServer relayServer, byte[] key, byte[] connectionData, byte[] allocationIdBytes, byte[] hostConnectionData)
{
AllocationId = allocationId;
ServerEndpoints = serverEndpoints;
RelayServer = relayServer;
Key = key;
ConnectionData = connectionData;
AllocationIdBytes = allocationIdBytes;
HostConnectionData = hostConnectionData;
}
[Preserve]
[DataMember(Name = "allocation_id", IsRequired = true, EmitDefaultValue = true)]
public System.Guid AllocationId{ get; }
[Preserve]
[DataMember(Name = "server_endpoints", IsRequired = true, EmitDefaultValue = true)]
public List ServerEndpoints{ get; }
[Preserve]
[DataMember(Name = "relay_server", IsRequired = true, EmitDefaultValue = true)]
public RelayServer RelayServer{ get; }
[Preserve]
[DataMember(Name = "key", IsRequired = true, EmitDefaultValue = true)]
public byte[] Key{ get; }
[Preserve]
[DataMember(Name = "connection_data", IsRequired = true, EmitDefaultValue = true)]
public byte[] ConnectionData{ get; }
[Preserve]
[DataMember(Name = "allocation_id_bytes", IsRequired = true, EmitDefaultValue = true)]
public byte[] AllocationIdBytes{ get; }
[Preserve]
[DataMember(Name = "host_connection_data", IsRequired = true, EmitDefaultValue = true)]
public byte[] HostConnectionData{ get; }
}
}