Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/MHSanaei/3x-ui.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'web/websocket/notifier.go')
-rw-r--r--web/websocket/notifier.go74
1 files changed, 74 insertions, 0 deletions
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)
+ }
+}