emit method
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;
}