Skip to content

Commit

Permalink
api: implement connectionstatechange event
Browse files Browse the repository at this point in the history
  • Loading branch information
yahacom authored and saghul committed Jul 8, 2020
1 parent c7ee313 commit c4076ef
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 0 deletions.
20 changes: 20 additions & 0 deletions RTCPeerConnection.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,14 @@ type RTCIceGatheringState =
'gathering' |
'complete';

type RTCPeerConnectionState =
'new' |
'connecting' |
'connected' |
'disconnected' |
'failed' |
'closed';

type RTCIceConnectionState =
'new' |
'checking' |
Expand Down Expand Up @@ -63,6 +71,7 @@ export default class RTCPeerConnection extends EventTarget(PEER_CONNECTION_EVENT

signalingState: RTCSignalingState = 'stable';
iceGatheringState: RTCIceGatheringState = 'new';
connectionState: RTCPeerConnectionState = 'new';
iceConnectionState: RTCIceConnectionState = 'new';

onconnectionstatechange: ?Function;
Expand Down Expand Up @@ -267,6 +276,17 @@ export default class RTCPeerConnection extends EventTarget(PEER_CONNECTION_EVENT
this._unregisterEvents();
}
}),
EventEmitter.addListener('peerConnectionStateChanged', ev => {
if (ev.id !== this._peerConnectionId) {
return;
}
this.connectionState = ev.connectionState;
this.dispatchEvent(new RTCEvent('connectionstatechange'));
if (ev.connectionState === 'closed') {
// This PeerConnection is done, clean up event handlers.
this._unregisterEvents();
}
}),
EventEmitter.addListener('peerConnectionSignalingStateChanged', ev => {
if (ev.id !== this._peerConnectionId) {
return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -310,6 +310,15 @@ public void onIceConnectionChange(PeerConnection.IceConnectionState iceConnectio
webRTCModule.sendEvent("peerConnectionIceConnectionChanged", params);
}

@Override
public void onConnectionChange(PeerConnection.PeerConnectionState peerConnectionState) {
WritableMap params = Arguments.createMap();
params.putInt("id", id);
params.putString("connectionState", peerConnectionStateString(peerConnectionState));

webRTCModule.sendEvent("peerConnectionStateChanged", params);
}

@Override
public void onIceConnectionReceivingChange(boolean var1) {
}
Expand Down Expand Up @@ -474,6 +483,25 @@ public void onAddTrack(final RtpReceiver receiver, final MediaStream[] mediaStre
Log.d(TAG, "onAddTrack");
}

@Nullable
private String peerConnectionStateString(PeerConnection.PeerConnectionState peerConnectionState) {
switch (peerConnectionState) {
case NEW:
return "new";
case CONNECTING:
return "connecting";
case CONNECTED:
return "connected";
case DISCONNECTED:
return "disconnected";
case FAILED:
return "failed";
case CLOSED:
return "closed";
}
return null;
}

@Nullable
private String iceConnectionStateString(PeerConnection.IceConnectionState iceConnectionState) {
switch (iceConnectionState) {
Expand Down
17 changes: 17 additions & 0 deletions ios/RCTWebRTC/WebRTCModule+RTCPeerConnection.m
Original file line number Diff line number Diff line change
Expand Up @@ -375,6 +375,18 @@ - (NSString *)statsToJSON:(NSArray<RTCLegacyStatsReport *> *)reports
return s;
}

- (NSString *)stringForPeerConnectionState:(RTCPeerConnectionState)state {
switch (state) {
case RTCPeerConnectionStateNew: return @"new";
case RTCPeerConnectionStateConnecting: return @"connecting";
case RTCPeerConnectionStateConnected: return @"connected";
case RTCPeerConnectionStateDisconnected: return @"disconnected";
case RTCPeerConnectionStateFailed: return @"failed";
case RTCPeerConnectionStateClosed: return @"closed";
}
return nil;
}

- (NSString *)stringForICEConnectionState:(RTCIceConnectionState)state {
switch (state) {
case RTCIceConnectionStateNew: return @"new";
Expand Down Expand Up @@ -479,6 +491,11 @@ - (void)peerConnectionShouldNegotiate:(RTCPeerConnection *)peerConnection {
body:@{ @"id": peerConnection.reactTag }];
}

- (void)peerConnection:(RTCPeerConnection *)peerConnection didChangeConnectionState:(RTCPeerConnectionState)newState {
[self sendEventWithName:kEventPeerConnectionStateChanged
body:@{@"id": peerConnection.reactTag, @"connectionState": [self stringForPeerConnectionState:newState]}];
}

- (void)peerConnection:(RTCPeerConnection *)peerConnection didChangeIceConnectionState:(RTCIceConnectionState)newState {
[self sendEventWithName:kEventPeerConnectionIceConnectionChanged
body:@{
Expand Down
1 change: 1 addition & 0 deletions ios/RCTWebRTC/WebRTCModule.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
#import <WebRTC/RTCVideoEncoderFactory.h>

static NSString *const kEventPeerConnectionSignalingStateChanged = @"peerConnectionSignalingStateChanged";
static NSString *const kEventPeerConnectionStateChanged = @"peerConnectionStateChanged";
static NSString *const kEventPeerConnectionAddedStream = @"peerConnectionAddedStream";
static NSString *const kEventPeerConnectionRemovedStream = @"peerConnectionRemovedStream";
static NSString *const kEventPeerConnectionOnRenegotiationNeeded = @"peerConnectionOnRenegotiationNeeded";
Expand Down
1 change: 1 addition & 0 deletions ios/RCTWebRTC/WebRTCModule.m
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@ - (dispatch_queue_t)methodQueue
- (NSArray<NSString *> *)supportedEvents {
return @[
kEventPeerConnectionSignalingStateChanged,
kEventPeerConnectionStateChanged,
kEventPeerConnectionAddedStream,
kEventPeerConnectionRemovedStream,
kEventPeerConnectionOnRenegotiationNeeded,
Expand Down

0 comments on commit c4076ef

Please sign in to comment.