server.go 921 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package agent_server
  2. import (
  3. "github.com/gorilla/websocket"
  4. "log"
  5. "net/http"
  6. "nginx-ui/server/models"
  7. )
  8. var upgrader = websocket.Upgrader{
  9. ReadBufferSize: 4096,
  10. WriteBufferSize: 4096,
  11. }
  12. type Server struct {
  13. hub *Hub
  14. }
  15. var AgentHub = newHub()
  16. func NewServer() *Server {
  17. go AgentHub.run()
  18. return &Server{
  19. hub: AgentHub,
  20. }
  21. }
  22. func SetMessageHandler(key string, handler func(c *WsClient, message *models.AgentData) (interface{}, error)) {
  23. AgentHub.SetMessageHandler(key, handler)
  24. }
  25. func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
  26. conn, err := upgrader.Upgrade(w, r, nil)
  27. if err != nil {
  28. log.Println(err)
  29. return
  30. }
  31. token := r.Header.Get("Token")
  32. client := &WsClient{
  33. Token: token,
  34. hub: s.hub,
  35. conn: conn,
  36. send: make(chan []byte, 1024),
  37. callbacks: make(map[string]chan *models.AgentData),
  38. }
  39. client.hub.register <- client
  40. go client.readPump()
  41. }