From f52947aec191486134a25faa6a585a18e2c20180 Mon Sep 17 00:00:00 2001 From: hunan Date: Wed, 3 Aug 2022 14:07:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=88=BF=E9=97=B4=E4=BF=A1=E6=81=AF=E8=BF=94?= =?UTF-8?q?=E5=9B=9Etoken?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chat/demo/service/EventServiceImpl.java | 7 ------ .../chat/demo/service/LoginServiceImpl.java | 25 +++++++++++++------ .../zhangshu/chat/demo/service/RoomCache.java | 13 ++++++++++ .../chat/demo/service/RoomServiceImpl.java | 21 +++++++++++++--- .../zhangshu/chat/demo/vo/RoomDetailVo.java | 1 + .../com/zhangshu/chat/demo/vo/RoomVo.java | 2 ++ 6 files changed, 52 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/zhangshu/chat/demo/service/EventServiceImpl.java b/src/main/java/com/zhangshu/chat/demo/service/EventServiceImpl.java index 495d710..b2114c5 100644 --- a/src/main/java/com/zhangshu/chat/demo/service/EventServiceImpl.java +++ b/src/main/java/com/zhangshu/chat/demo/service/EventServiceImpl.java @@ -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 mapToBean(Map map, Class targetClass) { - return BeanUtil.mapToBean(map, targetClass, false, CopyOptions.create()); - } - @Override public void agora(AgoraEventDto dto) { switch (dto.getEventType()) { diff --git a/src/main/java/com/zhangshu/chat/demo/service/LoginServiceImpl.java b/src/main/java/com/zhangshu/chat/demo/service/LoginServiceImpl.java index 45bcb33..711b196 100644 --- a/src/main/java/com/zhangshu/chat/demo/service/LoginServiceImpl.java +++ b/src/main/java/com/zhangshu/chat/demo/service/LoginServiceImpl.java @@ -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(); } diff --git a/src/main/java/com/zhangshu/chat/demo/service/RoomCache.java b/src/main/java/com/zhangshu/chat/demo/service/RoomCache.java index b9f739f..36bd509 100644 --- a/src/main/java/com/zhangshu/chat/demo/service/RoomCache.java +++ b/src/main/java/com/zhangshu/chat/demo/service/RoomCache.java @@ -19,6 +19,19 @@ public class RoomCache { * 正在创建 */ private final Cache roomCreatingCache = CacheUtil.newFIFOCache(4); + /** + * roomId -> agoraToken 映射 + */ + private final Cache 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 list() { List resp = new ArrayList<>(roomCache.size()); diff --git a/src/main/java/com/zhangshu/chat/demo/service/RoomServiceImpl.java b/src/main/java/com/zhangshu/chat/demo/service/RoomServiceImpl.java index 39d13b9..a789299 100644 --- a/src/main/java/com/zhangshu/chat/demo/service/RoomServiceImpl.java +++ b/src/main/java/com/zhangshu/chat/demo/service/RoomServiceImpl.java @@ -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 page(PageDto pageDto) { - return CommonPageResult.of(RoomConvert.INSTANCE.convert(roomCache.list())); + List 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 setter) { + String token = roomCache.tokenMapping(id); + setter.accept(token); + } } diff --git a/src/main/java/com/zhangshu/chat/demo/vo/RoomDetailVo.java b/src/main/java/com/zhangshu/chat/demo/vo/RoomDetailVo.java index c655ce2..02afcfd 100644 --- a/src/main/java/com/zhangshu/chat/demo/vo/RoomDetailVo.java +++ b/src/main/java/com/zhangshu/chat/demo/vo/RoomDetailVo.java @@ -9,5 +9,6 @@ import java.util.List; public class RoomDetailVo { private String id; private String name; + private String token; private List userList; } diff --git a/src/main/java/com/zhangshu/chat/demo/vo/RoomVo.java b/src/main/java/com/zhangshu/chat/demo/vo/RoomVo.java index 3b9f41c..a8adbf7 100644 --- a/src/main/java/com/zhangshu/chat/demo/vo/RoomVo.java +++ b/src/main/java/com/zhangshu/chat/demo/vo/RoomVo.java @@ -6,4 +6,6 @@ import lombok.Data; public class RoomVo { private String id; private String name; + private String token; + }