listen method

StreamSubscription listen({
  1. required dynamic onMessage(
    1. TIncoming message
    ),
  2. dynamic onErrorMessage(
    1. ArriError error
    )?,
  3. dynamic onEvent(
    1. WsEvent<TIncoming> event
    )?,
  4. dynamic onConnectionError(
    1. Object?
    )?,
  5. dynamic onDone()?,
  6. bool? cancelOnError,
})

Implementation

StreamSubscription listen({
  /**
   * Fires when receiving a "message" event from the server
   */
  required Function(TIncoming message) onMessage,
  /**
   * Fires when receiving an "error" event from the server
   */
  Function(ArriError error)? onErrorMessage,
  /**
   * Fires when receiving any event from the server
   */
  Function(WsEvent<TIncoming> event)? onEvent,
  Function(Object?)? onConnectionError,
  Function()? onDone,
  bool? cancelOnError,
}) {
  return channel.stream.listen(
    (message) {
      if (message is! String) {
        return;
      }
      final event = WsEvent.fromString(message, parser);
      onEvent?.call(event);
      switch (event) {
        case WsMessageEvent<TIncoming>():
          onMessage(event.data);
          break;
        case WsErrorEvent<TIncoming>():
          onErrorMessage?.call(event.data);
          break;
        case WsRawEvent<TIncoming>():
          break;
      }
    },
    onError: onConnectionError,
    onDone: onDone,
    cancelOnError: cancelOnError,
  );
}