Skip to content
Permalink
Browse files

add websocket/Connection#IsJoined as requested at #895

  • Loading branch information...
kataras committed Feb 3, 2018
1 parent 21cb572 commit cb9e30948c8f1dd099f5168218d110765989992e
Showing with 29 additions and 0 deletions.
  1. +7 −0 websocket/connection.go
  2. +22 −0 websocket/server.go
@@ -174,6 +174,9 @@ type (
On(string, MessageFunc)
// Join registers this connection to a room, if it doesn't exist then it creates a new. One room can have one or more connections. One connection can be joined to many rooms. All connections are joined to a room specified by their `ID` automatically.
Join(string)
// IsJoined returns true when this connection is joined to the room, otherwise false.
// It Takes the room name as its input parameter.
IsJoined(roomName string) bool
// Leave removes this connection entry from a room
// Returns true if the connection has actually left from the particular room.
Leave(string) bool
@@ -506,6 +509,10 @@ func (c *connection) Join(roomName string) {
c.server.Join(roomName, c.id)
}

func (c *connection) IsJoined(roomName string) bool {
return c.server.IsJoined(roomName, c.id)
}

func (c *connection) Leave(roomName string) bool {
return c.server.Leave(roomName, c.id)
}
@@ -256,6 +256,28 @@ func (s *Server) join(roomName string, connID string) {
s.rooms[roomName] = append(s.rooms[roomName], connID)
}

// IsJoined reports if a specific room has a specific connection into its values.
// First parameter is the room name, second is the connection's id.
//
// It returns true when the "connID" is joined to the "roomName".
func (s *Server) IsJoined(roomName string, connID string) bool {
s.mu.RLock()
room := s.rooms[roomName]
s.mu.RUnlock()

if room == nil {
return false
}

for _, connid := range room {
if connID == connid {
return true
}
}

return false
}

// LeaveAll kicks out a connection from ALL of its joined rooms
func (s *Server) LeaveAll(connID string) {
s.mu.Lock()

0 comments on commit cb9e309

Please sign in to comment.
You can’t perform that action at this time.