trigger method

AsyncReply<bool> trigger(
  1. ResourceTrigger trigger
)
override

Implementation

AsyncReply<bool> trigger(ResourceTrigger trigger) {
  if (trigger == ResourceTrigger.Open) {
    if (_server != null) return new AsyncReply<bool>.ready(true);

    var host = (instance as Instance).name.split(":");

    // assign domain from hostname if not provided
    var address = host[0];
    var port = host.length > 1 ? int.parse(host[1]) : 10518;

    var domain = instance?.attributes["domain"] ?? address;

    var ws = instance?.attributes.containsKey("ws") == true ||
        instance?.attributes.containsKey("wss") == true;
    var secure = instance?.attributes.containsKey("secure") == true ||
        instance?.attributes.containsKey("wss") == true;

    if (instance?.attributes.containsKey("username") == true &&
        instance?.attributes.containsKey("password") == true) {
      var username = instance?.attributes["username"] as String;
      var password =
          DC.stringToBytes(instance?.attributes["password"] as String);

      return connect(
          method: AuthenticationMethod.Credentials,
          domain: domain,
          hostname: address,
          port: port,
          passwordOrToken: password,
          username: username,
          useWebsocket: ws,
          secureWebSocket: secure);
    } else if (instance?.attributes.containsKey("token") == true) {
      var token = DC.stringToBytes(instance?.attributes["token"] ?? "");
      var tokenIndex = instance?.attributes["tokenIndex"] ?? 0;
      return connect(
          method: AuthenticationMethod.Credentials,
          domain: domain,
          hostname: address,
          port: port,
          passwordOrToken: token,
          tokenIndex: tokenIndex,
          useWebsocket: ws,
          secureWebSocket: secure);
    } else {
      return connect(
          method: AuthenticationMethod.None,
          hostname: address,
          port: port,
          domain: domain,
          useWebsocket: ws,
          secureWebSocket: secure);
    }
  }

  return new AsyncReply<bool>.ready(true);
}