Skip to content

Commit

Permalink
add websocket/Connection#IsJoined as requested at #895
Browse files Browse the repository at this point in the history
  • Loading branch information
kataras committed Feb 3, 2018
1 parent 21cb572 commit cb9e309
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 0 deletions.
7 changes: 7 additions & 0 deletions websocket/connection.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)
}
Expand Down
22 changes: 22 additions & 0 deletions websocket/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down

0 comments on commit cb9e309

Please sign in to comment.