97 lines
4.0 KiB
Java
97 lines
4.0 KiB
Java
package com.zhangshu.chat.demo.service;
|
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
import cn.hutool.core.bean.copier.CopyOptions;
|
|
import com.zhangshu.chat.demo.config.AgoraProperties;
|
|
import com.zhangshu.chat.demo.constant.ERoomUserType;
|
|
import com.zhangshu.chat.demo.dto.AgoraChannelEventDto;
|
|
import com.zhangshu.chat.demo.dto.AgoraChannelUserEventDto;
|
|
import com.zhangshu.chat.demo.dto.AgoraEventDto;
|
|
import com.zhangshu.chat.demo.entity.User;
|
|
import com.zhangshu.chat.demo.mapper.UserMapper;
|
|
import com.zhangshu.chat.demo.vo.RoomUserVo;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
import java.util.Map;
|
|
import java.util.Objects;
|
|
|
|
@Service
|
|
@EnableConfigurationProperties(AgoraProperties.class)
|
|
public class EventServiceImpl implements EventService {
|
|
@Autowired
|
|
AgoraProperties agoraProperties;
|
|
@Autowired
|
|
RoomCache roomCache;
|
|
@Autowired
|
|
UserMapper userMapper;
|
|
|
|
<T> T mapToBean(Map<String, Object> map, Class<T> targetClass) {
|
|
return BeanUtil.mapToBean(map, targetClass, false, CopyOptions.create());
|
|
}
|
|
|
|
@Override
|
|
public void agora(AgoraEventDto dto) {
|
|
switch (dto.getEventType()) {
|
|
case channel_create: {
|
|
AgoraChannelEventDto eventDto = dto.convert(AgoraChannelEventDto.class);
|
|
roomCache.add(eventDto.getChannelName());
|
|
}
|
|
break;
|
|
case channel_destroy: {
|
|
AgoraChannelEventDto eventDto = dto.convert(AgoraChannelEventDto.class);
|
|
roomCache.remove(eventDto.getChannelName());
|
|
}
|
|
break;
|
|
case user_join_channel_with_communication_mode:
|
|
case broadcaster_join_channel: {
|
|
AgoraChannelUserEventDto eventDto = dto.convert(AgoraChannelUserEventDto.class);
|
|
User user = userMapper.selectById(eventDto.getUid());
|
|
if (Objects.isNull(user)) {
|
|
break;
|
|
}
|
|
roomCache.addUser(eventDto.getChannelName(), RoomUserVo.builder()
|
|
.id(eventDto.getUid())
|
|
.username(user.getUsername())
|
|
.nickname(user.getNickname())
|
|
.type(ERoomUserType.broadcaster)
|
|
.lastClientSeq(eventDto.getClientSeq())
|
|
.build());
|
|
}
|
|
break;
|
|
case user_leave_channel_with_communication_mode:
|
|
case broadcaster_leave_channel:
|
|
case audience_leave_channel: {
|
|
AgoraChannelUserEventDto eventDto = dto.convert(AgoraChannelUserEventDto.class);
|
|
roomCache.removeUser(eventDto.getChannelName(), eventDto.getUid());
|
|
}
|
|
break;
|
|
case audience_join_channel: {
|
|
AgoraChannelUserEventDto eventDto = dto.convert(AgoraChannelUserEventDto.class);
|
|
User user = userMapper.selectById(eventDto.getUid());
|
|
if (Objects.isNull(user)) {
|
|
break;
|
|
}
|
|
roomCache.addUser(eventDto.getChannelName(), RoomUserVo.builder()
|
|
.id(eventDto.getUid())
|
|
.nickname(user.getNickname())
|
|
.type(ERoomUserType.audience)
|
|
.lastClientSeq(eventDto.getClientSeq())
|
|
.build());
|
|
}
|
|
break;
|
|
case client_role_change_to_audience: {
|
|
AgoraChannelUserEventDto eventDto = dto.convert(AgoraChannelUserEventDto.class);
|
|
roomCache.changeUserType(eventDto.getChannelName(), eventDto.getUid(), ERoomUserType.audience);
|
|
}
|
|
break;
|
|
case client_role_change_to_broadcaster: {
|
|
AgoraChannelUserEventDto eventDto = dto.convert(AgoraChannelUserEventDto.class);
|
|
roomCache.changeUserType(eventDto.getChannelName(), eventDto.getUid(), ERoomUserType.broadcaster);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|