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"`
|
||||
}
|
||||
|
||||
const (
|
||||
DisinviteReasonDisinvited = "disinvited"
|
||||
DisinviteReasonDeleted = "deleted"
|
||||
)
|
||||
|
||||
type RoomDisinviteEventServerMessage struct {
|
||||
RoomEventServerMessage
|
||||
|
||||
Reason string `json:"reason"`
|
||||
}
|
||||
|
||||
type RoomEventMessage struct {
|
||||
RoomId string `json:"roomid"`
|
||||
Data *json.RawMessage `json:"data,omitempty"`
|
||||
|
@ -414,9 +425,9 @@ type EventServerMessage struct {
|
|||
Change []*EventServerMessageSessionEntry `json:"change,omitempty"`
|
||||
|
||||
// Used for target "roomlist" / "participants"
|
||||
Invite *RoomEventServerMessage `json:"invite,omitempty"`
|
||||
Disinvite *RoomEventServerMessage `json:"disinvite,omitempty"`
|
||||
Update *RoomEventServerMessage `json:"update,omitempty"`
|
||||
Invite *RoomEventServerMessage `json:"invite,omitempty"`
|
||||
Disinvite *RoomDisinviteEventServerMessage `json:"disinvite,omitempty"`
|
||||
Update *RoomEventServerMessage `json:"update,omitempty"`
|
||||
|
||||
// Used for target "message"
|
||||
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{
|
||||
Type: "event",
|
||||
Event: &EventServerMessage{
|
||||
Target: "roomlist",
|
||||
Type: "disinvite",
|
||||
Disinvite: &RoomEventServerMessage{
|
||||
RoomId: roomid,
|
||||
Disinvite: &RoomDisinviteEventServerMessage{
|
||||
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.sendRoomUpdate(roomid, request.Invite.UserIds, request.Invite.AllUserIds, request.Invite.Properties)
|
||||
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)
|
||||
case "update":
|
||||
err = b.nats.PublishBackendServerRoomRequest("backend.room."+roomid, &request)
|
||||
b.sendRoomUpdate(roomid, nil, request.Update.UserIds, request.Update.Properties)
|
||||
case "delete":
|
||||
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":
|
||||
err = b.sendRoomIncall(roomid, &request)
|
||||
case "participants":
|
||||
|
|
|
@ -402,6 +402,8 @@ func TestBackendServer_RoomDisinvite(t *testing.T) {
|
|||
t.Errorf("Expected room %s, got %+v", roomId, event)
|
||||
} else if event.Disinvite.Properties != nil {
|
||||
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 {
|
||||
|
@ -679,6 +681,8 @@ func TestBackendServer_RoomDelete(t *testing.T) {
|
|||
t.Errorf("Expected room %s, got %+v", roomId, event)
|
||||
} else if event.Disinvite.Properties != nil {
|
||||
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.
|
||||
|
|
|
@ -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 {
|
||||
return nil, err
|
||||
} else if message.Event.Target != "roomlist" {
|
||||
|
@ -610,7 +610,7 @@ func checkMessageRoomlistDisinvite(message *ServerMessage) (*RoomEventServerMess
|
|||
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 {
|
||||
return nil, err
|
||||
} else {
|
||||
|
|
Loading…
Reference in New Issue