1
0
mirror of https://gitlab.com/comunic/comunicmobile synced 2024-11-26 06:49:22 +00:00

Connect to WebSocket

This commit is contained in:
Pierre HUBERT 2020-04-17 16:04:47 +02:00
parent 9021ca7168
commit de3cd9c7b7
2 changed files with 44 additions and 3 deletions

View File

@ -1,15 +1,54 @@
import 'package:comunic/models/api_request.dart';
import 'package:comunic/models/config.dart';
import 'package:web_socket_channel/web_socket_channel.dart';
/// User web socket helper /// User web socket helper
/// ///
/// @author Pierre Hubert /// @author Pierre Hubert
class WebSocketHelper { class WebSocketHelper {
/// Check out whether we are currently connected to websocket or not static WebSocketChannel _ws;
/// Check out whether we are currently connected to WebSocket or not
static bool isConnected() { static bool isConnected() {
return true; return _ws != null && _ws.closeCode == null;
} }
/// Get WebSocket access token
//TODO : Handles the case user tokens were destroyed (auto sign-out user)
static Future<String> _getWsToken() async =>
(await APIRequest(uri: "ws/token", needLogin: true).exec())
.assertOk()
.getObject()["token"];
/// Connect to WebSocket /// Connect to WebSocket
static connect() async { static connect() async {
if (isConnected()) return; if (isConnected()) return;
// First, get an access token
final token = await _getWsToken();
// Determine websocket URI
final wsURL =
"${(config().apiServerSecure ? "wss" : "ws")}://${config()
.apiServerName}${config().apiServerUri}ws?token=$token";
final wsURI = Uri.parse(wsURL);
// Connect
_ws = WebSocketChannel.connect(wsURI);
_ws.stream.listen(
// When we got data
(onData) => print("WS New data: $onData"),
// Print errors on console
onError: (e, stack) {
print("WS error! $e");
print(stack);
},
// Notify when the channel is closed
onDone: () => print("WS Channel closed"),
);
} }
} }

View File

@ -49,7 +49,9 @@ class _InitializeWidgetState extends State<InitializeWidget> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return WebSocketHelper.isConnected() ? MainRoute() : _buildNonReadyWidget(); return !_error && WebSocketHelper.isConnected()
? MainRoute()
: _buildNonReadyWidget();
} }
/// Build loading widget /// Build loading widget