// This file is generated. Do not modify by hand.
// XML documentation file not found. To check if public methods have XML comments,
// make sure the XML doc file is present and located next to the scraped dll
namespace Unity.Services.Authentication.Internal
{
    public interface IAccessToken : Unity.Services.Core.Internal.IServiceComponent
    {
        public abstract string AccessToken { get; }
    }

    public interface IEnvironmentId : Unity.Services.Core.Internal.IServiceComponent
    {
        public abstract string EnvironmentId { get; }
    }

    public interface IPlayerId : Unity.Services.Core.Internal.IServiceComponent
    {
        public event System.Action<string> PlayerIdChanged;
        public abstract string PlayerId { get; }
    }
}

namespace Unity.Services.Core.Configuration.Internal
{
    public interface ICloudProjectId : Unity.Services.Core.Internal.IServiceComponent
    {
        public abstract string GetCloudProjectId();
    }

    public interface IProjectConfiguration : Unity.Services.Core.Internal.IServiceComponent
    {
        public abstract bool GetBool(string key, bool defaultValue = False);
        public abstract float GetFloat(string key, float defaultValue = 0);
        public abstract int GetInt(string key, int defaultValue = 0);
        public abstract string GetString(string key, string defaultValue = default(string));
    }
}

namespace Unity.Services.Core.Device.Internal
{
    public interface IInstallationId : Unity.Services.Core.Internal.IServiceComponent
    {
        public abstract string GetOrCreateIdentifier();
    }
}

namespace Unity.Services.Core.Environments.Internal
{
    public interface IEnvironments : Unity.Services.Core.Internal.IServiceComponent
    {
        public abstract string Current { get; }
    }
}

namespace Unity.Services.Core.Internal
{
    public class CircularDependencyException : Unity.Services.Core.ServicesInitializationException
    {
        public CircularDependencyException() {}
        public CircularDependencyException(string message) {}
    }

    [System.Runtime.CompilerServices.IsReadOnly] public struct CoreRegistration
    {
        public Unity.Services.Core.Internal.CoreRegistration DependsOn<T>() where T : Unity.Services.Core.Internal.IServiceComponent;
        public Unity.Services.Core.Internal.CoreRegistration OptionallyDependsOn<T>() where T : Unity.Services.Core.Internal.IServiceComponent;
        public Unity.Services.Core.Internal.CoreRegistration ProvidesComponent<T>() where T : Unity.Services.Core.Internal.IServiceComponent;
    }

    public sealed class CoreRegistry
    {
        public static Unity.Services.Core.Internal.CoreRegistry Instance { get; }
        public TComponent GetServiceComponent<TComponent>() where TComponent : Unity.Services.Core.Internal.IServiceComponent;
        public Unity.Services.Core.Internal.CoreRegistration RegisterPackage<TPackage>([JetBrains.Annotations.NotNull] TPackage package) where TPackage : Unity.Services.Core.Internal.IInitializablePackage;
        public void RegisterServiceComponent<TComponent>([JetBrains.Annotations.NotNull] TComponent component) where TComponent : Unity.Services.Core.Internal.IServiceComponent;
    }

    public interface IInitializablePackage
    {
        public abstract System.Threading.Tasks.Task Initialize(Unity.Services.Core.Internal.CoreRegistry registry);
    }

    public interface IServiceComponent
    {
    }
}

namespace Unity.Services.Core.Scheduler.Internal
{
    public interface IActionScheduler : Unity.Services.Core.Internal.IServiceComponent
    {
        public abstract void CancelAction(long actionId);
        public abstract long ScheduleAction(System.Action action, double delaySeconds = 0);
    }
}

namespace Unity.Services.Core.Telemetry.Internal
{
    public interface IDiagnostics
    {
        public abstract void SendDiagnostic(string name, string message, System.Collections.Generic.IDictionary<string, string> tags = default(System.Collections.Generic.IDictionary<string, string>));
    }

    public interface IDiagnosticsFactory : Unity.Services.Core.Internal.IServiceComponent
    {
        public abstract System.Collections.Generic.IReadOnlyDictionary<string, string> CommonTags { get; }
        public abstract Unity.Services.Core.Telemetry.Internal.IDiagnostics Create(string packageName);
    }

    public interface IMetrics
    {
        public abstract void SendGaugeMetric(string name, double value = 0, System.Collections.Generic.IDictionary<string, string> tags = default(System.Collections.Generic.IDictionary<string, string>));
        public abstract void SendHistogramMetric(string name, double time, System.Collections.Generic.IDictionary<string, string> tags = default(System.Collections.Generic.IDictionary<string, string>));
        public abstract void SendSumMetric(string name, double value = 1, System.Collections.Generic.IDictionary<string, string> tags = default(System.Collections.Generic.IDictionary<string, string>));
    }

    public interface IMetricsFactory : Unity.Services.Core.Internal.IServiceComponent
    {
        public abstract System.Collections.Generic.IReadOnlyDictionary<string, string> CommonTags { get; }
        public abstract Unity.Services.Core.Telemetry.Internal.IMetrics Create(string packageName);
    }
}

namespace Unity.Services.Core.Threading.Internal
{
    public interface IUnityThreadUtils : Unity.Services.Core.Internal.IServiceComponent
    {
        public abstract bool IsRunningOnUnityThread { get; }
        public abstract System.Threading.Tasks.Task PostAsync([JetBrains.Annotations.NotNull] System.Action action);
        public abstract System.Threading.Tasks.Task<T> PostAsync<T>([JetBrains.Annotations.NotNull] System.Func<T> action);
        public abstract System.Threading.Tasks.Task PostAsync([JetBrains.Annotations.NotNull] System.Action<object> action, object state);
        public abstract System.Threading.Tasks.Task<T> PostAsync<T>([JetBrains.Annotations.NotNull] System.Func<object, T> action, object state);
        public abstract void Send([JetBrains.Annotations.NotNull] System.Action action);
        public abstract T Send<T>([JetBrains.Annotations.NotNull] System.Func<T> action);
        public abstract void Send([JetBrains.Annotations.NotNull] System.Action<object> action, object state);
        public abstract T Send<T>([JetBrains.Annotations.NotNull] System.Func<object, T> action, object state);
    }
}

namespace Unity.Services.Qos.Internal
{
    public interface IQosResults : Unity.Services.Core.Internal.IServiceComponent
    {
        public abstract System.Threading.Tasks.Task<System.Collections.Generic.IList<Unity.Services.Qos.Internal.QosResult>> GetSortedQosResultsAsync(string service, System.Collections.Generic.IList<string> regions);
    }

    public struct QosResult
    {
        public int AverageLatencyMs;
        public float PacketLossPercent;
        public string Region;
    }
}

namespace Unity.Services.Vivox.Internal
{
    public interface IVivox : Unity.Services.Core.Internal.IServiceComponent
    {
        public abstract void RegisterTokenProvider(Unity.Services.Vivox.Internal.IVivoxTokenProviderInternal tokenProvider);
    }

    public interface IVivoxTokenProviderInternal
    {
        public abstract System.Threading.Tasks.Task<string> GetTokenAsync(string issuer = default(string), System.Nullable<System.TimeSpan> expiration = default(System.Nullable<System.TimeSpan>), string userUri = default(string), string action = default(string), string conferenceUri = default(string), string fromUserUri = default(string), string realm = default(string));
    }
}

namespace Unity.Services.Wire.Internal
{
    public struct ChannelToken
    {
        public string ChannelName;
        public string Token;
    }

    public interface IChannel : System.IDisposable
    {
        public event System.Action<byte[]> BinaryMessageReceived;
        public event System.Action<string> ErrorReceived;
        public event System.Action KickReceived;
        public event System.Action<string> MessageReceived;
        public event System.Action<Unity.Services.Wire.Internal.SubscriptionState> NewStateReceived;
        public abstract System.Threading.Tasks.Task SubscribeAsync();
        public abstract System.Threading.Tasks.Task UnsubscribeAsync();
    }

    public interface IChannelTokenProvider
    {
        public abstract System.Threading.Tasks.Task<Unity.Services.Wire.Internal.ChannelToken> GetTokenAsync();
    }

    public interface IWire : Unity.Services.Core.Internal.IServiceComponent
    {
        public abstract Unity.Services.Wire.Internal.IChannel CreateChannel(Unity.Services.Wire.Internal.IChannelTokenProvider tokenProvider);
    }

    public enum SubscriptionState
    {
        public const Unity.Services.Wire.Internal.SubscriptionState Error = 3;
        public const Unity.Services.Wire.Internal.SubscriptionState Subscribing = 4;
        public const Unity.Services.Wire.Internal.SubscriptionState Synced = 1;
        public const Unity.Services.Wire.Internal.SubscriptionState Unsubscribed = 0;
        public const Unity.Services.Wire.Internal.SubscriptionState Unsynced = 2;
        public int value__;
    }
}
