createClient function
Creates a disposable GraphQL over WebSocket client.
@category Client
Implementation
TransportWsClient createClient(TransportWsClientOptions options) {
// websocket status emitter, subscriptions are handled differently
final emitter = (() {
final Map<String, _EventMessageListener> _listenersMessage = {};
void Function() onMessage(String id, _EventMessageListener listener) {
_listenersMessage[id] = listener;
return () {
_listenersMessage.remove(id);
};
}
void emitMessage(TransportWsMessage message) {
_listenersMessage[message.id]?.call(message);
}
final Map<TransportWsEventType, List<TransportWsEventHandler>> listeners =
Map.fromIterables(
TransportWsEventType.values,
TransportWsEventType.values.map((e) => []),
);
listeners[TransportWsEventType.message]!
.add(TransportWsEventHandler<void>(message: emitMessage));
final on = options.eventHandlers;
if (on != null) {
for (final handler in on) {
for (final type in handler.eventTypesHandled()) {
listeners[type]!.add(handler);
}
}
}
return _Emitter(
onMessage: onMessage,
listeners: listeners,
log: options.log,
);
})();
final state = _ConnectionState(
emitter: emitter,
options: options,
);
return _Client(state: state);
}