OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2015 The WebRTC project authors. All Rights Reserved. | 2 * Copyright 2015 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
88 rtc::scoped_refptr<webrtc::DataChannelInterface> _nativeDataChannel; | 88 rtc::scoped_refptr<webrtc::DataChannelInterface> _nativeDataChannel; |
89 std::unique_ptr<webrtc::DataChannelDelegateAdapter> _observer; | 89 std::unique_ptr<webrtc::DataChannelDelegateAdapter> _observer; |
90 BOOL _isObserverRegistered; | 90 BOOL _isObserverRegistered; |
91 } | 91 } |
92 | 92 |
93 @synthesize delegate = _delegate; | 93 @synthesize delegate = _delegate; |
94 | 94 |
95 - (void)dealloc { | 95 - (void)dealloc { |
96 // Handles unregistering the observer properly. We need to do this because | 96 // Handles unregistering the observer properly. We need to do this because |
97 // there may still be other references to the underlying data channel. | 97 // there may still be other references to the underlying data channel. |
98 self.delegate = nil; | 98 _nativeDataChannel->UnregisterObserver(); |
99 } | 99 } |
100 | 100 |
101 - (NSString *)label { | 101 - (NSString *)label { |
102 return [NSString stringForStdString:_nativeDataChannel->label()]; | 102 return [NSString stringForStdString:_nativeDataChannel->label()]; |
103 } | 103 } |
104 | 104 |
105 - (BOOL)isReliable { | 105 - (BOOL)isReliable { |
106 return _nativeDataChannel->reliable(); | 106 return _nativeDataChannel->reliable(); |
107 } | 107 } |
108 | 108 |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
140 | 140 |
141 - (RTCDataChannelState)readyState { | 141 - (RTCDataChannelState)readyState { |
142 return [[self class] dataChannelStateForNativeState: | 142 return [[self class] dataChannelStateForNativeState: |
143 _nativeDataChannel->state()]; | 143 _nativeDataChannel->state()]; |
144 } | 144 } |
145 | 145 |
146 - (uint64_t)bufferedAmount { | 146 - (uint64_t)bufferedAmount { |
147 return _nativeDataChannel->buffered_amount(); | 147 return _nativeDataChannel->buffered_amount(); |
148 } | 148 } |
149 | 149 |
150 - (void)setDelegate:(id<RTCDataChannelDelegate>)delegate { | |
151 if (_delegate == delegate) { | |
152 return; | |
153 } | |
154 if (_isObserverRegistered) { | |
155 _nativeDataChannel->UnregisterObserver(); | |
156 _isObserverRegistered = NO; | |
157 } | |
158 _delegate = delegate; | |
159 if (_delegate) { | |
160 _nativeDataChannel->RegisterObserver(_observer.get()); | |
161 _isObserverRegistered = YES; | |
162 } | |
163 } | |
164 | |
165 - (void)close { | 150 - (void)close { |
166 _nativeDataChannel->Close(); | 151 _nativeDataChannel->Close(); |
167 } | 152 } |
168 | 153 |
169 - (BOOL)sendData:(RTCDataBuffer *)data { | 154 - (BOOL)sendData:(RTCDataBuffer *)data { |
170 return _nativeDataChannel->Send(*data.nativeDataBuffer); | 155 return _nativeDataChannel->Send(*data.nativeDataBuffer); |
171 } | 156 } |
172 | 157 |
173 - (NSString *)description { | 158 - (NSString *)description { |
174 return [NSString stringWithFormat:@"RTCDataChannel:\n%ld\n%@\n%@", | 159 return [NSString stringWithFormat:@"RTCDataChannel:\n%ld\n%@\n%@", |
175 (long)self.channelId, | 160 (long)self.channelId, |
176 self.label, | 161 self.label, |
177 [[self class] | 162 [[self class] |
178 stringForState:self.readyState]]; | 163 stringForState:self.readyState]]; |
179 } | 164 } |
180 | 165 |
181 #pragma mark - Private | 166 #pragma mark - Private |
182 | 167 |
183 - (instancetype)initWithNativeDataChannel: | 168 - (instancetype)initWithNativeDataChannel: |
184 (rtc::scoped_refptr<webrtc::DataChannelInterface>)nativeDataChannel { | 169 (rtc::scoped_refptr<webrtc::DataChannelInterface>)nativeDataChannel { |
185 NSParameterAssert(nativeDataChannel); | 170 NSParameterAssert(nativeDataChannel); |
186 if (self = [super init]) { | 171 if (self = [super init]) { |
187 _nativeDataChannel = nativeDataChannel; | 172 _nativeDataChannel = nativeDataChannel; |
188 _observer.reset(new webrtc::DataChannelDelegateAdapter(self)); | 173 _observer.reset(new webrtc::DataChannelDelegateAdapter(self)); |
| 174 _nativeDataChannel->RegisterObserver(_observer.get()); |
189 } | 175 } |
190 return self; | 176 return self; |
191 } | 177 } |
192 | 178 |
193 + (webrtc::DataChannelInterface::DataState) | 179 + (webrtc::DataChannelInterface::DataState) |
194 nativeDataChannelStateForState:(RTCDataChannelState)state { | 180 nativeDataChannelStateForState:(RTCDataChannelState)state { |
195 switch (state) { | 181 switch (state) { |
196 case RTCDataChannelStateConnecting: | 182 case RTCDataChannelStateConnecting: |
197 return webrtc::DataChannelInterface::DataState::kConnecting; | 183 return webrtc::DataChannelInterface::DataState::kConnecting; |
198 case RTCDataChannelStateOpen: | 184 case RTCDataChannelStateOpen: |
(...skipping 26 matching lines...) Expand all Loading... |
225 case RTCDataChannelStateOpen: | 211 case RTCDataChannelStateOpen: |
226 return @"Open"; | 212 return @"Open"; |
227 case RTCDataChannelStateClosing: | 213 case RTCDataChannelStateClosing: |
228 return @"Closing"; | 214 return @"Closing"; |
229 case RTCDataChannelStateClosed: | 215 case RTCDataChannelStateClosed: |
230 return @"Closed"; | 216 return @"Closed"; |
231 } | 217 } |
232 } | 218 } |
233 | 219 |
234 @end | 220 @end |
OLD | NEW |