| // Copyright 2013 The Flutter Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #include "flutter/lib/ui/isolate_name_server/isolate_name_server.h" | |
| namespace flutter { | |
| IsolateNameServer::IsolateNameServer() {} | |
| IsolateNameServer::~IsolateNameServer() = default; | |
| Dart_Port IsolateNameServer::LookupIsolatePortByName(const std::string& name) { | |
| std::scoped_lock lock(mutex_); | |
| return LookupIsolatePortByNameUnprotected(name); | |
| } | |
| Dart_Port IsolateNameServer::LookupIsolatePortByNameUnprotected( | |
| const std::string& name) { | |
| auto port_iterator = port_mapping_.find(name); | |
| if (port_iterator != port_mapping_.end()) { | |
| return port_iterator->second; | |
| } | |
| return ILLEGAL_PORT; | |
| } | |
| bool IsolateNameServer::RegisterIsolatePortWithName(Dart_Port port, | |
| const std::string& name) { | |
| std::scoped_lock lock(mutex_); | |
| if (LookupIsolatePortByNameUnprotected(name) != ILLEGAL_PORT) { | |
| // Name is already registered. | |
| return false; | |
| } | |
| port_mapping_[name] = port; | |
| return true; | |
| } | |
| bool IsolateNameServer::RemoveIsolateNameMapping(const std::string& name) { | |
| std::scoped_lock lock(mutex_); | |
| auto port_iterator = port_mapping_.find(name); | |
| if (port_iterator == port_mapping_.end()) { | |
| return false; | |
| } | |
| port_mapping_.erase(port_iterator); | |
| return true; | |
| } | |
| } // namespace flutter |