房间信息返回token
This commit is contained in:
parent
a7216abb49
commit
f52947aec1
|
|
@ -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()) {
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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());
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue