Implementation
Future<void> create() async {
try {
String transaction = getUuid().v4();
Map<String, dynamic> request = {
"janus": "create",
"transaction": transaction,
..._context._tokenMap,
..._context._apiMap
}..removeWhere((key, value) => value == null);
Map<String, dynamic>? response;
if (_transport is RestJanusTransport) {
RestJanusTransport rest = (_transport as RestJanusTransport);
response = (await rest.post(request)) as Map<String, dynamic>?;
if (response != null) {
if (response.containsKey('janus') && response.containsKey('data')) {
_sessionId = response['data']['id'];
rest.sessionId = sessionId;
}
} else {
throw "Janus Server not live or incorrect url/path specified";
}
} else if (_transport is WebSocketJanusTransport) {
WebSocketJanusTransport ws = (_transport as WebSocketJanusTransport);
if (!ws.isConnected) {
ws.connect();
}
ws.sink!.add(stringify(request));
response = parse(await ws.stream.firstWhere(
(element) => (parse(element)['transaction'] == transaction)));
if (response!.containsKey('janus') && response.containsKey('data')) {
_sessionId = response['data']['id'] as int?;
ws.sessionId = sessionId;
}
}
_keepAlive();
} on WebSocketChannelException catch (e) {
throw "Connection to given url can't be established\n reason:-" +
e.message!;
} catch (e) {
throw "Connection to given url can't be established\n reason:-" +
e.toString();
}
}