package main import ( "fmt" "log" "api-service/internal/config" "api-service/internal/database" v1 "api-service/internal/routes/v1" ) func main() { // Load configuration cfg := config.LoadConfig() cfg.Validate() // Initialize database service dbService := database.New(cfg) _ = dbService // Mark as used to avoid compiler warning // Create router router := v1.RegisterRoutes(cfg) // Get WebSocket handler from the router (this is a simplified example) // In a real application, you'd inject the handler or use dependency injection fmt.Println("WebSocket Server Example with Server-Initiated Broadcasts") fmt.Println("========================================================") fmt.Println() fmt.Println("This example demonstrates how to broadcast messages from the server") fmt.Println("to all connected WebSocket clients.") fmt.Println() fmt.Println("Features demonstrated:") fmt.Println("- Broadcasting messages to all clients") fmt.Println("- Broadcasting to specific rooms") fmt.Println("- Periodic heartbeat messages") fmt.Println("- Simulated data streaming") fmt.Println() fmt.Println("To test:") fmt.Println("1. Start the Go API server: go run cmd/api/main.go") fmt.Println("2. Start the Nuxt 3 client: cd examples/nuxt3-websocket-client && npm run dev") fmt.Println("3. Open browser at http://localhost:3001") fmt.Println("4. You should see connection status and incoming messages") fmt.Println() fmt.Println("The server will automatically send:") fmt.Println("- Welcome message on connection") fmt.Println("- Heartbeat messages every 30 seconds") fmt.Println("- Simulated data every 10 seconds") fmt.Println() fmt.Println("You can also send messages from the client to the server.") fmt.Println() // Start server fmt.Println("Starting server on :8080...") log.Fatal(router.Run(":8080")) } // Example of how to broadcast messages programmatically // This would typically be called from your business logic func exampleBroadcasts() { // This is pseudo-code showing how you would use the WebSocket handler // In a real application, you'd get the handler instance from your dependency injection /* // Broadcast to all clients websocketHandler.BroadcastMessage("announcement", map[string]interface{}{ "title": "System Update", "message": "The system will be updated in 5 minutes", }) // Broadcast to a specific room websocketHandler.BroadcastToRoom("admin", "notification", map[string]interface{}{ "level": "warning", "message": "Admin action required", }) // Send to specific client websocketHandler.SendToClient(clientID, "private", map[string]interface{}{ "message": "This is a private message", }) // Start periodic broadcasts websocketHandler.StartPeriodicBroadcast(30 * time.Second) // Start simulated data stream websocketHandler.SimulateDataStream() */ }