Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(60)

Side by Side Diff: components/cast_channel/cast_socket_service.cc

Issue 2925053005: [cast_channel] Implement CastSocketService::OpenSocket() (Closed)
Patch Set: move |logger_| from cast_channel_api to cast_socket_service Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/cast_channel/cast_socket_service.h" 5 #include "components/cast_channel/cast_socket_service.h"
6 6
7 #include "base/memory/ptr_util.h" 7 #include "base/memory/ptr_util.h"
8 #include "components/cast_channel/cast_socket.h"
9 #include "components/cast_channel/logger.h"
8 #include "content/public/browser/browser_thread.h" 10 #include "content/public/browser/browser_thread.h"
9 11
10 using content::BrowserThread; 12 using content::BrowserThread;
11 13
14 namespace {
15 // Connect timeout for connect calls.
16 const int kConnectTimeoutSecs = 10;
17
18 // Ping interval
19 const int kPingIntervalInSecs = 5;
20
21 // Liveness timeout for connect calls, in milliseconds. If no message is
22 // received from the receiver during kConnectLivenessTimeoutSecs, it is
23 // considered gone.
24 const int kConnectLivenessTimeoutSecs = kPingIntervalInSecs * 2;
25 } // namespace
26
12 namespace cast_channel { 27 namespace cast_channel {
13 28
14 int CastSocketService::last_channel_id_ = 0; 29 int CastSocketService::last_channel_id_ = 0;
15 30
16 CastSocketService::CastSocketService() 31 CastSocketService::CastSocketService()
17 : RefcountedKeyedService( 32 : RefcountedKeyedService(
18 BrowserThread::GetTaskRunnerForThread(BrowserThread::IO)) { 33 BrowserThread::GetTaskRunnerForThread(BrowserThread::IO)),
34 logger_(new Logger()) {
19 DETACH_FROM_THREAD(thread_checker_); 35 DETACH_FROM_THREAD(thread_checker_);
20 } 36 }
21 37
22 CastSocketService::~CastSocketService() { 38 CastSocketService::~CastSocketService() {
23 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); 39 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
24 } 40 }
25 41
26 int CastSocketService::AddSocket(std::unique_ptr<CastSocket> socket) { 42 scoped_refptr<Logger> CastSocketService::GetLogger() {
43 return logger_;
44 }
45
46 CastSocket* CastSocketService::AddSocket(std::unique_ptr<CastSocket> socket) {
27 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); 47 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
28 DCHECK(socket); 48 DCHECK(socket);
29 int id = ++last_channel_id_; 49 int id = ++last_channel_id_;
30 socket->set_id(id); 50 socket->set_id(id);
51
52 auto* socket_ptr = socket.get();
31 sockets_.insert(std::make_pair(id, std::move(socket))); 53 sockets_.insert(std::make_pair(id, std::move(socket)));
32 return id; 54 return socket_ptr;
33 } 55 }
34 56
35 std::unique_ptr<CastSocket> CastSocketService::RemoveSocket(int channel_id) { 57 std::unique_ptr<CastSocket> CastSocketService::RemoveSocket(int channel_id) {
36 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); 58 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
37 DCHECK(channel_id > 0); 59 DCHECK(channel_id > 0);
38 auto socket_it = sockets_.find(channel_id); 60 auto socket_it = sockets_.find(channel_id);
39 61
40 std::unique_ptr<CastSocket> socket; 62 std::unique_ptr<CastSocket> socket;
41 if (socket_it != sockets_.end()) { 63 if (socket_it != sockets_.end()) {
42 socket = std::move(socket_it->second); 64 socket = std::move(socket_it->second);
43 sockets_.erase(socket_it); 65 sockets_.erase(socket_it);
44 } 66 }
45 return socket; 67 return socket;
46 } 68 }
47 69
48 CastSocket* CastSocketService::GetSocket(int channel_id) const { 70 CastSocket* CastSocketService::GetSocket(int channel_id) const {
49 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); 71 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
50 DCHECK(channel_id > 0); 72 DCHECK(channel_id > 0);
51 const auto& socket_it = sockets_.find(channel_id); 73 const auto& socket_it = sockets_.find(channel_id);
52 return socket_it == sockets_.end() ? nullptr : socket_it->second.get(); 74 return socket_it == sockets_.end() ? nullptr : socket_it->second.get();
53 } 75 }
54 76
77 CastSocket* CastSocketService::GetSocket(
78 const net::IPEndPoint& ip_endpoint) const {
79 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
80 auto it = std::find_if(
81 sockets_.begin(), sockets_.end(),
82 [&ip_endpoint](
83 const std::pair<const int, std::unique_ptr<CastSocket>>& pair) {
84 return pair.second->ip_endpoint() == ip_endpoint;
85 });
86 return it == sockets_.end() ? nullptr : it->second.get();
87 }
88
89 int CastSocketService::OpenSocket(const net::IPEndPoint& ip_endpoint,
90 net::NetLog* net_log,
91 const base::TimeDelta& connect_timeout,
92 const base::TimeDelta& liveness_timeout,
93 const base::TimeDelta& ping_interval,
94 uint64_t device_capabilities,
95 const CastSocket::OnOpenCallback& open_cb,
96 CastSocket::Observer* observer) {
97 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
98 DCHECK(observer);
99 auto* socket = GetSocket(ip_endpoint);
100
101 if (!socket) {
102 // If cast socket does not exist.
103 if (socket_for_test_) {
104 socket = AddSocket(std::move(socket_for_test_));
105 } else {
106 socket = new CastSocketImpl(ip_endpoint, net_log, connect_timeout,
107 liveness_timeout, ping_interval, logger_,
108 device_capabilities);
109 AddSocket(base::WrapUnique(socket));
110 }
111 }
112
113 socket->AddObserver(observer);
114 socket->Connect(open_cb);
115 return socket->id();
116 }
117
118 int CastSocketService::OpenSocket(const net::IPEndPoint& ip_endpoint,
119 net::NetLog* net_log,
120 const CastSocket::OnOpenCallback& open_cb,
121 CastSocket::Observer* observer) {
122 auto connect_timeout = base::TimeDelta::FromSeconds(kConnectTimeoutSecs);
123 auto ping_interval = base::TimeDelta::FromSeconds(kPingIntervalInSecs);
124 auto liveness_timeout =
125 base::TimeDelta::FromSeconds(kConnectLivenessTimeoutSecs);
126 return OpenSocket(ip_endpoint, net_log, connect_timeout, liveness_timeout,
127 ping_interval, CastDeviceCapability::NONE, open_cb,
128 observer);
129 }
130
55 CastSocket::Observer* CastSocketService::GetObserver(const std::string& id) { 131 CastSocket::Observer* CastSocketService::GetObserver(const std::string& id) {
56 auto it = socket_observer_map_.find(id); 132 auto it = socket_observer_map_.find(id);
57 return it == socket_observer_map_.end() ? nullptr : it->second.get(); 133 return it == socket_observer_map_.end() ? nullptr : it->second.get();
58 } 134 }
59 135
60 CastSocket::Observer* CastSocketService::AddObserver( 136 CastSocket::Observer* CastSocketService::AddObserver(
61 const std::string& id, 137 const std::string& id,
62 std::unique_ptr<CastSocket::Observer> observer) { 138 std::unique_ptr<CastSocket::Observer> observer) {
63 CastSocket::Observer* observer_ptr = observer.get(); 139 CastSocket::Observer* observer_ptr = observer.get();
64 socket_observer_map_.insert(std::make_pair(id, std::move(observer))); 140 socket_observer_map_.insert(std::make_pair(id, std::move(observer)));
65 return observer_ptr; 141 return observer_ptr;
66 } 142 }
67 143
144 void CastSocketService::SetSocketForTest(
145 std::unique_ptr<cast_channel::CastSocket> socket_for_test) {
146 socket_for_test_ = std::move(socket_for_test);
147 }
148
68 void CastSocketService::ShutdownOnUIThread() {} 149 void CastSocketService::ShutdownOnUIThread() {}
69 150
70 } // namespace cast_channel 151 } // namespace cast_channel
OLDNEW
« no previous file with comments | « components/cast_channel/cast_socket_service.h ('k') | components/cast_channel/cast_socket_service_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698