// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

part of dart.ui;

abstract class IsolateNameServer {
  // Looks up the [SendPort] associated with a given name. Returns null
  // if the name does not exist.
  //
  // `name` must not be null.
  static SendPort lookupPortByName(String name) {
    assert(name != null, "'name' cannot be null.");
    return _lookupPortByName(name);
  }

  // Registers a SendPort with a given name. Returns true if registration is
  // successful, false if the name entry already exists.
  //
  // `port` and `name` must not be null.
  static bool registerPortWithName(SendPort port, String name) {
    assert(port != null, "'port' cannot be null.");
    assert(name != null, "'name' cannot be null.");
    return _registerPortWithName(port, name);
  }

  // Removes a name to SendPort mapping given a name. Returns true if the
  // mapping was successfully removed, false if the mapping does not exist.
  //
  // `name` must not be null.
  static bool removePortNameMapping(String name) {
    assert(name != null, "'name' cannot be null.");
    return _removePortNameMapping(name);
  }

  static SendPort _lookupPortByName(String name)
      native 'IsolateNameServerNatives_LookupPortByName';
  static bool _registerPortWithName(SendPort port, String name)
      native 'IsolateNameServerNatives_RegisterPortWithName';
  static bool _removePortNameMapping(String name)
      native 'IsolateNameServerNatives_RemovePortNameMapping';
}
