| // 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 |