房间信息返回token

This commit is contained in:
hunan 2022-08-03 14:07:58 +08:00
parent a7216abb49
commit f52947aec1
6 changed files with 52 additions and 17 deletions

View File

@ -1,7 +1,5 @@
package com.zhangshu.chat.demo.service; 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.config.AgoraProperties;
import com.zhangshu.chat.demo.constant.ERoomUserType; import com.zhangshu.chat.demo.constant.ERoomUserType;
import com.zhangshu.chat.demo.dto.AgoraChannelEventDto; import com.zhangshu.chat.demo.dto.AgoraChannelEventDto;
@ -14,7 +12,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Map;
import java.util.Objects; import java.util.Objects;
@Service @Service
@ -27,10 +24,6 @@ public class EventServiceImpl implements EventService {
@Autowired @Autowired
UserMapper userMapper; UserMapper userMapper;
<T> T mapToBean(Map<String, Object> map, Class<T> targetClass) {
return BeanUtil.mapToBean(map, targetClass, false, CopyOptions.create());
}
@Override @Override
public void agora(AgoraEventDto dto) { public void agora(AgoraEventDto dto) {
switch (dto.getEventType()) { switch (dto.getEventType()) {

View File

@ -27,7 +27,8 @@ public class LoginServiceImpl implements LoginService {
JwtProvider jwtProvider; JwtProvider jwtProvider;
@Autowired @Autowired
AuthenticationManager authenticationManager; AuthenticationManager authenticationManager;
@Autowired
RoomCache roomCache;
@Override @Override
public LoginVo login(LoginDto dto) { public LoginVo login(LoginDto dto) {
@ -53,12 +54,22 @@ public class LoginServiceImpl implements LoginService {
public LoginVo agoraToken(Authentication authentication, String channelName, int role) { public LoginVo agoraToken(Authentication authentication, String channelName, int role) {
RtcTokenBuilder2.Role role2 = role == 1 ? RtcTokenBuilder2.Role.ROLE_PUBLISHER : RtcTokenBuilder2.Role.ROLE_SUBSCRIBER; RtcTokenBuilder2.Role role2 = role == 1 ? RtcTokenBuilder2.Role.ROLE_PUBLISHER : RtcTokenBuilder2.Role.ROLE_SUBSCRIBER;
UserDetailsImpl userInfo = (UserDetailsImpl) authentication.getPrincipal(); UserDetailsImpl userInfo = (UserDetailsImpl) authentication.getPrincipal();
RtcTokenBuilder2 token = new RtcTokenBuilder2();
String result = token.buildTokenWithUid(agoraProperties.getAppId(), agoraProperties.getAppCertificate(), String token = new RtcTokenBuilder2().buildTokenWithUid(
channelName, userInfo.getId().intValue(), role2, agoraProperties.getAppId(),
agoraProperties.getTokenExpiration(), agoraProperties.getPrivilegeExpiration()); agoraProperties.getAppCertificate(),
return LoginVo.builder() channelName,
.token(result).build(); userInfo.getId().intValue(),
role2,
agoraProperties.getTokenExpiration(),
agoraProperties.getPrivilegeExpiration()
);
// cache roomId and it's token
roomCache.tokenMapping(channelName, token);
return LoginVo.builder().token(token).build();
} }

View File

@ -19,6 +19,19 @@ public class RoomCache {
* 正在创建 * 正在创建
*/ */
private final Cache<String, Room> roomCreatingCache = CacheUtil.newFIFOCache(4); private final Cache<String, Room> roomCreatingCache = CacheUtil.newFIFOCache(4);
/**
* roomId -> agoraToken 映射
*/
private final Cache<String, String> roomTokenCache = CacheUtil.newFIFOCache(4);
public void tokenMapping(String roomId, String token) {
roomTokenCache.put(roomId, token);
}
public String tokenMapping(String roomId) {
return roomTokenCache.get(roomId);
}
public List<Room> list() { public List<Room> list() {
List<Room> resp = new ArrayList<>(roomCache.size()); List<Room> resp = new ArrayList<>(roomCache.size());

View File

@ -11,21 +11,32 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;
@Slf4j @Slf4j
@Service @Service
public class RoomServiceImpl implements RoomService { public class RoomServiceImpl implements RoomService {
@Autowired @Autowired
RoomCache roomCache; RoomCache roomCache;
@Override @Override
public CommonPageResult<RoomVo> page(PageDto pageDto) { public CommonPageResult<RoomVo> page(PageDto pageDto) {
return CommonPageResult.of(RoomConvert.INSTANCE.convert(roomCache.list())); List<RoomVo> page = RoomConvert.INSTANCE.convert(roomCache.list());
for (RoomVo roomVo : page) {
setToken(roomVo.getId(), roomVo::setToken);
}
return CommonPageResult.of(page);
} }
@Override @Override
public RoomDetailVo detail(String id) { public RoomDetailVo detail(String id) {
return RoomConvert.INSTANCE.convertDetail(roomCache.get(id)); RoomDetailVo vo = RoomConvert.INSTANCE.convertDetail(roomCache.get(id));
setToken(vo.getId(), vo::setToken);
return vo;
} }
@Override @Override
@ -39,4 +50,8 @@ public class RoomServiceImpl implements RoomService {
return roomCache.createSuccess(roomId); return roomCache.createSuccess(roomId);
} }
private void setToken(String id, Consumer<String> setter) {
String token = roomCache.tokenMapping(id);
setter.accept(token);
}
} }

View File

@ -9,5 +9,6 @@ import java.util.List;
public class RoomDetailVo { public class RoomDetailVo {
private String id; private String id;
private String name; private String name;
private String token;
private List<RoomUserVo> userList; private List<RoomUserVo> userList;
} }

View File

@ -6,4 +6,6 @@ import lombok.Data;
public class RoomVo { public class RoomVo {
private String id; private String id;
private String name; private String name;
private String token;
} }