|
- package socketwrap
-
- import (
- "code.gitea.io/gitea/models"
- )
-
- type ClientsManager struct {
- Clients map[*Client]bool
- Register chan *Client
- Unregister chan *Client
- }
-
- func NewClientsManager() *ClientsManager {
- return &ClientsManager{
- Register: make(chan *Client),
- Unregister: make(chan *Client),
- Clients: make(map[*Client]bool),
- }
- }
-
- var LastTenActionsQueue = NewSyncQueue(10)
-
- func (h *ClientsManager) Run() {
- for {
- select {
- case client := <-h.Register:
- h.Clients[client] = true
- case client := <-h.Unregister:
- if _, ok := h.Clients[client]; ok {
- delete(h.Clients, client)
- close(client.Send)
- }
- case message := <-models.ActionChan:
- LastTenActionsQueue.Push(message)
- for client := range h.Clients {
- select {
- case client.Send <- message:
- default:
- close(client.Send)
- delete(h.Clients, client)
- }
- }
-
- }
- }
- }
|