Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve websocket #93

Merged
merged 2 commits into from
Jul 16, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions lib/src/http/request/request_body.dart
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ class RequestBody {
return <String, dynamic>{};
}

/*
static Map<String, dynamic> _extractUrlEncodedData(String inputString) {
Map<String, dynamic> resultMap = {};
List<String> keyValuePairs = inputString.split('&');
Expand All @@ -53,6 +54,7 @@ class RequestBody {

return resultMap;
}
*/

// static bool _extractUrlEncodedData(String encodedData) {
// List data = encodedData.split("&");
Expand Down
7 changes: 5 additions & 2 deletions lib/src/websocket/web_socket_handler.dart
Original file line number Diff line number Diff line change
@@ -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';
Expand Down Expand Up @@ -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);

Expand All @@ -48,6 +48,9 @@ class WebSocketHandler implements WebSocketEvent {

websocket.add(jsonEncode({
'event': 'connect',
'payload': {
'session_id': sessionId,
},
}));

websocket.listen((data) async {
Expand Down
22 changes: 22 additions & 0 deletions lib/src/websocket/websocket_client.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@ import 'websocket_session.dart';
abstract class WebSocketClient {
const WebSocketClient();
String get clientId;
List<String> get activeSessions;
List<String> 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);
Expand All @@ -24,6 +29,9 @@ class WebSocketClientImpl implements WebSocketClient {
@override
String get clientId => id;

@override
List<String> get activeSessions => session.getActiveSessionIds();

/// emit to self sender
/// ```
/// event.emit('event',payload)
Expand Down Expand Up @@ -97,4 +105,18 @@ class WebSocketClientImpl implements WebSocketClient {
void leftRoom(String roomId) {
toRoom("left-room", roomId, "left room");
}

@override
List<String> 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);
}
6 changes: 5 additions & 1 deletion lib/src/websocket/websocket_session.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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<SessionInfo> getActiveSessions() {
return _activeSessions.values.toList();
}

List<String> getActiveSessionIds() {
return _activeSessions.keys.toList();
}
}
Loading