mirror of
https://github.com/strukturag/nextcloud-spreed-signaling
synced 2024-04-30 13:02:44 +02:00
Add "reason" field to disinvite message.
This is required so clients can differentiate between no longer being invited or the room being deleted. Fixes #25.
This commit is contained in:
parent
3d73ab48db
commit
5bd525eae0
|
@ -399,6 +399,17 @@ type RoomEventServerMessage struct {
|
||||||
Users []map[string]interface{} `json:"users,omitempty"`
|
Users []map[string]interface{} `json:"users,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
DisinviteReasonDisinvited = "disinvited"
|
||||||
|
DisinviteReasonDeleted = "deleted"
|
||||||
|
)
|
||||||
|
|
||||||
|
type RoomDisinviteEventServerMessage struct {
|
||||||
|
RoomEventServerMessage
|
||||||
|
|
||||||
|
Reason string `json:"reason"`
|
||||||
|
}
|
||||||
|
|
||||||
type RoomEventMessage struct {
|
type RoomEventMessage struct {
|
||||||
RoomId string `json:"roomid"`
|
RoomId string `json:"roomid"`
|
||||||
Data *json.RawMessage `json:"data,omitempty"`
|
Data *json.RawMessage `json:"data,omitempty"`
|
||||||
|
@ -414,9 +425,9 @@ type EventServerMessage struct {
|
||||||
Change []*EventServerMessageSessionEntry `json:"change,omitempty"`
|
Change []*EventServerMessageSessionEntry `json:"change,omitempty"`
|
||||||
|
|
||||||
// Used for target "roomlist" / "participants"
|
// Used for target "roomlist" / "participants"
|
||||||
Invite *RoomEventServerMessage `json:"invite,omitempty"`
|
Invite *RoomEventServerMessage `json:"invite,omitempty"`
|
||||||
Disinvite *RoomEventServerMessage `json:"disinvite,omitempty"`
|
Disinvite *RoomDisinviteEventServerMessage `json:"disinvite,omitempty"`
|
||||||
Update *RoomEventServerMessage `json:"update,omitempty"`
|
Update *RoomEventServerMessage `json:"update,omitempty"`
|
||||||
|
|
||||||
// Used for target "message"
|
// Used for target "message"
|
||||||
Message *RoomEventMessage `json:"message,omitempty"`
|
Message *RoomEventMessage `json:"message,omitempty"`
|
||||||
|
|
|
@ -291,14 +291,17 @@ func (b *BackendServer) sendRoomInvite(roomid string, userids []string, properti
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *BackendServer) sendRoomDisinvite(roomid string, userids []string, sessionids []string) {
|
func (b *BackendServer) sendRoomDisinvite(roomid string, reason string, userids []string, sessionids []string) {
|
||||||
msg := &ServerMessage{
|
msg := &ServerMessage{
|
||||||
Type: "event",
|
Type: "event",
|
||||||
Event: &EventServerMessage{
|
Event: &EventServerMessage{
|
||||||
Target: "roomlist",
|
Target: "roomlist",
|
||||||
Type: "disinvite",
|
Type: "disinvite",
|
||||||
Disinvite: &RoomEventServerMessage{
|
Disinvite: &RoomDisinviteEventServerMessage{
|
||||||
RoomId: roomid,
|
RoomEventServerMessage: RoomEventServerMessage{
|
||||||
|
RoomId: roomid,
|
||||||
|
},
|
||||||
|
Reason: reason,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -519,14 +522,14 @@ func (b *BackendServer) roomHandler(w http.ResponseWriter, r *http.Request, body
|
||||||
b.sendRoomInvite(roomid, request.Invite.UserIds, request.Invite.Properties)
|
b.sendRoomInvite(roomid, request.Invite.UserIds, request.Invite.Properties)
|
||||||
b.sendRoomUpdate(roomid, request.Invite.UserIds, request.Invite.AllUserIds, request.Invite.Properties)
|
b.sendRoomUpdate(roomid, request.Invite.UserIds, request.Invite.AllUserIds, request.Invite.Properties)
|
||||||
case "disinvite":
|
case "disinvite":
|
||||||
b.sendRoomDisinvite(roomid, request.Disinvite.UserIds, request.Disinvite.SessionIds)
|
b.sendRoomDisinvite(roomid, DisinviteReasonDisinvited, request.Disinvite.UserIds, request.Disinvite.SessionIds)
|
||||||
b.sendRoomUpdate(roomid, request.Disinvite.UserIds, request.Disinvite.AllUserIds, request.Disinvite.Properties)
|
b.sendRoomUpdate(roomid, request.Disinvite.UserIds, request.Disinvite.AllUserIds, request.Disinvite.Properties)
|
||||||
case "update":
|
case "update":
|
||||||
err = b.nats.PublishBackendServerRoomRequest("backend.room."+roomid, &request)
|
err = b.nats.PublishBackendServerRoomRequest("backend.room."+roomid, &request)
|
||||||
b.sendRoomUpdate(roomid, nil, request.Update.UserIds, request.Update.Properties)
|
b.sendRoomUpdate(roomid, nil, request.Update.UserIds, request.Update.Properties)
|
||||||
case "delete":
|
case "delete":
|
||||||
err = b.nats.PublishBackendServerRoomRequest("backend.room."+roomid, &request)
|
err = b.nats.PublishBackendServerRoomRequest("backend.room."+roomid, &request)
|
||||||
b.sendRoomDisinvite(roomid, request.Delete.UserIds, nil)
|
b.sendRoomDisinvite(roomid, DisinviteReasonDeleted, request.Delete.UserIds, nil)
|
||||||
case "incall":
|
case "incall":
|
||||||
err = b.sendRoomIncall(roomid, &request)
|
err = b.sendRoomIncall(roomid, &request)
|
||||||
case "participants":
|
case "participants":
|
||||||
|
|
|
@ -402,6 +402,8 @@ func TestBackendServer_RoomDisinvite(t *testing.T) {
|
||||||
t.Errorf("Expected room %s, got %+v", roomId, event)
|
t.Errorf("Expected room %s, got %+v", roomId, event)
|
||||||
} else if event.Disinvite.Properties != nil {
|
} else if event.Disinvite.Properties != nil {
|
||||||
t.Errorf("Room properties should be omitted, got %s", string(*event.Disinvite.Properties))
|
t.Errorf("Room properties should be omitted, got %s", string(*event.Disinvite.Properties))
|
||||||
|
} else if event.Disinvite.Reason != "disinvited" {
|
||||||
|
t.Errorf("Reason should be disinvited, got %s", event.Disinvite.Reason)
|
||||||
}
|
}
|
||||||
|
|
||||||
if message, err := client.RunUntilRoomlistDisinvite(ctx); err != nil {
|
if message, err := client.RunUntilRoomlistDisinvite(ctx); err != nil {
|
||||||
|
@ -679,6 +681,8 @@ func TestBackendServer_RoomDelete(t *testing.T) {
|
||||||
t.Errorf("Expected room %s, got %+v", roomId, event)
|
t.Errorf("Expected room %s, got %+v", roomId, event)
|
||||||
} else if event.Disinvite.Properties != nil {
|
} else if event.Disinvite.Properties != nil {
|
||||||
t.Errorf("Room properties should be omitted, got %s", string(*event.Disinvite.Properties))
|
t.Errorf("Room properties should be omitted, got %s", string(*event.Disinvite.Properties))
|
||||||
|
} else if event.Disinvite.Reason != "deleted" {
|
||||||
|
t.Errorf("Reason should be deleted, got %s", event.Disinvite.Reason)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Use event to wait for NATS messages.
|
// TODO: Use event to wait for NATS messages.
|
||||||
|
|
|
@ -598,7 +598,7 @@ func (c *TestClient) RunUntilRoomlistUpdate(ctx context.Context) (*RoomEventServ
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkMessageRoomlistDisinvite(message *ServerMessage) (*RoomEventServerMessage, error) {
|
func checkMessageRoomlistDisinvite(message *ServerMessage) (*RoomDisinviteEventServerMessage, error) {
|
||||||
if err := checkMessageType(message, "event"); err != nil {
|
if err := checkMessageType(message, "event"); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
} else if message.Event.Target != "roomlist" {
|
} else if message.Event.Target != "roomlist" {
|
||||||
|
@ -610,7 +610,7 @@ func checkMessageRoomlistDisinvite(message *ServerMessage) (*RoomEventServerMess
|
||||||
return message.Event.Disinvite, nil
|
return message.Event.Disinvite, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *TestClient) RunUntilRoomlistDisinvite(ctx context.Context) (*RoomEventServerMessage, error) {
|
func (c *TestClient) RunUntilRoomlistDisinvite(ctx context.Context) (*RoomDisinviteEventServerMessage, error) {
|
||||||
if message, err := c.RunUntilMessage(ctx); err != nil {
|
if message, err := c.RunUntilMessage(ctx); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in a new issue