Multiple improvements in authentication functionality
This commit is contained in:
1 parent
bd5c4e002f
commit
fbee31841d
11 files changed
+260
-17
No files matched your search
@@ -6,26 +6,46 @@ import 'dart:async'; // Import for handling Completers
|
||||
class Backend {
|
||||
static WebSocket? _socket;
|
||||
static String? _url;
|
||||
static String? _username;
|
||||
static Map<int, Completer> _pendingActions = {};
|
||||
static Map<int, StreamController<Map<String, dynamic>>> _chatControllers = {};
|
||||
static int _nextNonce = 0; // Tracking nonce for each action
|
||||
static StreamController<Map<String, dynamic>> _packetStreamController = StreamController.broadcast();
|
||||
|
||||
// Authentication
|
||||
static ({String username, String password})? _credentials;
|
||||
static Completer? _loginCompleter;
|
||||
static Completer? _credentialsCompleter;
|
||||
|
||||
static void setup(String url) {
|
||||
_url = url;
|
||||
connect();
|
||||
}
|
||||
|
||||
static void auth(String username, String password) {
|
||||
static Future<void> auth(String username, String password) {
|
||||
_socket!.send(json.encode({'username': username, 'password': password}));
|
||||
_username = username;
|
||||
_credentials = (username: username, password: password);
|
||||
if (_credentialsCompleter != null) {
|
||||
_credentialsCompleter!.complete(_credentials);
|
||||
_credentialsCompleter = null;
|
||||
}
|
||||
_loginCompleter = Completer();
|
||||
return _loginCompleter!.future;
|
||||
}
|
||||
|
||||
static void connect() {
|
||||
_socket = WebSocket(_url!);
|
||||
_socket!.onOpen.listen((event) {
|
||||
print('Connected to the WebSocket server');
|
||||
print('Logging in...');
|
||||
if (_credentials != null) {
|
||||
_socket!.send(json.encode({'username': _credentials!.username, 'password': _credentials!.password}));
|
||||
} else {
|
||||
_credentialsCompleter = Completer();
|
||||
_credentialsCompleter!.future.then((credentials) {
|
||||
_socket!.send(json.encode({'username': credentials.username, 'password': credentials.password}));
|
||||
});
|
||||
}
|
||||
_loginCompleter?.complete();
|
||||
});
|
||||
_socket!.onError.listen((event) {
|
||||
print('Error: $event');
|
||||
@@ -40,6 +60,11 @@ class Backend {
|
||||
});
|
||||
}
|
||||
|
||||
static void disconnect() {
|
||||
_socket?.close();
|
||||
_loginCompleter = null;
|
||||
}
|
||||
|
||||
static void _reconnect() {
|
||||
Future.delayed(Duration(seconds: 5), () {
|
||||
connect();
|
||||
|
||||
Reference in new issue
Block a user