用户的设计主要是明确其生命周期及其需要持有的对象。
用户的生命周期
- 创建 websocket连接时,建立普通用户对象;
- 申请通话时,等待对方响应;
- 对方接受,如果为群组聊天,则将其更改为 GroupUser 对象;群组聊天比较特殊,原始的用户对象结构已经不满足。
- 通话结束,根据域的情况,判断是否进行更改;如果为群组,则更改普通用户对象
- 连接断开或者发生错误,销毁用户以及相关的域,域的销毁需要进行独立的判断。并且,发送通知给域中的其它成员。
用户的类设计
BaseUser
在建立ws连接后建立,用于一对一或者一对多通话中;GroupUser
用户用于群组聊天中;
BaseUser
包含用户名、session 和 域id (不存在通话域时为null),GroupUser
继承BaseUser
,除此之外还新增了多个媒体属性。
WebRtcEndpoint
类型的outgoingMedia
,用作当前用户的输出流Map<String, WebRtcEndpoint>
类型的incomingMedia
,用作当前用户的输入流MediaPipeline
, 处于群组聊天中需要共用同一个MediaPipeline