房间信息返回token
This commit is contained in:
parent
a7216abb49
commit
f52947aec1
|
|
@ -1,7 +1,5 @@
|
|||
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;
|
||||
|
|
@ -14,7 +12,6 @@ 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
|
||||
|
|
@ -27,10 +24,6 @@ public class EventServiceImpl implements EventService {
|
|||
@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()) {
|
||||
|
|
|
|||
|
|
@ -27,7 +27,8 @@ public class LoginServiceImpl implements LoginService {
|
|||
JwtProvider jwtProvider;
|
||||
@Autowired
|
||||
AuthenticationManager authenticationManager;
|
||||
|
||||
@Autowired
|
||||
RoomCache roomCache;
|
||||
|
||||
@Override
|
||||
public LoginVo login(LoginDto dto) {
|
||||
|
|
@ -53,12 +54,22 @@ public class LoginServiceImpl implements LoginService {
|
|||
public LoginVo agoraToken(Authentication authentication, String channelName, int role) {
|
||||
RtcTokenBuilder2.Role role2 = role == 1 ? RtcTokenBuilder2.Role.ROLE_PUBLISHER : RtcTokenBuilder2.Role.ROLE_SUBSCRIBER;
|
||||
UserDetailsImpl userInfo = (UserDetailsImpl) authentication.getPrincipal();
|
||||
RtcTokenBuilder2 token = new RtcTokenBuilder2();
|
||||
String result = token.buildTokenWithUid(agoraProperties.getAppId(), agoraProperties.getAppCertificate(),
|
||||
channelName, userInfo.getId().intValue(), role2,
|
||||
agoraProperties.getTokenExpiration(), agoraProperties.getPrivilegeExpiration());
|
||||
return LoginVo.builder()
|
||||
.token(result).build();
|
||||
|
||||
String token = new RtcTokenBuilder2().buildTokenWithUid(
|
||||
agoraProperties.getAppId(),
|
||||
agoraProperties.getAppCertificate(),
|
||||
channelName,
|
||||
userInfo.getId().intValue(),
|
||||
role2,
|
||||
agoraProperties.getTokenExpiration(),
|
||||
agoraProperties.getPrivilegeExpiration()
|
||||
);
|
||||
|
||||
|
||||
// cache roomId and it's token
|
||||
roomCache.tokenMapping(channelName, token);
|
||||
|
||||
return LoginVo.builder().token(token).build();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -19,6 +19,19 @@ public class RoomCache {
|
|||
* 正在创建
|
||||
*/
|
||||
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() {
|
||||
List<Room> resp = new ArrayList<>(roomCache.size());
|
||||
|
|
|
|||
|
|
@ -11,21 +11,32 @@ import lombok.extern.slf4j.Slf4j;
|
|||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
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
|
||||
@Service
|
||||
public class RoomServiceImpl implements RoomService {
|
||||
@Autowired
|
||||
RoomCache roomCache;
|
||||
|
||||
|
||||
@Override
|
||||
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
|
||||
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
|
||||
|
|
@ -39,4 +50,8 @@ public class RoomServiceImpl implements RoomService {
|
|||
return roomCache.createSuccess(roomId);
|
||||
}
|
||||
|
||||
private void setToken(String id, Consumer<String> setter) {
|
||||
String token = roomCache.tokenMapping(id);
|
||||
setter.accept(token);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,5 +9,6 @@ import java.util.List;
|
|||
public class RoomDetailVo {
|
||||
private String id;
|
||||
private String name;
|
||||
private String token;
|
||||
private List<RoomUserVo> userList;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,4 +6,6 @@ import lombok.Data;
|
|||
public class RoomVo {
|
||||
private String id;
|
||||
private String name;
|
||||
private String token;
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue