call method
Implementation
Future<Res> call(
String endpoint, {
NawahQuery? query,
Res? doc,
bool awaitAuth = false,
}) {
Res callArgs = {
'endpoint': endpoint,
'query': query ?? NawahQuery(),
'doc': doc ?? {},
'awaitAuth': awaitAuth,
'call_id': null,
};
final completer = Completer<Res>();
// ignore: non_constant_identifier_names
String call_id = generateRandomString(7);
callArgs['call_id'] = call_id;
_listeners[NawahListenerKey.message]!.add(
NawahMessageListener(
filter: (res) => res['args']['call_id'] == call_id,
callable: (nawah, res) {
NawahDI.get<INawahLogger>()?.log(
this,
'message received from observer on call_id: $call_id, $res',
);
if (res['status'] != 200) return completer.completeError(res);
completer.complete(res);
},
once: true,
),
);
final isConnected = connState == ConnState.connected;
final isAuthed = callArgs['awaitAuth'] && authState == AuthState.authed || !callArgs['awaitAuth'];
if (isConnected && isAuthed) {
_sendCall(
callArgs: callArgs,
completer: completer,
);
return completer.future;
}
NawahDI.get<INawahLogger>()?.warn(
this,
'Connection not yet established, or require Authed status. Queuing call: $callArgs',
);
if (callArgs['awaitAuth']) {
NawahDI.get<INawahLogger>()?.warn(this, 'Queuing in auth queue');
_queue[NawahQueueKey.auth]!.add({
'callArgs': callArgs,
'completer': completer,
});
} else {
NawahDI.get<INawahLogger>()?.warn(this, 'Queuing in noAuth queue');
_queue[NawahQueueKey.noAuth]!.add({
'callArgs': callArgs,
'completer': completer,
});
}
return completer.future;
}