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');
  } );
}