Browse Source

Added a disconnected marker to sessions.

pull/159/head
Simon Eisenmann 11 years ago
parent
commit
e251a95398
  1. 4
      src/app/spreed-webrtc-server/channelling_api.go
  2. 8
      src/app/spreed-webrtc-server/roomworker.go
  3. 16
      src/app/spreed-webrtc-server/session.go

4
src/app/spreed-webrtc-server/channelling_api.go

@ -222,9 +222,11 @@ func (api *channellingAPI) OnIncoming(c ResponseSender, session *Session, msg *D @@ -222,9 +222,11 @@ func (api *channellingAPI) OnIncoming(c ResponseSender, session *Session, msg *D
}
func (api *channellingAPI) OnDisconnect(session *Session) {
session.Disconnect()
api.LeaveRoom(session)
dsl := session.DataSessionLeft("hard")
if session.Hello {
api.LeaveRoom(session)
api.Broadcast(session, dsl)
}

8
src/app/spreed-webrtc-server/roomworker.go

@ -217,7 +217,6 @@ func (r *roomWorker) Broadcast(session *Session, message Buffer) { @@ -217,7 +217,6 @@ func (r *roomWorker) Broadcast(session *Session, message Buffer) {
worker := func() {
r.mutex.RLock()
defer r.mutex.RUnlock()
for id, user := range r.users {
if id == session.Id {
// Skip broadcast to self.
@ -226,6 +225,7 @@ func (r *roomWorker) Broadcast(session *Session, message Buffer) { @@ -226,6 +225,7 @@ func (r *roomWorker) Broadcast(session *Session, message Buffer) {
//fmt.Printf("%s\n", m.Message)
user.Send(message)
}
r.mutex.RUnlock()
message.Decref()
}
@ -261,6 +261,10 @@ func (r *roomWorker) Join(credentials *DataRoomCredentials, session *Session, se @@ -261,6 +261,10 @@ func (r *roomWorker) Join(credentials *DataRoomCredentials, session *Session, se
}
}
if session.IsDisconnected() {
log.Println("Refusing to join a disconnected session to room", session.Id)
return
}
r.users[session.Id] = &roomUser{session, sender}
// NOTE(lcooper): Needs to be a copy, else we risk races with
// a subsequent modification of room properties.
@ -276,10 +280,10 @@ func (r *roomWorker) Join(credentials *DataRoomCredentials, session *Session, se @@ -276,10 +280,10 @@ func (r *roomWorker) Join(credentials *DataRoomCredentials, session *Session, se
func (r *roomWorker) Leave(session *Session) {
worker := func() {
r.mutex.Lock()
defer r.mutex.Unlock()
if _, ok := r.users[session.Id]; ok {
delete(r.users, session.Id)
}
r.mutex.Unlock()
}
r.Run(worker)
}

16
src/app/spreed-webrtc-server/session.go

@ -49,6 +49,7 @@ type Session struct { @@ -49,6 +49,7 @@ type Session struct {
attestations *securecookie.SecureCookie
subscriptions map[string]*Session
subscribers map[string]*Session
disconnected bool
}
func NewSession(attestations *securecookie.SecureCookie, id, sid string) *Session {
@ -115,6 +116,21 @@ func (s *Session) RunForAllSubscribers(f func(session *Session)) { @@ -115,6 +116,21 @@ func (s *Session) RunForAllSubscribers(f func(session *Session)) {
}
func (s *Session) Disconnect() {
s.mutex.Lock()
s.disconnected = true
s.mutex.Unlock()
}
func (s *Session) IsDisconnected() bool {
s.mutex.RLock()
defer s.mutex.RUnlock()
return s.disconnected
}
func (s *Session) Close() {
s.mutex.Lock()

Loading…
Cancel
Save