diff --git a/websocket/server.go b/websocket/server.go index 02a7ecdb..3ef38450 100644 --- a/websocket/server.go +++ b/websocket/server.go @@ -106,7 +106,7 @@ type ( config Config connections connections rooms map[string][]string // by default a connection is joined to a room which has the connection id as its name - mu sync.Mutex // for rooms + mu sync.RWMutex // for rooms onConnectionListeners []ConnectionFunc //connectionPool sync.Pool // sadly we can't make this because the websocket connection is live until is closed. handler context.Handler @@ -305,6 +305,30 @@ func (s *Server) leave(roomName string, connID string) (left bool) { return } +// GetTotalConnections returns the number of total connections +func (s *Server) GetTotalConnections() int { + s.mu.RLock() + l := len(s.connections) + s.mu.RUnlock() + return l +} + +// GetConnections returns all connections +func (s *Server) GetConnections() []Connection { + s.mu.RLock() + conns := make([]Connection, len(s.connections), len(s.connections)) + for i, c := range s.connections { + conns[i] = c.value + } + s.mu.RUnlock() + return conns +} + +// GetConnection returns single connection +func (s *Server) GetConnection(key string) Connection { + return s.connections.get(key) +} + // GetConnectionsByRoom returns a list of Connection // which are joined to this room. func (s *Server) GetConnectionsByRoom(roomName string) []Connection {