From 1776aa45ed7f9806863df717f1e8ebd123d0a7ef Mon Sep 17 00:00:00 2001 From: Javad Zobeidi Date: Tue, 16 Jul 2024 11:02:09 +0330 Subject: [PATCH 1/2] Fix web socket session id --- lib/src/websocket/web_socket_handler.dart | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/src/websocket/web_socket_handler.dart b/lib/src/websocket/web_socket_handler.dart index e60bc5c..b609647 100644 --- a/lib/src/websocket/web_socket_handler.dart +++ b/lib/src/websocket/web_socket_handler.dart @@ -1,6 +1,6 @@ import 'dart:convert'; import 'dart:io'; -import 'package:uuid/v4.dart'; +import 'package:uuid/v8.dart'; import 'package:vania/src/http/middleware/middleware.dart'; import 'package:vania/src/http/middleware/web_socket_middleware_handler.dart'; import 'websocket_client.dart'; @@ -36,7 +36,7 @@ class WebSocketHandler implements WebSocketEvent { WebSocket websocket = await WebSocketTransformer.upgrade(req); - String sessionId = 'ws:${UuidV4().generate()}'; + String sessionId = 'ws:${UuidV8().generate()}'; _session.addNewSession(sessionId, websocket); @@ -48,6 +48,9 @@ class WebSocketHandler implements WebSocketEvent { websocket.add(jsonEncode({ 'event': 'connect', + 'payload': { + 'session_id': sessionId, + }, })); websocket.listen((data) async { From 4b6f589d9d15f883a8190838b29bcb9c24aa1b78 Mon Sep 17 00:00:00 2001 From: Javad Zobeidi Date: Tue, 16 Jul 2024 11:03:45 +0330 Subject: [PATCH 2/2] Add active sessions, active room,previous room get room members and is active session to websocket cllient --- lib/src/http/request/request_body.dart | 2 ++ lib/src/websocket/websocket_client.dart | 22 ++++++++++++++++++++++ lib/src/websocket/websocket_session.dart | 6 +++++- 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/lib/src/http/request/request_body.dart b/lib/src/http/request/request_body.dart index 217d9c3..66a1643 100644 --- a/lib/src/http/request/request_body.dart +++ b/lib/src/http/request/request_body.dart @@ -40,6 +40,7 @@ class RequestBody { return {}; } +/* static Map _extractUrlEncodedData(String inputString) { Map resultMap = {}; List keyValuePairs = inputString.split('&'); @@ -53,6 +54,7 @@ class RequestBody { return resultMap; } +*/ // static bool _extractUrlEncodedData(String encodedData) { // List data = encodedData.split("&"); diff --git a/lib/src/websocket/websocket_client.dart b/lib/src/websocket/websocket_client.dart index 963315c..3a931ef 100644 --- a/lib/src/websocket/websocket_client.dart +++ b/lib/src/websocket/websocket_client.dart @@ -5,6 +5,11 @@ import 'websocket_session.dart'; abstract class WebSocketClient { const WebSocketClient(); String get clientId; + List get activeSessions; + List getRoomMembers({String roomId = ''}); + bool isActiveSession({String sessionId = ''}); + String get activeRoom; + String get previousRoom; void emit(String event, dynamic payload); void toRoom(String event, String room, dynamic payload); void broadcast(String event, dynamic payload); @@ -24,6 +29,9 @@ class WebSocketClientImpl implements WebSocketClient { @override String get clientId => id; + @override + List get activeSessions => session.getActiveSessionIds(); + /// emit to self sender /// ``` /// event.emit('event',payload) @@ -97,4 +105,18 @@ class WebSocketClientImpl implements WebSocketClient { void leftRoom(String roomId) { toRoom("left-room", roomId, "left room"); } + + @override + List getRoomMembers({String roomId = ''}) => + session.getRoomMembers(roomId); + + @override + String get activeRoom => session.getWebSocketInfo(id)?.activeRoom ?? ''; + + @override + String get previousRoom => session.getWebSocketInfo(id)?.previousRoom ?? ''; + + @override + bool isActiveSession({String sessionId = ''}) => + session.isActiveSession(sessionId); } diff --git a/lib/src/websocket/websocket_session.dart b/lib/src/websocket/websocket_session.dart index 61ae976..3ebcc2e 100644 --- a/lib/src/websocket/websocket_session.dart +++ b/lib/src/websocket/websocket_session.dart @@ -86,11 +86,15 @@ class WebsocketSession { return _rooms[roomId] != null ? true : false; } - bool isSession(String sessionId) { + bool isActiveSession(String sessionId) { return _activeSessions[sessionId] != null ? true : false; } List getActiveSessions() { return _activeSessions.values.toList(); } + + List getActiveSessionIds() { + return _activeSessions.keys.toList(); + } }