From 706a876fc3e75c5be7675c1c4239f26f4b4a32c2 Mon Sep 17 00:00:00 2001 From: Joachim Bauch Date: Tue, 12 Jul 2022 14:16:33 +0200 Subject: [PATCH] Send initial user flags to internal sessions asynchronously. --- api_async.go | 3 ++- room.go | 16 ++++++++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/api_async.go b/api_async.go index bc49dc7..a78adff 100644 --- a/api_async.go +++ b/api_async.go @@ -44,7 +44,8 @@ type AsyncMessage struct { type AsyncRoomMessage struct { Type string `json:"type"` - SessionId string `json:"sessionid,omitempty"` + SessionId string `json:"sessionid,omitempty"` + ClientType string `json:"clienttype,omitempty"` } type SendOfferMessage struct { diff --git a/room.go b/room.go index 6a74653..5c1bb4a 100644 --- a/room.go +++ b/room.go @@ -247,6 +247,9 @@ func (r *Room) processBackendRoomRequestAsyncRoom(message *AsyncRoomMessage) { switch message.Type { case "sessionjoined": r.notifySessionJoined(message.SessionId) + if message.ClientType == HelloClientTypeInternal { + r.publishUsersChangedWithInternal() + } default: log.Printf("Unsupported async room request with type %s in %s: %+v", message.Type, r.Id(), message) } @@ -305,8 +308,9 @@ func (r *Room) AddSession(session Session, sessionData *json.RawMessage) { if err := r.events.PublishBackendRoomMessage(r.id, r.backend, &AsyncMessage{ Type: "asyncroom", AsyncRoom: &AsyncRoomMessage{ - Type: "sessionjoined", - SessionId: sid, + Type: "sessionjoined", + SessionId: sid, + ClientType: session.ClientType(), }, }); err != nil { log.Printf("Error publishing joined event for session %s: %s", sid, err) @@ -530,10 +534,6 @@ func (r *Room) PublishSessionJoined(session Session, sessionData *RoomSessionDat if err := r.publish(message); err != nil { log.Printf("Could not publish session joined message in room %s: %s", r.Id(), err) } - - if session.ClientType() == HelloClientTypeInternal { - r.publishUsersChangedWithInternal() - } } func (r *Room) PublishSessionLeft(session Session) { @@ -840,6 +840,10 @@ func (r *Room) NotifySessionChanged(session Session) { func (r *Room) publishUsersChangedWithInternal() { message := r.getParticipantsUpdateMessage(r.users) + if len(message.Event.Update.Users) == 0 { + return + } + if err := r.publish(message); err != nil { log.Printf("Could not publish users changed message in room %s: %s", r.Id(), err) }