add websocket/Connection#IsJoined as requested at https://github.com/kataras/iris/issues/895

Former-commit-id: 560fc8b911a9c1352be577d2f7bebd1fac7b5d4a
This commit is contained in:
Gerasimos (Makis) Maropoulos 2018-02-03 18:53:39 +02:00
parent 711e48d9ab
commit e523d08cb1
2 changed files with 29 additions and 0 deletions

View File

@ -174,6 +174,9 @@ type (
On(string, MessageFunc) 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 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) 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 // Leave removes this connection entry from a room
// Returns true if the connection has actually left from the particular room. // Returns true if the connection has actually left from the particular room.
Leave(string) bool Leave(string) bool
@ -506,6 +509,10 @@ func (c *connection) Join(roomName string) {
c.server.Join(roomName, c.id) 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 { func (c *connection) Leave(roomName string) bool {
return c.server.Leave(roomName, c.id) return c.server.Leave(roomName, c.id)
} }

View File

@ -256,6 +256,28 @@ func (s *Server) join(roomName string, connID string) {
s.rooms[roomName] = append(s.rooms[roomName], connID) 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 // LeaveAll kicks out a connection from ALL of its joined rooms
func (s *Server) LeaveAll(connID string) { func (s *Server) LeaveAll(connID string) {
s.mu.Lock() s.mu.Lock()