fix websocket some times tries to emit to a disconnected client

Former-commit-id: 026798e6bc587c902bfc9f92281aced406d628a5
This commit is contained in:
hiveminded 2017-08-09 13:31:56 +03:00
parent 87d0f2e967
commit e23f821341
2 changed files with 8 additions and 4 deletions

View File

@ -34,6 +34,10 @@ func (e *emitter) EmitMessage(nativeMessage []byte) error {
} }
func (e *emitter) Emit(event string, data interface{}) 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) message, err := websocketMessageSerialize(event, data)
if err != nil { if err != nil {
return err return err

View File

@ -260,8 +260,9 @@ func (s *Server) LeaveAll(connID string) {
// fire the on room leave connection's listeners // fire the on room leave connection's listeners
s.connections.get(connID).fireOnLeave(name) s.connections.get(connID).fireOnLeave(name)
// the connection is inside this room, lets remove it // the connection is inside this room, lets remove it
s.rooms[name][i] = s.rooms[name][len(s.rooms[name])-1] if i < len(s.rooms[name]) {
s.rooms[name] = s.rooms[name][:len(s.rooms[name])-1] 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 { if s.rooms[roomName] != nil {
for i := range s.rooms[roomName] { for i := range s.rooms[roomName] {
if s.rooms[roomName][i] == connID { if s.rooms[roomName][i] == connID {
s.rooms[roomName][i] = s.rooms[roomName][len(s.rooms[roomName])-1] s.rooms[roomName] = append(s.rooms[roomName][:i], s.rooms[roomName][i+1:]...)
s.rooms[roomName] = s.rooms[roomName][:len(s.rooms[roomName])-1]
left = true left = true
break break
} }