emit method

void emit(
  1. dynamic data
)

Implementation

void emit(data) {
  //print(data);

  switch (data['type']) {
    case "StasisStart":
      Channel channel;

      // if (data['channel']['name'].contains('UnicastRTP')) {
      //   // print('Channel ${channel.name} has entered our application');
      //   // print(channel.handlers);
      //   // dialed = true;
      //   if (statisChannels[data['channel']['id']] == null) {
      //     throw "Channel should be in stasis channels";
      //   } else {
      //     print("Channel already in stsais Channels");
      //     if (statisChannels[data['channel']['id']]!.handlers.isEmpty) {
      //       throw "channel event handlers should not be empty";
      //     }
      //   }
      // }
      StasisStart stasisStart = StasisStart.fromJson(data);
      channel = Channel.fromJson(data['channel']);
      if (statisChannels[data['channel']['id']] != null) {
        // if (stasisStart.args.length > 0) {
        //   throw "This channel should be in statisChannels";
        // }
        if (statisChannels[data['channel']['id']]!.handlers.isNotEmpty) {
          channel.handlers = statisChannels[data['channel']['id']]!.handlers;
          statisChannels[data['channel']['id']] = channel;
        }
      } else {
        statisChannels[data['channel']['id']] = channel;
      }
      if (handlers[data['type']] != null) {
        handlers[data['type']]!(stasisStart, channel);
      }
      //print("Channel event handlers: ${channel.handlers}");
      // if (channel.handlers.isEmpty) {
      //   throw "Channel event handlers cannot be empty";
      // }

      if (channel.handlers[data['type']] != null) {
        //print("Event ${data['type']} fired from channel in stasis");
        channel.handlers[data['type']]!(stasisStart, channel);
      }

    case 'StasisEnd':
      Channel channel;
      StasisEnd stasisEnd = StasisEnd.fromJson(data);
      channel = Channel.fromJson(data['channel']);
      if (statisChannels[data['channel']['id']] != null) {
        // if (stasisStart.args.length > 0) {
        //   throw "This channel should be in statisChannels";
        // }
        if (statisChannels[data['channel']['id']]!.handlers.isNotEmpty) {
          channel.handlers = statisChannels[data['channel']['id']]!.handlers;
          statisChannels[data['channel']['id']] = channel;
        }
      } else {
        statisChannels[data['channel']['id']] = channel;
      }
      if (handlers[data['type']] != null) {
        handlers[data['type']]!(stasisEnd, stasisEnd.channel);
      }
      if (channel.handlers[data['type']] != null) {
        //print("Event ${data['type']} fired from channel in stasis");
        channel.handlers[data['type']]!(stasisEnd, stasisEnd.channel);
      }

      statisChannels.remove(channel.id);

    case 'ChannelDestroyed':
      ChannelDestroyed channelDestroyed = ChannelDestroyed.fromJson(data);
      Channel channel = Channel.fromJson(data['channel']);

      if (statisChannels[data['channel']['id']] != null) {
        // if (stasisStart.args.length > 0) {
        //   throw "This channel should be in statisChannels";
        // }
        if (statisChannels[data['channel']['id']]!.handlers.isNotEmpty) {
          channel.handlers = statisChannels[data['channel']['id']]!.handlers;
          statisChannels[data['channel']['id']] = channel;
        }
      } else {
        statisChannels[data['channel']['id']] = channel;
      }
      if (handlers[data['type']] != null) {
        //print(data['type']);
        // Channel channel = Channel.fromJson(data['channel']);
        // if (statisChannels[channel.id] == null) {
        //   statisChannels[channel.id] = channel;
        // }

        handlers[data['type']]!(channelDestroyed, channel);
      }
      if (statisChannels[data['channel']['id']] != null) {
        //Channel channel = statisChannels[data['channel']['id']]!;
        if (channel.handlers[data['type']] != null) {
          //print("Event fired from existing channel");
          channel.handlers[data['type']]!(channelDestroyed, channel);
        }
      }
    case 'ChannelStateChange':
      ChannelStateChange channelStateChange =
          ChannelStateChange.fromJson(data);
      Channel channel = Channel.fromJson(data['channel']);

      if (statisChannels[data['channel']['id']] != null) {
        // if (stasisStart.args.length > 0) {
        //   throw "This channel should be in statisChannels";
        // }
        if (statisChannels[data['channel']['id']]!.handlers.isNotEmpty) {
          channel.handlers = statisChannels[data['channel']['id']]!.handlers;
          statisChannels[data['channel']['id']] = channel;
        }
      } else {
        statisChannels[data['channel']['id']] = channel;
      }
      if (handlers[data['type']] != null) {
        handlers[data['type']]!(channelStateChange, channel);
      }
      if (statisChannels[data['channel']['id']] != null) {
        if (channel.handlers[data['type']] != null) {
          //print("Event fired from existing channel");
          channel.handlers[data['type']]!(channelStateChange, channel);
        }
      }

    case 'ChannelDtmfReceived':
      ChannelDtmfReceived channelDtmfReceived =
          ChannelDtmfReceived.fromJson(data);
      Channel channel = Channel.fromJson(data['channel']);

      if (statisChannels[data['channel']['id']] != null) {
        // if (stasisStart.args.length > 0) {
        //   throw "This channel should be in statisChannels";
        // }
        if (statisChannels[data['channel']['id']]!.handlers.isNotEmpty) {
          channel.handlers = statisChannels[data['channel']['id']]!.handlers;
          statisChannels[data['channel']['id']] = channel;
        }
      } else {
        statisChannels[data['channel']['id']] = channel;
      }
      if (handlers[data['type']] != null) {
        handlers[data['type']]!(channelDtmfReceived, channel);
      }
      if (statisChannels[data['channel']['id']] != null) {
        if (channel.handlers[data['type']] != null) {
          //print("Event fired from existing channel");
          channel.handlers[data['type']]!(channelDtmfReceived, channel);
        }
      }

    case 'PlaybackFinished':
      print(data);
      PlaybackFinished playbackFinished = PlaybackFinished.fromJson(data);
      Playback playback = Playback.fromJson(data['playback']);
      print(statisPlaybacks[data['playback']['id']]);

      if (statisPlaybacks[data['playback']['id']] != null) {
        // if (stasisStart.args.length > 0) {
        //   throw "This channel should be in statisChannels";
        // }

        if (statisPlaybacks[data['playback']['id']]!.handlers.isNotEmpty) {
          playback.handlers =
              statisPlaybacks[data['playback']['id']]!.handlers;
          statisPlaybacks[data['playback']['id']] = playback;
        }
      } else {
        statisPlaybacks[data['playback']['id']] = playback;
      }
      // if (handlers[data['type']] != null) {
      //   handlers[data['type']]!(playbackFinished, playback);
      // }
      if (statisPlaybacks[data['playback']['id']] != null) {
        if (playback.handlers[data['type']] != null) {
          //print("Event fired from existing channel");
          playback.handlers[data['type']]!(playbackFinished, playback);
        }
      }
    //handlers[data['type']]!(data);
  }
}