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

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

Issue 2925053005: [cast_channel] Implement CastSocketService::OpenSocket() (Closed)
Patch Set: rebase Created 3 years, 6 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 LIVENESS_INTERVAL, it is considered gone.
mark a. foltz 2017/06/21 17:41:42 Where is LIVENESS_INTERVAL defined? Or should it
zhaobin 2017/06/21 21:58:25 Done.
23 const int kConnectLivenessTimeoutSecs = kPingIntervalInSecs * 2;
24 } // namespace
25
12 namespace cast_channel { 26 namespace cast_channel {
13 27
14 int CastSocketService::last_channel_id_ = 0; 28 int CastSocketService::last_channel_id_ = 0;
15 29
16 CastSocketService::CastSocketService() 30 CastSocketService::CastSocketService()
17 : RefcountedKeyedService( 31 : RefcountedKeyedService(
18 BrowserThread::GetTaskRunnerForThread(BrowserThread::IO)) { 32 BrowserThread::GetTaskRunnerForThread(BrowserThread::IO)),
33 logger_(new Logger()) {
19 DETACH_FROM_THREAD(thread_checker_); 34 DETACH_FROM_THREAD(thread_checker_);
20 } 35 }
21 36
22 CastSocketService::~CastSocketService() { 37 CastSocketService::~CastSocketService() {
23 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); 38 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
24 } 39 }
25 40
26 int CastSocketService::AddSocket(std::unique_ptr<CastSocket> socket) { 41 int CastSocketService::AddSocket(std::unique_ptr<CastSocket> socket) {
27 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); 42 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
28 DCHECK(socket); 43 DCHECK(socket);
(...skipping 16 matching lines...) Expand all
45 return socket; 60 return socket;
46 } 61 }
47 62
48 CastSocket* CastSocketService::GetSocket(int channel_id) const { 63 CastSocket* CastSocketService::GetSocket(int channel_id) const {
49 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); 64 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
50 DCHECK(channel_id > 0); 65 DCHECK(channel_id > 0);
51 const auto& socket_it = sockets_.find(channel_id); 66 const auto& socket_it = sockets_.find(channel_id);
52 return socket_it == sockets_.end() ? nullptr : socket_it->second.get(); 67 return socket_it == sockets_.end() ? nullptr : socket_it->second.get();
53 } 68 }
54 69
70 CastSocket* CastSocketService::GetSocket(
71 const net::IPEndPoint& ip_endpoint) const {
72 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
73 auto it = std::find_if(
74 sockets_.begin(), sockets_.end(),
75 [&ip_endpoint](
76 const std::pair<const int, std::unique_ptr<CastSocket>>& pair) {
77 return pair.second->ip_endpoint() == ip_endpoint;
78 });
79 return it == sockets_.end() ? nullptr : it->second.get();
80 }
81
82 int CastSocketService::OpenSocket(const net::IPEndPoint& ip_endpoint,
83 net::NetLog* net_log,
84 const base::TimeDelta& connect_timeout,
85 const base::TimeDelta& liveness_timeout,
86 const base::TimeDelta& ping_interval,
87 const scoped_refptr<Logger>& logger,
88 uint64_t device_capabilities,
89 const CastSocket::OnOpenCallback& open_cb,
90 CastSocket::Observer* observer) {
91 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
92 DCHECK(observer);
93 auto* socket = GetSocket(ip_endpoint);
94
95 if (!socket) {
96 // If cast socket does not exist.
97 if (socket_for_test_) {
98 socket = socket_for_test_.release();
mark a. foltz 2017/06/21 17:41:42 Nit: Slightly prefer to call AddSocket(std::move(s
zhaobin 2017/06/21 21:58:25 Done.
99 } else {
100 socket = new CastSocketImpl(ip_endpoint, net_log, connect_timeout,
101 liveness_timeout, ping_interval, logger,
102 device_capabilities);
103 }
104 AddSocket(base::WrapUnique(socket));
105 socket->AddObserver(observer);
106 }
107
108 socket->Connect(open_cb);
109 return socket->id();
110 }
111
112 int CastSocketService::OpenSocket(const net::IPEndPoint& ip_endpoint,
113 net::NetLog* net_log,
114 const CastSocket::OnOpenCallback& open_cb,
115 CastSocket::Observer* observer) {
116 auto connect_timeout = base::TimeDelta::FromSeconds(kConnectTimeoutSecs);
117 auto ping_interval = base::TimeDelta::FromSeconds(kPingIntervalInSecs);
118 auto liveness_timeout =
119 base::TimeDelta::FromSeconds(kConnectLivenessTimeoutSecs);
120 return OpenSocket(ip_endpoint, net_log, connect_timeout, liveness_timeout,
121 ping_interval, logger_, CastDeviceCapability::NONE, open_cb,
122 observer);
123 }
124
55 CastSocket::Observer* CastSocketService::GetObserver(const std::string& id) { 125 CastSocket::Observer* CastSocketService::GetObserver(const std::string& id) {
56 auto it = std::find_if( 126 auto it = std::find_if(
57 socket_observer_map_.begin(), socket_observer_map_.end(), 127 socket_observer_map_.begin(), socket_observer_map_.end(),
58 [id](const std::pair<const std::string, 128 [id](const std::pair<const std::string,
59 std::unique_ptr<CastSocket::Observer>>& entry) { 129 std::unique_ptr<CastSocket::Observer>>& entry) {
60 return entry.first == id; 130 return entry.first == id;
61 }); 131 });
62 return it == socket_observer_map_.end() ? nullptr : it->second.get(); 132 return it == socket_observer_map_.end() ? nullptr : it->second.get();
63 } 133 }
64 134
65 void CastSocketService::AddObserver( 135 void CastSocketService::AddObserver(
66 const std::string& id, 136 const std::string& id,
67 std::unique_ptr<CastSocket::Observer> observer) { 137 std::unique_ptr<CastSocket::Observer> observer) {
68 socket_observer_map_.insert(std::make_pair(id, std::move(observer))); 138 socket_observer_map_.insert(std::make_pair(id, std::move(observer)));
69 } 139 }
70 140
141 void CastSocketService::SetSocketForTest(
142 std::unique_ptr<cast_channel::CastSocket> socket_for_test) {
143 socket_for_test_ = std::move(socket_for_test);
144 }
145
71 void CastSocketService::ShutdownOnUIThread() {} 146 void CastSocketService::ShutdownOnUIThread() {}
72 147
73 } // namespace cast_channel 148 } // namespace cast_channel
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698