openWebSocket method
void
openWebSocket()
Opens a websocket for receiving Capture events.
After each received event, re-sends waitforcaptureevent so the server
delivers the next one (long-polling protocol).
Implementation
void openWebSocket() {
websocket = WebSocketChannel.connect(Uri.parse(hostWebsocket));
logger?.log('websocket =>', 'open attempt');
_sendWaitForEvent();
websocket!.stream.listen(
(dynamic message) {
logger?.log('receiving something through the websocket:', message);
final Map<String, dynamic> jsonRes =
json.decode(message as String) as Map<String, dynamic>;
final JRpcResponse response = JRpcResponse.fromJson(jsonRes);
final CaptureResult? result = response.captureResult;
final CaptureEvent? event = result?.event;
if (event != null) {
notification(event, result?.handle);
} else if (jsonRes['error'] != null) {
logger!.log('Error in listener',
'${jsonRes['error']['code']}: ${jsonRes['error']['message']}');
final CaptureException err = CaptureException(
jsonRes['error']['code'] as int,
jsonRes['error']['message'] as String);
notification(err, 00000);
} else {
logger?.log('websocket =>', 'No result returned');
}
},
onDone: () {
logger?.log('websocket =>', 'websocket closed!');
},
onError: (dynamic error) {
final CaptureException err;
if (error is WebSocketChannelException) {
err = CaptureException(
SktErrors.ESKT_SERVICENOTCOMMUNICATING,
'WebSocket channel error: ${error.message}',
);
} else {
err = CaptureException(
SktErrors.ESKT_SERVICENOTCOMMUNICATING,
'Service is unable to communicate',
);
}
notification(err);
},
);
}