You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

clientManager.go 883 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. package socketwrap
  2. import (
  3. "code.gitea.io/gitea/models"
  4. )
  5. type ClientsManager struct {
  6. Clients map[*Client]bool
  7. Register chan *Client
  8. Unregister chan *Client
  9. }
  10. func NewClientsManager() *ClientsManager {
  11. return &ClientsManager{
  12. Register: make(chan *Client),
  13. Unregister: make(chan *Client),
  14. Clients: make(map[*Client]bool),
  15. }
  16. }
  17. var LastTenActionsQueue = NewSyncQueue(10)
  18. func (h *ClientsManager) Run() {
  19. for {
  20. select {
  21. case client := <-h.Register:
  22. h.Clients[client] = true
  23. case client := <-h.Unregister:
  24. if _, ok := h.Clients[client]; ok {
  25. delete(h.Clients, client)
  26. close(client.Send)
  27. }
  28. case message := <-models.ActionChan:
  29. LastTenActionsQueue.Push(message)
  30. for client := range h.Clients {
  31. select {
  32. case client.Send <- message:
  33. default:
  34. close(client.Send)
  35. delete(h.Clients, client)
  36. }
  37. }
  38. }
  39. }
  40. }