Developer SDK

C# examples

Install the SDK · View source on GitHub ↗

integration/UrSession.cs

using URnetwork.SDK;

public sealed class UrSession : IDisposable {
  private Handle? manager, space, api;
  public Device Device { get; private set; } = null!;
  public UrSession(bool connect = true) {
    string jwt =
        Environment.GetEnvironmentVariable("URNETWORK_CLIENT_JWT") ??
        throw new ArgumentException("Set URNETWORK_CLIENT_JWT; see README.md.");
    string instance = Guid.Parse(Environment.GetEnvironmentVariable(
                                     "URNETWORK_INSTANCE_ID") ??
                                 throw new ArgumentException(
                                     "Set a persistent URNETWORK_INSTANCE_ID."))
                          .ToString();
    try {
      manager = new Handle(Raw.urnet_new_network_space_manager_no_storage());
      space = new Handle(
          Raw.urnet_network_space_manager_update_network_space_values(
              manager.Value,
              "{\"host_name\":\"ur.network\",\"env_name\":\"main\"}",
              "{\"migration_host_name\":\"bringyour.com\"}"));
      api = new Handle(Raw.urnet_network_space_get_api(space.Value));
      Raw.urnet_api_set_by_jwt(api.Value, jwt);
      ulong handle = Raw.urnet_new_device_local_with_defaults(
          space.Value, jwt, "C# example", "csharp", "1", instance, 0,
          out var error);
      string? message = Sdk.TakeString(error);
      if (message != null)
        throw new IOException(message);
      Device = new Device(handle);
      if (connect)
        Raw.urnet_device_set_connect_location(
            handle, "{\"connect_location_id\":{\"best_available\":true}}");
    } catch {
      Dispose();
      throw;
    }
  }
  public void Dispose() {
    Device?.Dispose();
    api?.Dispose();
    space?.Dispose();
    if (manager is { IsClosed : false }) {
      Raw.urnet_network_space_manager_close(manager.Value);
      manager.Dispose();
    }
  }
}