Diarkis Room を使ってルーム参加にカスタム条件をつける

ルームに参加する際に参加の是非をカスタムでチェックする実装方法を説明します。

ここではルームのプロパティ "RoomType" が 100 でなければ参加を拒否するというチェックの実装例を使って説明します。

注意: room.SetJoinCondition は全てのルームに適応されます。

// 必要なパッケージ
// 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 {
// roomType がないので、そもそも参加を拒否する
return errors.New("Room type not found")
}

// interface{} 型はどんなデータ型にもなり得るので、サニティチェック
if _, ok := roomType.(int); !ok {
// roomType の型が想定の型ではないので、参加を拒否する
return errors.New("Corrupt roomType data type...")
}

if roomType.(int) != 100 {
// roomType が 100 ではないので、参加を拒否
return errors.New("Room join is not allowed")
}

// ルームの参加を許可する
return nil

})