| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- // 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)
- }
- }
|