diff --git a/websocket/emitter.go b/websocket/emitter.go index 5827b24d..d77be364 100644 --- a/websocket/emitter.go +++ b/websocket/emitter.go @@ -34,6 +34,10 @@ func (e *emitter) EmitMessage(nativeMessage []byte) error { } func (e *emitter) Emit(event string, data interface{}) error { + if e.conn.server.rooms[e.to] == nil { + return nil + } + message, err := websocketMessageSerialize(event, data) if err != nil { return err diff --git a/websocket/server.go b/websocket/server.go index 50f54c16..cbfd7567 100644 --- a/websocket/server.go +++ b/websocket/server.go @@ -260,8 +260,9 @@ func (s *Server) LeaveAll(connID string) { // fire the on room leave connection's listeners s.connections.get(connID).fireOnLeave(name) // the connection is inside this room, lets remove it - s.rooms[name][i] = s.rooms[name][len(s.rooms[name])-1] - s.rooms[name] = s.rooms[name][:len(s.rooms[name])-1] + if i < len(s.rooms[name]) { + s.rooms[name] = append(s.rooms[name][:i], s.rooms[name][i+1:]...) + } } } } @@ -287,8 +288,7 @@ func (s *Server) leave(roomName string, connID string) (left bool) { if s.rooms[roomName] != nil { for i := range s.rooms[roomName] { if s.rooms[roomName][i] == connID { - s.rooms[roomName][i] = s.rooms[roomName][len(s.rooms[roomName])-1] - s.rooms[roomName] = s.rooms[roomName][:len(s.rooms[roomName])-1] + s.rooms[roomName] = append(s.rooms[roomName][:i], s.rooms[roomName][i+1:]...) left = true break }