emitHandler method
dynamic
emitHandler()
Implementation
emitHandler() {
_ws.on('event', (dynamic jsonMsg) async {
var pmsg = jsonDecode(jsonMsg);
Map<String, dynamic> userEventMsg = {};
switch (pmsg['cmd']) {
case 'WS_BROADCAST_NOTI':
if (pmsg['room_type'] == RoomType.audiocall.value) {
return;
}
if (pmsg['room_type'] == RoomType.videocall.value) {
if (_turnId == '' || _turnSecret == '') {
throw ErrorDescription('Invalid websocket connection state');
}
var subscriber =
VideoSubscriber(_ws, _session, _turnId, _turnSecret);
await subscriber.pcInitializer();
var subResult =
await _ws.requestSubscribe(pmsg['session'], _remoteRenderer);
await subscriber.subscribe(subResult, _remoteRenderer);
}
userEventMsg = BroadcastingEvent(pmsg).toMap();
break;
case 'WS_LEAVE_NOTI':
userEventMsg = LeaveEvent(pmsg).toMap();
break;
case 'WS_CALL_CONNECTED_NOTI':
userEventMsg = ConnectedEvent(pmsg).toMap();
break;
case 'WS_RINGBACK_NOTI':
userEventMsg['cmd'] = 'RINGBACK_EVENT';
userEventMsg = RingbackEvent(pmsg['session'], pmsg['caller'],
pmsg['callee'], pmsg['call_type'])
.toMap();
break;
case 'WS_RINGING_NOTI':
_callInfo = pmsg;
userEventMsg = RingingEvent(pmsg).toMap();
break;
case 'WS_MUTE_NOTI':
userEventMsg = MuteEvent(pmsg).toMap();
break;
case 'WS_UNMUTE_NOTI':
userEventMsg = UnmuteEvent(pmsg).toMap();
break;
case 'WS_MESSAGE_NOTI':
userEventMsg = MessageEvent(pmsg).toMap();
break;
case 'WS_KICKOUT_NOTI':
userEventMsg = KickoutEvent(pmsg).toMap();
break;
}
emit('event', userEventMsg);
});
_ws.on('trickle', (Map<String, dynamic> pmsg) async {
if (pmsg['track'] == 1) { // audio
await _audioPublisher?.addCandidate(pmsg['candidate']);
} else {
if (_session == pmsg['session']) {
await _videoPublisher?.addCandidate(pmsg['candidate']);
} else {
var subscriber = _subscribers[pmsg['session']];
await subscriber?.addCandidate(pmsg['candidate']);
}
}
});
_ws.on('onClose', (dynamic emptyMsg) async {
debugPrint("onClose !!!");
freeResources();
emit('onClose');
} );
}