emit method

Future<SocketResponse> emit(
  1. String event, [
  2. dynamic data
])

emit emits an event to the server with the given event and data. It returns a Future of SocketResponse. It uses the interceptors to intercept the request and response. It uses the checkResponse to check if the response is valid. If the response is valid, it returns the response. If the response is not valid, it throws a SocketException. If an error occurs, it throws the error.

Implementation

Future<SocketResponse> emit(String event, [data]) async {
  Completer<SocketResponse> completer = Completer<SocketResponse>();
  SocketRequest request = SocketRequest.create(event, data);

  request = interceptors.fold(
    request,
    (request, interceptor) => interceptor.onRequest(request),
  );
  _socket?.emitWithAck(request.event, request.data, ack: (data) {
    try {
      SocketResponse response = SocketResponse(data);
      if (checkResponse(data)) {
        response = interceptors.fold(
          response,
          (response, interceptor) => interceptor.onResponse(response),
        );
        completer.complete(response);
      } else {
        for (var interceptor in interceptors) {
          interceptor.onError(data);
        }
        completer.completeError(
          SocketException(response, StackTrace.current),
        );
      }
    } catch (err) {
      completer.completeError(err);
    }
  });

  return completer.future;
}