Diarkis Room allows you to implement your own custom rules for room join.
We will be using an example where the custom rule to join a room requires a room property called "roomType" to be 100. Any other value will cause the denial of room join.
NOTE: room.SetJoinCondition applies to all rooms.
// Required packages
// import "errors"
// import "github.com/Diarkis/diarkis/room"
// import "github.com/Diarkis/diarkis/user"
// import "github.com/Diarrkis/diarkis/util"
room.SetJoinCondition(func (roomID string, userData *user.User) {
roomType := room.GetProperty(roomID, "roomType")
if roomType == nil {
// Missing roomType, we decline the user to join the room
return errors.New("Room type not found")
}
// interface{} can be any data type, so we want to make sure it is as we expected
if _, ok := roomType.(int); !ok {
// roomType is not int and that is not expected, decline the user to join the room
return errors.New("Corrupt roomType data type...")
}
if roomType.(int) != 100 {
// roomType must be 100 for the user to join
return errors.New("Room join is not allowed")
}
// The user is allow to join the room
return nil
})