From 313a2acbf66125feb4b145a5636351ed03e666da Mon Sep 17 00:00:00 2001 From: lolka1333 Date: Sat, 3 Jan 2026 05:26:00 +0100 Subject: feat: Add WebSocket support for real-time updates and enhance VLESS settings (#3605) * feat: add support for trusted X-Forwarded-For and testseed parameters in VLESS settings * chore: update Xray Core version to 25.12.8 in release workflow * chore: update Xray Core version to 25.12.8 in Docker initialization script * chore: bump version to 2.8.6 and add watcher for security changes in inbound modal * refactor: remove default and random seed buttons from outbound form * refactor: update VLESS form to rename 'Test Seed' to 'Vision Seed' and change button functionality for seed generation * refactor: enhance TLS settings form layout with improved button styling and spacing * feat: integrate WebSocket support for real-time updates on inbounds and Xray service status * chore: downgrade version to 2.8.5 * refactor: translate comments to English * fix: ensure testseed is initialized correctly for VLESS protocol and improve client handling in inbound modal * refactor: simplify VLESS divider condition by removing unnecessary flow checks * fix: add fallback date formatting for cases when IntlUtil is not available * refactor: simplify WebSocket message handling by removing batching and ensuring individual message delivery * refactor: disable WebSocket notifications in inbound and index HTML files * refactor: enhance VLESS testseed initialization and button functionality in inbound modal * fix: * refactor: ensure proper WebSocket URL construction by normalizing basePath * fix: * fix: * fix: * refactor: update testseed methods for improved reactivity and binding in VLESS form * logger info to debug --------- Co-authored-by: lolka1333 --- web/websocket/notifier.go | 74 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 web/websocket/notifier.go (limited to 'web/websocket/notifier.go') diff --git a/web/websocket/notifier.go b/web/websocket/notifier.go new file mode 100644 index 00000000..cedf56f2 --- /dev/null +++ b/web/websocket/notifier.go @@ -0,0 +1,74 @@ +// Package websocket provides WebSocket hub for real-time updates and notifications. +package websocket + +import ( + "github.com/mhsanaei/3x-ui/v2/logger" + "github.com/mhsanaei/3x-ui/v2/web/global" +) + +// GetHub returns the global WebSocket hub instance +func GetHub() *Hub { + webServer := global.GetWebServer() + if webServer == nil { + return nil + } + hub := webServer.GetWSHub() + if hub == nil { + return nil + } + wsHub, ok := hub.(*Hub) + if !ok { + logger.Warning("WebSocket hub type assertion failed") + return nil + } + return wsHub +} + +// BroadcastStatus broadcasts server status update to all connected clients +func BroadcastStatus(status interface{}) { + hub := GetHub() + if hub != nil { + hub.Broadcast(MessageTypeStatus, status) + } +} + +// BroadcastTraffic broadcasts traffic statistics update to all connected clients +func BroadcastTraffic(traffic interface{}) { + hub := GetHub() + if hub != nil { + hub.Broadcast(MessageTypeTraffic, traffic) + } +} + +// BroadcastInbounds broadcasts inbounds list update to all connected clients +func BroadcastInbounds(inbounds interface{}) { + hub := GetHub() + if hub != nil { + hub.Broadcast(MessageTypeInbounds, inbounds) + } +} + +// BroadcastNotification broadcasts a system notification to all connected clients +func BroadcastNotification(title, message, level string) { + hub := GetHub() + if hub != nil { + notification := map[string]string{ + "title": title, + "message": message, + "level": level, // info, warning, error, success + } + hub.Broadcast(MessageTypeNotification, notification) + } +} + +// BroadcastXrayState broadcasts Xray state change to all connected clients +func BroadcastXrayState(state string, errorMsg string) { + hub := GetHub() + if hub != nil { + stateUpdate := map[string]string{ + "state": state, + "errorMsg": errorMsg, + } + hub.Broadcast(MessageTypeXrayState, stateUpdate) + } +} -- cgit v1.2.3