1 | // Copyright 2013 The Flutter Authors. All rights reserved. |
---|---|
2 | // Use of this source code is governed by a BSD-style license that can be |
3 | // found in the LICENSE file. |
4 | |
5 | #include "flutter/lib/ui/isolate_name_server/isolate_name_server.h" |
6 | |
7 | namespace flutter { |
8 | |
9 | IsolateNameServer::IsolateNameServer() {} |
10 | |
11 | IsolateNameServer::~IsolateNameServer() = default; |
12 | |
13 | Dart_Port IsolateNameServer::LookupIsolatePortByName(const std::string& name) { |
14 | std::scoped_lock lock(mutex_); |
15 | return LookupIsolatePortByNameUnprotected(name); |
16 | } |
17 | |
18 | Dart_Port IsolateNameServer::LookupIsolatePortByNameUnprotected( |
19 | const std::string& name) { |
20 | auto port_iterator = port_mapping_.find(name); |
21 | if (port_iterator != port_mapping_.end()) { |
22 | return port_iterator->second; |
23 | } |
24 | return ILLEGAL_PORT; |
25 | } |
26 | |
27 | bool IsolateNameServer::RegisterIsolatePortWithName(Dart_Port port, |
28 | const std::string& name) { |
29 | std::scoped_lock lock(mutex_); |
30 | if (LookupIsolatePortByNameUnprotected(name) != ILLEGAL_PORT) { |
31 | // Name is already registered. |
32 | return false; |
33 | } |
34 | port_mapping_[name] = port; |
35 | return true; |
36 | } |
37 | |
38 | bool IsolateNameServer::RemoveIsolateNameMapping(const std::string& name) { |
39 | std::scoped_lock lock(mutex_); |
40 | auto port_iterator = port_mapping_.find(name); |
41 | if (port_iterator == port_mapping_.end()) { |
42 | return false; |
43 | } |
44 | port_mapping_.erase(port_iterator); |
45 | return true; |
46 | } |
47 | |
48 | } // namespace flutter |
49 |