目录
- RoleType
-
- 使用场景:
- 方法与使用说明
- 源码
RoleType
接着之前的 UserInfo,对RoleType做进一步说明.
此类是SDK的公共类,可以在任一SDK使用方进行调用,之前有提到role是一个“复合”的值1,所以不能简单的用“==” 来判断,为了方便,给使用者提供一个工具类来调用。
使用场景:
- 直播聊天消息的角色判断
- 点播聊天消息的角色判断
- 其他有role的判断的地方
实际上UserInfo也是调用RoleType的函数并返回给调用者,例如userInfo.isHost()。
方法与使用说明
具有的函数都返回boolean值,参数都是int型的值(role)都是静态方法:
- isHost(int role) //老师、组织者
- isPresentor(int role) //主讲
- isPanelist(int role) //助教、嘉宾
- isAttendee(int role)客户端学生,电脑客户端或rtsdk加入的用户
- isAttendeeWeb(int role) web端学生,web、小程序或player sdk加入的用户
使用的时候,如果只判断是否为其中一种角色,那么直接调用其中一个函数就可以。
如果是分别判断的话,请按顺序依次判断,例如:
if (RoleType.isHost(role)) {//todo 老师、组织者} else if (RoleType.isPresentor(role)) {//todo 主讲} else if (RoleType.isPanelist(role)) {//todo 助教 嘉宾} else if (RoleType.isAttendee(role)) {//todo 客户端学生} else if (RoleType.isAttendeeWeb(role)) {//todo web端学生}
主要原因是复合,例如7代表老师或组织者,但老师或组织者的角色实际上是1,是因为:
7 = 1|2|4,该用户同时具有老师、主讲、助教的身份,最高身份是老师,所以说7代表老师。
再这种一个位表示一种身份的情况下,可以简单理解为7=1+2+4。
源码
public static final int ROLE_HOST = 0x01;//组织者、老师public static final int ROLE_PRESENT = 0x02;//主讲public static final int ROLE_PANELIST = 0x04;//嘉宾、助教public static final int ROLE_ATTENDEE = 0x08;//客户端学生public static final int ROLE_ATTENDEE_WEB = 0x10;//web端学生public static final int ROLE_LOD = 0x20;//插播,app几乎用不上public static boolean isHost(int role) {return (role & RoleType.ROLE_HOST) == RoleType.ROLE_HOST;}public static boolean isPresentor(int role) {return (role & RoleType.ROLE_PRESENT) == RoleType.ROLE_PRESENT;}public static boolean isPanelist(int role) {return (role & RoleType.ROLE_PANELIST) == RoleType.ROLE_PANELIST;}public static boolean isAttendee(int role) {return (role & RoleType.ROLE_ATTENDEE) == RoleType.ROLE_ATTENDEE;}public static boolean isAttendeeWeb(int role) {return (role & RoleType.ROLE_ATTENDEE_WEB) == RoleType.ROLE_ATTENDEE_WEB;}public static boolean isLodUser(int role) {return (role & RoleType.ROLE_LOD) == RoleType.ROLE_LOD;}public static boolean isMiniClassTeacher(int role){return isHost(role) || isPresentor(role) || isPanelist(role);}/*** otherUserRole 是否比role的角色(权限高)* @param otherUserRole* @param role* @return*/public static boolean isRoleGreater(int otherUserRole,int role) {for (int i = 0; i < 3; i++) // 比到第二位,嘉宾位, 0:组织者,1 主讲{int nMe = (role >> i) & 0x01;int nOther = (otherUserRole >> i) & 0x01;if (nMe != nOther) {return nMe > nOther;}}return false;}
关于位运算,后面会介绍。
-
role 在系统中是用位来表示的,一个角色可能包含多个位,多个身份,函数中实现是做位运算。 ↩︎