From 6f1d1d2fea31eb94bab168a08c0f9296c91f8ac2 Mon Sep 17 00:00:00 2001 From: Gerson Alexander Pardo Gamez Date: Sat, 21 Oct 2017 15:44:36 -0500 Subject: [PATCH] Websocket: added GetTotalConnections, GetConnections and GetConnection Former-commit-id: fddddcdebd2a72ca082223bd29638a13ae6c0343 --- websocket/server.go | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) 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 {