diff --git a/websocket/server.go b/websocket/server.go index 02a7ecdb..ed66cfc3 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,31 @@ 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() + defer s.mu.RUnlock() + return len(s.connections) +} + +// GetConnections returns all connections +func (s *Server) GetConnections() []Connection { + s.mu.Lock() + var conns []Connection + for _, conn := range s.connections { + conns = append(conns, conn.value) + } + s.mu.Unlock() + return conns +} + +// GetConnection returns single connection +func (s *Server) GetConnection(key string) Connection { + s.mu.Lock() + defer s.mu.Unlock() + return s.connections.get(key) +} + // GetConnectionsByRoom returns a list of Connection // which are joined to this room. func (s *Server) GetConnectionsByRoom(roomName string) []Connection {