From 0ee961e550362c0aae31934da1106dac203d5a7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E8=89=AF=28004796=29?= Date: Fri, 29 Dec 2023 18:17:27 +0800 Subject: [PATCH] =?UTF-8?q?websocket=20=E6=95=B4=E5=90=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-cai/pom.xml | 5 +- .../java/com/ruoyi/cai/chat/ChatManager.java | 4 +- .../ruoyi/cai/dto/app/vo/chat/CallResp.java | 2 +- .../main/java/com/ruoyi/cai/trd/Agora.java | 4 +- .../java/com/ruoyi/cai/trd/ImDataRes.java | 6 +- .../main/java/com/ruoyi/cai/trd/ImMsgGen.java | 2 +- .../main/java/com/ruoyi/cai/trd/Yunxin.java | 9 +- .../com/ruoyi/cai/ws/bean/CallerRoom.java | 4 - .../java/com/ruoyi/cai/ws/bean/FdCtxData.java | 2 +- .../main/java/com/ruoyi/cai/ws/bean/Room.java | 18 ++- .../java/com/ruoyi/cai/ws/bean/RoomData.java | 10 +- .../java/com/ruoyi/cai/ws/bean/UserData.java | 4 +- .../ruoyi/cai/ws/cache/CallerRoomCache.java | 20 ++- .../ruoyi/cai/ws/cache/OnlineDataCache.java | 8 +- .../com/ruoyi/cai/ws/cache/RoomCtxCache.java | 16 +-- .../com/ruoyi/cai/ws/cache/RoomDataCache.java | 27 ++-- .../com/ruoyi/cai/ws/cache/UserDataCache.java | 25 +--- .../ruoyi/cai/ws}/config/WebSocketConfig.java | 2 +- .../cai/ws}/config/WebSocketProperties.java | 2 +- .../cai/ws}/constant/WebSocketConstants.java | 2 +- .../cai/ws}/dto/WebSocketMessageDto.java | 2 +- .../main/java/com/ruoyi/cai/ws}/dto/WsR.java | 2 +- .../java/com/ruoyi/cai/ws}/dto/WsRMsgGen.java | 8 +- .../ws}/handler/AbstractMessageHandle.java | 10 +- .../cai/ws}/handler/IMessageHandler.java | 2 +- .../ws}/handler/MessageHandleApplication.java | 7 +- .../cai/ws}/handler/RoomWebSocketHandler.java | 11 +- .../handler/message/AgreeMessageHandle.java | 8 +- .../message/CanCallTimeMessageHandler.java | 8 +- .../handler/message/CancelMessageHandler.java | 14 +- .../handler/message/GiftMessageHandler.java | 8 +- .../handler/message/HangupMessageHandler.java | 17 +-- .../message/HeartbeatMessageHandler.java | 8 +- .../ws}/handler/message/MessageHandler.java | 8 +- .../handler/message/RefuseMessageHandler.java | 12 +- .../ws}/holder/WebSocketSessionHolder.java | 2 +- .../interceptor/PlusWebSocketInterceptor.java | 2 +- .../cai/ws/manager/WebSocketManager.java | 17 ++- .../com/ruoyi/cai/ws/processon/OpenLogic.java | 19 ++- .../com/ruoyi/cai/ws/service/RoomService.java | 59 ++++++++- .../ruoyi/cai/ws/service/SettleService.java | 125 ++++++++++++++++++ .../ruoyi/cai/ws}/util/RoomWebSocketUtil.java | 6 +- .../ruoyi/cai/ws}/util/WebSocketUtils.java | 5 +- .../ruoyi/cai/ws/util/WsExceptionUtil.java | 7 +- ruoyi-websocket/pom.xml | 41 ------ .../ruoyi/websocket/handler/IOpenLogic.java | 9 -- 46 files changed, 366 insertions(+), 223 deletions(-) delete mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/ws/bean/CallerRoom.java rename {ruoyi-websocket/src/main/java/com/ruoyi/websocket => ruoyi-cai/src/main/java/com/ruoyi/cai/ws}/config/WebSocketConfig.java (97%) rename {ruoyi-websocket/src/main/java/com/ruoyi/websocket => ruoyi-cai/src/main/java/com/ruoyi/cai/ws}/config/WebSocketProperties.java (91%) rename {ruoyi-websocket/src/main/java/com/ruoyi/websocket => ruoyi-cai/src/main/java/com/ruoyi/cai/ws}/constant/WebSocketConstants.java (92%) rename {ruoyi-websocket/src/main/java/com/ruoyi/websocket => ruoyi-cai/src/main/java/com/ruoyi/cai/ws}/dto/WebSocketMessageDto.java (92%) rename {ruoyi-websocket/src/main/java/com/ruoyi/websocket => ruoyi-cai/src/main/java/com/ruoyi/cai/ws}/dto/WsR.java (98%) rename {ruoyi-websocket/src/main/java/com/ruoyi/websocket => ruoyi-cai/src/main/java/com/ruoyi/cai/ws}/dto/WsRMsgGen.java (94%) rename {ruoyi-websocket/src/main/java/com/ruoyi/websocket => ruoyi-cai/src/main/java/com/ruoyi/cai/ws}/handler/AbstractMessageHandle.java (82%) rename {ruoyi-websocket/src/main/java/com/ruoyi/websocket => ruoyi-cai/src/main/java/com/ruoyi/cai/ws}/handler/IMessageHandler.java (85%) rename {ruoyi-websocket/src/main/java/com/ruoyi/websocket => ruoyi-cai/src/main/java/com/ruoyi/cai/ws}/handler/MessageHandleApplication.java (90%) rename {ruoyi-websocket/src/main/java/com/ruoyi/websocket => ruoyi-cai/src/main/java/com/ruoyi/cai/ws}/handler/RoomWebSocketHandler.java (91%) rename {ruoyi-websocket/src/main/java/com/ruoyi/websocket => ruoyi-cai/src/main/java/com/ruoyi/cai/ws}/handler/message/AgreeMessageHandle.java (88%) rename {ruoyi-websocket/src/main/java/com/ruoyi/websocket => ruoyi-cai/src/main/java/com/ruoyi/cai/ws}/handler/message/CanCallTimeMessageHandler.java (77%) rename {ruoyi-websocket/src/main/java/com/ruoyi/websocket => ruoyi-cai/src/main/java/com/ruoyi/cai/ws}/handler/message/CancelMessageHandler.java (84%) rename {ruoyi-websocket/src/main/java/com/ruoyi/websocket => ruoyi-cai/src/main/java/com/ruoyi/cai/ws}/handler/message/GiftMessageHandler.java (92%) rename {ruoyi-websocket/src/main/java/com/ruoyi/websocket => ruoyi-cai/src/main/java/com/ruoyi/cai/ws}/handler/message/HangupMessageHandler.java (76%) rename {ruoyi-websocket/src/main/java/com/ruoyi/websocket => ruoyi-cai/src/main/java/com/ruoyi/cai/ws}/handler/message/HeartbeatMessageHandler.java (83%) rename {ruoyi-websocket/src/main/java/com/ruoyi/websocket => ruoyi-cai/src/main/java/com/ruoyi/cai/ws}/handler/message/MessageHandler.java (77%) rename {ruoyi-websocket/src/main/java/com/ruoyi/websocket => ruoyi-cai/src/main/java/com/ruoyi/cai/ws}/handler/message/RefuseMessageHandler.java (86%) rename {ruoyi-websocket/src/main/java/com/ruoyi/websocket => ruoyi-cai/src/main/java/com/ruoyi/cai/ws}/holder/WebSocketSessionHolder.java (96%) rename {ruoyi-websocket/src/main/java/com/ruoyi/websocket => ruoyi-cai/src/main/java/com/ruoyi/cai/ws}/interceptor/PlusWebSocketInterceptor.java (96%) create mode 100644 ruoyi-cai/src/main/java/com/ruoyi/cai/ws/service/SettleService.java rename {ruoyi-websocket/src/main/java/com/ruoyi/websocket => ruoyi-cai/src/main/java/com/ruoyi/cai/ws}/util/RoomWebSocketUtil.java (73%) rename {ruoyi-websocket/src/main/java/com/ruoyi/websocket => ruoyi-cai/src/main/java/com/ruoyi/cai/ws}/util/WebSocketUtils.java (92%) delete mode 100644 ruoyi-websocket/pom.xml delete mode 100644 ruoyi-websocket/src/main/java/com/ruoyi/websocket/handler/IOpenLogic.java diff --git a/ruoyi-cai/pom.xml b/ruoyi-cai/pom.xml index 56fca0ff..f9bc96ed 100644 --- a/ruoyi-cai/pom.xml +++ b/ruoyi-cai/pom.xml @@ -32,9 +32,8 @@ 2.0.32 - com.ruoyi - ruoyi-websocket - 4.8.2 + org.springframework.boot + spring-boot-starter-websocket diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/chat/ChatManager.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/chat/ChatManager.java index a1d2f7c6..5fd7d75c 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/chat/ChatManager.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/chat/ChatManager.java @@ -59,11 +59,11 @@ public class ChatManager { if(anchor == null){ throw new ServiceException("主播技能不存在"); } - String roomId = null; + Long roomId = null; Room room = webSocketManager.checkOnlineRoom(fromUser.getId(), toUser.getId()); if(room == null){ CaiUserCall call = userCallService.createCall(fromUser, toUser, anchor); - roomId = webSocketManager.createRoom(call.getId()+""); + roomId = webSocketManager.createRoom(call.getId()); } String weSocketUrl = String.format(properties.getWebSocketUrl(),"token",roomId); Long guardPrice = systemConfigManager.getSystemConfigOfLong(SystemConfigEnum.GUARD_PRICE); diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/chat/CallResp.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/chat/CallResp.java index 2b099f75..c711d364 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/chat/CallResp.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/dto/app/vo/chat/CallResp.java @@ -9,7 +9,7 @@ import java.math.BigDecimal; @Schema(description = "拨打视频返回模型") public class CallResp { @Schema(description = "房间号") - private String roomId; + private Long roomId; @Schema(description = "拨打者-用户ID") private Long fromUid; @Schema(description = "拨打者-昵称") diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/trd/Agora.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/trd/Agora.java index 2c36d9fa..636f77f0 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/trd/Agora.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/trd/Agora.java @@ -26,7 +26,7 @@ public class Agora { } - public List getChannelUsers(String roomId){ + public List getChannelUsers(Long roomId){ String url = "http://api.sd-rtn.com/dev/v1/channel/user/%s/%s"; url = String.format(url, agoraProperties.getAppId(), roomId); HttpHeaders headers = new HttpHeaders(); @@ -42,7 +42,7 @@ public class Agora { return jsonArray.toJavaList(String.class); } - public void closeChannel(String roomId){ + public void closeChannel(Long roomId){ String url = "http://api.sd-rtn.com/dev/v1/kicking-rule"; Map bodyData = new HashMap<>(); bodyData.put("appid",agoraProperties.getAppId()); diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/trd/ImDataRes.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/trd/ImDataRes.java index 34c6c608..15b82a74 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/trd/ImDataRes.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/trd/ImDataRes.java @@ -11,8 +11,8 @@ public class ImDataRes { public static class ImData { private Integer callType; private Integer status; - private String fromUid; - private String toUid; - private Integer callTime; + private Long fromUid; + private Long toUid; + private Long callTime; } } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/trd/ImMsgGen.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/trd/ImMsgGen.java index 5f27603d..39b1beb9 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/trd/ImMsgGen.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/trd/ImMsgGen.java @@ -9,7 +9,7 @@ public class ImMsgGen { * @param to * @param callTime */ - public static ImDataRes callNotice(int status,String from,String to,int callTime){ + public static ImDataRes callNotice(int status,Long from,Long to,long callTime){ ImDataRes imDataRes = new ImDataRes(); imDataRes.setType(15); ImDataRes.ImData imData = new ImDataRes.ImData(); diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/trd/Yunxin.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/trd/Yunxin.java index 4e333b16..5976bd39 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/trd/Yunxin.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/trd/Yunxin.java @@ -5,7 +5,6 @@ import cn.hutool.core.lang.UUID; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.ruoyi.cai.util.RestTemplateUtil; -import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; @@ -23,7 +22,7 @@ public class Yunxin { private final static String SEND_URL = "https://api.netease.im/nimserver/msg/sendMsg.action"; private final static String SEND_ATTR_URL = "https://api.netease.im/nimserver/msg/sendAttachMsg.action"; - public void sendTo(String toUid,Object data,String fromUid){ + public void sendTo(Long toUid,Object data,Long fromUid){ Map option = new HashMap<>(); option.put("push",true); // 该消息是否需要APNS推送或安卓系统通知栏推送 option.put("roam",false); // 该消息是否需要漫游(需要app开通漫游消息功能) @@ -32,7 +31,7 @@ public class Yunxin { option.put("route",false); // 该消息是否需要抄送第三方 (需要app开通消息抄送功能) Map bodyData = new HashMap<>(); - bodyData.put("from", StringUtils.isBlank(fromUid) ? yunxinProperties.getDefaultFromUid() :fromUid); + bodyData.put("from", fromUid == null ? yunxinProperties.getDefaultFromUid() :fromUid); bodyData.put("ope", 0); bodyData.put("to", toUid); bodyData.put("type", 100); @@ -49,7 +48,7 @@ public class Yunxin { RestTemplateUtil.restTemplate.postForObject(SEND_URL,httpEntity, JSONObject.class); } - public void sendAttachMsg(String toUid,Object data,String fromUid){ + public void sendAttachMsg(Long toUid,Object data,Long fromUid){ Map option = new HashMap<>(); option.put("push",true); // 该消息是否需要APNS推送或安卓系统通知栏推送 option.put("roam",false); // 该消息是否需要漫游(需要app开通漫游消息功能) @@ -58,7 +57,7 @@ public class Yunxin { option.put("route",false); // 该消息是否需要抄送第三方 (需要app开通消息抄送功能) Map bodyData = new HashMap<>(); - bodyData.put("from", StringUtils.isBlank(fromUid) ? yunxinProperties.getDefaultFromUid() :fromUid); + bodyData.put("from", fromUid == null ? yunxinProperties.getDefaultFromUid() :fromUid); bodyData.put("ope", 0); bodyData.put("to", toUid); bodyData.put("type", 100); diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/bean/CallerRoom.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/bean/CallerRoom.java deleted file mode 100644 index 108a0524..00000000 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/bean/CallerRoom.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.ruoyi.cai.ws.bean; - -public class CallerRoom { -} diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/bean/FdCtxData.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/bean/FdCtxData.java index 9b813a37..219ebdf7 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/bean/FdCtxData.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/bean/FdCtxData.java @@ -7,7 +7,7 @@ import lombok.Data; public class FdCtxData { private String sessionKey; - private String roomId; + private Long roomId; private Long userId; private Integer userType; private Long tarUserId; diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/bean/Room.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/bean/Room.java index 0e7387de..a1974294 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/bean/Room.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/bean/Room.java @@ -10,7 +10,7 @@ public class Room { private UserData callUserData; private UserData receiverUserData; - public String getRoomId(){ + public Long getRoomId(){ return roomData.getRoomId(); } @@ -26,4 +26,20 @@ public class Room { return RoomStatusEnums.STATUS_AGREE.getCode().equals(roomData.getStatus()); } + /** + * 房间是否已经结算 + * @return + */ + public boolean isSettle() { + return roomData.getSettleTime() != null && roomData.getSettleTime() > 0; + } + + + /** + * 是否已经释放房间资源 + * @return + */ + public boolean isReleaseRes(){ + return roomData.isReleaseRes(); + } } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/bean/RoomData.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/bean/RoomData.java index e705ce87..3d8c683b 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/bean/RoomData.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/bean/RoomData.java @@ -6,14 +6,18 @@ import java.math.BigDecimal; @Data public class RoomData { - private String roomId; + private Long roomId; private Long callPrice; private String skillName; private Integer status; private BigDecimal videoDivide; - private Integer payCoin = 0; - private Integer payIncome = 0; + private Long payCoin = 0L; + private Long payIncome = 0L; private Long hangUpTime; + private Long settleTime; + private Long beginTime; + + private boolean releaseRes = false; } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/bean/UserData.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/bean/UserData.java index 0373be91..e89723cd 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/bean/UserData.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/bean/UserData.java @@ -7,7 +7,7 @@ import java.math.BigDecimal; @Data public class UserData { private Long id; - private String roomId; + private Long roomId; private int userType; private String nickname; private String userCode; @@ -18,4 +18,6 @@ public class UserData { private Long unionUserId; private BigDecimal unionUserRate; private Boolean unionIsGet; + + private Long connectTime; } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/cache/CallerRoomCache.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/cache/CallerRoomCache.java index 56e6cf88..65b4ec50 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/cache/CallerRoomCache.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/cache/CallerRoomCache.java @@ -1,10 +1,13 @@ package com.ruoyi.cai.ws.cache; import com.ruoyi.cai.ws.constant.RedisConstant; +import org.apache.commons.lang3.BooleanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.data.redis.core.script.DefaultRedisScript; import org.springframework.stereotype.Component; +import java.util.Collections; import java.util.Map; import java.util.concurrent.TimeUnit; @@ -17,10 +20,10 @@ public class CallerRoomCache { return String.format(RedisConstant.CALLER_ROOM_DATA,fromUserId); } - public String getRoomId(Long fromUserId, Long toUserId){ + public Long getRoomId(Long fromUserId, Long toUserId){ String key = getKey(fromUserId); Object roomId = redisTemplate.opsForHash().get(key, toUserId); - return roomId == null ? null : String.valueOf(roomId); + return roomId == null ? null : Long.valueOf(roomId.toString()); } public void addRoom(Long fromUid, Long toUid, Long roomId) { @@ -38,4 +41,17 @@ public class CallerRoomCache { String key = getKey(fromUid); redisTemplate.delete(key); } + + private final static String DEL_ROOM_LUA = "return KEYS[1]\n" + + "local r = tonumber(redis.call('hget',KEYS[1],ARGV[1]))\n" + + "if r == tonumber(ARGV[2]) then\n" + + " return redis.call('hdel',KEYS[1],ARGV[1])\n" + + "end\n" + + "return 0"; + + public boolean delRoom(Long receiverId, Long roomId) { + DefaultRedisScript redisScript = new DefaultRedisScript<>(DEL_ROOM_LUA,Boolean.class); + Boolean execute = redisTemplate.execute(redisScript, Collections.singletonList(getKey(roomId)), receiverId,roomId); + return BooleanUtils.isTrue(execute); + } } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/cache/OnlineDataCache.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/cache/OnlineDataCache.java index 7ae68e1c..6b581465 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/cache/OnlineDataCache.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/cache/OnlineDataCache.java @@ -14,7 +14,11 @@ public class OnlineDataCache { return RedisConstant.ONLINE_ROOM_DATA; } - public void add(String roomId){ - redisTemplate.opsForSet().add(getKey(),roomId); + public void add(Long roomId){ + redisTemplate.opsForSet().add(getKey(), String.valueOf(roomId)); + } + + public void remove(Long roomId) { + redisTemplate.opsForSet().remove(getKey(),roomId); } } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/cache/RoomCtxCache.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/cache/RoomCtxCache.java index 7cd0e4f2..af6cd2cb 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/cache/RoomCtxCache.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/cache/RoomCtxCache.java @@ -2,7 +2,7 @@ package com.ruoyi.cai.ws.cache; import com.ruoyi.cai.ws.constant.RedisConstant; import com.ruoyi.cai.ws.constant.UserDataConstant; -import com.ruoyi.websocket.holder.WebSocketSessionHolder; +import com.ruoyi.cai.ws.holder.WebSocketSessionHolder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Component; @@ -17,17 +17,17 @@ public class RoomCtxCache { @Autowired private StringRedisTemplate redisTemplate; - public String getKey(String roomId){ + public String getKey(Long roomId){ return String.format(RedisConstant.FDCTX_ROOM_DATA,roomId); } - public void addFd(String sessionKey,String roomId,Integer userType){ + public void addFd(String sessionKey,Long roomId,Integer userType){ String key = getKey(roomId); redisTemplate.opsForHash().putIfAbsent(key,sessionKey,userType); redisTemplate.expire(key,7, TimeUnit.DAYS); } - public List getSessionKeysByRoomId(String roomId){ + public List getSessionKeysByRoomId(Long roomId){ String key = getKey(roomId); Map entries = redisTemplate.opsForHash().entries(key); List res = new ArrayList<>(); @@ -37,7 +37,7 @@ public class RoomCtxCache { return res; } - public String getSessionKeyByRoomIdAndUserType(String roomId,Integer userType){ + public String getSessionKeyByRoomIdAndUserType(Long roomId,Integer userType){ String key = getKey(roomId); Map entries = redisTemplate.opsForHash().entries(key); for (Map.Entry entry : entries.entrySet()) { @@ -50,15 +50,15 @@ public class RoomCtxCache { return null; } - public String getSessionKeyReceiverByRoomId(String roomId){ + public String getSessionKeyReceiverByRoomId(Long roomId){ return getSessionKeyByRoomIdAndUserType(roomId, UserDataConstant.TYPE_RECEIVER); } - public String getSessionKeyCallerByRoomId(String roomId){ + public String getSessionKeyCallerByRoomId(Long roomId){ return getSessionKeyByRoomIdAndUserType(roomId, UserDataConstant.TYPE_CALLER); } - public void del(String roomId) { + public void del(Long roomId) { String key = getKey(roomId); redisTemplate.delete(key); } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/cache/RoomDataCache.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/cache/RoomDataCache.java index b67b806b..ec3aca07 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/cache/RoomDataCache.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/cache/RoomDataCache.java @@ -27,19 +27,16 @@ public class RoomDataCache { @Autowired private StringRedisTemplate stringRedisTemplate; - public String getKey(String roomId){ + public String getKey(Long roomId){ return String.format(RedisConstant.ROOM_DATA,roomId); } - public RoomData getByRoomId(String roomId){ + public RoomData getByRoomId(Long roomId){ Map map = stringRedisTemplate.opsForHash().entries(getKey(roomId)); if(map.get("roomId") == null){ return null; } - RoomData roomData = new RoomData(); - roomData.setRoomId(map.get("roomId").toString()); - roomData.setCallPrice(Long.valueOf(map.get("callPrice").toString())); - return roomData; + return JSON.parseObject(JSON.toJSONString(map),RoomData.class); } public void init(RoomData roomData) { @@ -47,6 +44,16 @@ public class RoomDataCache { stringRedisTemplate.opsForHash().putAll(getKey(roomData.getRoomId()),map); } + public void hMSet(Long roomId,Map data) { + String key = getKey(roomId); + stringRedisTemplate.opsForHash().putAll(key,data); + } + + public void hMSet(Long roomId,String mKey,Object mData) { + String key = getKey(roomId); + stringRedisTemplate.opsForHash().put(key,mKey,mData); + } + private final static String HANG_UP = "local hangupTime = tonumber(redis.call('hGet', KEYS[1], 'hangupTime'))\n" + "if hangupTime > 0 then\n" + @@ -54,14 +61,14 @@ public class RoomDataCache { "end\n" + "return redis.call('hMSet', KEYS[1], 'status', 8, 'hangupTime', ARGV[1])"; - public boolean hangUp(String roomId) { + public boolean hangUp(Long roomId) { DefaultRedisScript redisScript = new DefaultRedisScript<>(HANG_UP,Boolean.class); String currentTime = String.valueOf(System.currentTimeMillis() / 1000); Boolean execute = stringRedisTemplate.execute(redisScript, Collections.singletonList(getKey(roomId)), currentTime); return BooleanUtils.isTrue(execute); } - public void setStatus(String roomId, RoomStatusEnums status) { + public void setStatus(Long roomId, RoomStatusEnums status) { String key = getKey(roomId); stringRedisTemplate.opsForHash().put(key,"status",status.getCode()); } @@ -72,7 +79,7 @@ public class RoomDataCache { "end\n" + "return redis.call('hmset', KEYS[1], 'status', 3)"; - public boolean setStatusReceiverConnection(String roomId) { + public boolean setStatusReceiverConnection(Long roomId) { DefaultRedisScript redisScript = new DefaultRedisScript<>(SET_STATUS_RECEIVER_CONNECTION,Boolean.class); Boolean execute = stringRedisTemplate.execute(redisScript, Collections.singletonList(getKey(roomId))); return BooleanUtils.isTrue(execute); @@ -86,7 +93,7 @@ public class RoomDataCache { "end\n" + "return redis.call('hmset', KEYS[1], 'status', 7, 'beginTime', ARGV[1])"; - public boolean setStatusAgree(String roomId) { + public boolean setStatusAgree(Long roomId) { DefaultRedisScript redisScript = new DefaultRedisScript<>(SET_STATUS_AGREE,Boolean.class); String currentTime = String.valueOf(System.currentTimeMillis() / 1000); Boolean execute = stringRedisTemplate.execute(redisScript, Collections.singletonList(getKey(roomId)),currentTime); diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/cache/UserDataCache.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/cache/UserDataCache.java index 82b803e5..345a46ba 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/cache/UserDataCache.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/cache/UserDataCache.java @@ -4,7 +4,6 @@ import com.alibaba.fastjson2.JSON; import com.ruoyi.cai.ws.bean.UserData; import com.ruoyi.cai.ws.constant.RedisConstant; import com.ruoyi.cai.ws.constant.UserDataConstant; -import com.ruoyi.cai.ws.util.MapGetUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Component; @@ -16,37 +15,25 @@ public class UserDataCache { @Autowired private StringRedisTemplate redisTemplate; - public String getKey(String roomId,int type){ + public String getKey(Long roomId,int type){ return String.format(RedisConstant.USER_ROOM_DATA,roomId,type== UserDataConstant.TYPE_CALLER?"caller":"receiver"); } - public UserData getCallerUserDataByRoom(String roomId){ + public UserData getCallerUserDataByRoom(Long roomId){ return getUserDataByRoom(roomId,UserDataConstant.TYPE_CALLER); } - public UserData getReceiverUserDataByRoom(String roomId){ + public UserData getReceiverUserDataByRoom(Long roomId){ return getUserDataByRoom(roomId,UserDataConstant.TYPE_RECEIVER); } - public UserData getUserDataByRoom(String roomId,int type){ + public UserData getUserDataByRoom(Long roomId,int type){ String key = getKey(roomId, type); Map entries = redisTemplate.opsForHash().entries(key); if(entries.get("roomId") == null){ return null; } - UserData userData = new UserData(); - userData.setId(MapGetUtil.getLong(entries.get("id"))); - userData.setRoomId(MapGetUtil.getString(entries.get("roomId"))); - userData.setUserType(MapGetUtil.getInt(entries.get("userType"))); - userData.setNickname(MapGetUtil.getString(entries.get("nickname"))); - userData.setUserCode(MapGetUtil.getString(entries.get("userCode"))); - userData.setInviterId(MapGetUtil.getLong(entries.get("inviterId"))); - userData.setInviterRate(MapGetUtil.getBigDecimal(entries.get("inviterRate"))); - userData.setInviterIsGet(MapGetUtil.getBoolean(entries.get("inviterIsGet"))); - userData.setUnionUserId(MapGetUtil.getLong(entries.get("unionUserId"))); - userData.setUnionUserRate(MapGetUtil.getBigDecimal(entries.get("unionUserRate"))); - userData.setUnionIsGet(MapGetUtil.getBoolean(entries.get("unionIsGet"))); - return userData; + return JSON.parseObject(JSON.toJSONString(entries),UserData.class); } public void init(UserData userData,int type){ @@ -64,7 +51,7 @@ public class UserDataCache { init(callerUserData,UserDataConstant.TYPE_RECEIVER); } - public void hMSet(String roomId,Integer userType,Map data) { + public void hMSet(Long roomId,Integer userType,Map data) { String key = getKey(roomId, userType); redisTemplate.opsForHash().putAll(key,data); } diff --git a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/config/WebSocketConfig.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/config/WebSocketConfig.java similarity index 97% rename from ruoyi-websocket/src/main/java/com/ruoyi/websocket/config/WebSocketConfig.java rename to ruoyi-cai/src/main/java/com/ruoyi/cai/ws/config/WebSocketConfig.java index 2286d2a5..f8c24e06 100644 --- a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/config/WebSocketConfig.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/config/WebSocketConfig.java @@ -1,4 +1,4 @@ -package com.ruoyi.websocket.config; +package com.ruoyi.cai.ws.config; import cn.hutool.core.util.StrUtil; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; diff --git a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/config/WebSocketProperties.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/config/WebSocketProperties.java similarity index 91% rename from ruoyi-websocket/src/main/java/com/ruoyi/websocket/config/WebSocketProperties.java rename to ruoyi-cai/src/main/java/com/ruoyi/cai/ws/config/WebSocketProperties.java index 8112a1c2..c73989ef 100644 --- a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/config/WebSocketProperties.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/config/WebSocketProperties.java @@ -1,4 +1,4 @@ -package com.ruoyi.websocket.config; +package com.ruoyi.cai.ws.config; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; diff --git a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/constant/WebSocketConstants.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/constant/WebSocketConstants.java similarity index 92% rename from ruoyi-websocket/src/main/java/com/ruoyi/websocket/constant/WebSocketConstants.java rename to ruoyi-cai/src/main/java/com/ruoyi/cai/ws/constant/WebSocketConstants.java index 4e2b2699..5b662c6f 100644 --- a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/constant/WebSocketConstants.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/constant/WebSocketConstants.java @@ -1,4 +1,4 @@ -package com.ruoyi.websocket.constant; +package com.ruoyi.cai.ws.constant; /** * websocket的常量配置 diff --git a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/dto/WebSocketMessageDto.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/dto/WebSocketMessageDto.java similarity index 92% rename from ruoyi-websocket/src/main/java/com/ruoyi/websocket/dto/WebSocketMessageDto.java rename to ruoyi-cai/src/main/java/com/ruoyi/cai/ws/dto/WebSocketMessageDto.java index 488a49b4..f5f4fada 100644 --- a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/dto/WebSocketMessageDto.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/dto/WebSocketMessageDto.java @@ -1,4 +1,4 @@ -package com.ruoyi.websocket.dto; +package com.ruoyi.cai.ws.dto; import lombok.Data; diff --git a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/dto/WsR.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/dto/WsR.java similarity index 98% rename from ruoyi-websocket/src/main/java/com/ruoyi/websocket/dto/WsR.java rename to ruoyi-cai/src/main/java/com/ruoyi/cai/ws/dto/WsR.java index 943a4987..32821590 100644 --- a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/dto/WsR.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/dto/WsR.java @@ -1,4 +1,4 @@ -package com.ruoyi.websocket.dto; +package com.ruoyi.cai.ws.dto; import com.ruoyi.common.constant.HttpStatus; import lombok.Data; diff --git a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/dto/WsRMsgGen.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/dto/WsRMsgGen.java similarity index 94% rename from ruoyi-websocket/src/main/java/com/ruoyi/websocket/dto/WsRMsgGen.java rename to ruoyi-cai/src/main/java/com/ruoyi/cai/ws/dto/WsRMsgGen.java index c5a0bcd2..e6503ae4 100644 --- a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/dto/WsRMsgGen.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/dto/WsRMsgGen.java @@ -1,4 +1,4 @@ -package com.ruoyi.websocket.dto; +package com.ruoyi.cai.ws.dto; import com.alibaba.fastjson.JSON; import com.ruoyi.cai.domain.CaiGift; @@ -8,7 +8,7 @@ import java.util.Map; public class WsRMsgGen { - public static WsR response(String roomId){ + public static WsR response(Long roomId){ Map map = new HashMap<>(); map.put("roomid",roomId); WsR> ok = WsR.ok(map); @@ -17,7 +17,7 @@ public class WsRMsgGen { return ok; } - public static WsR startVideo(String roomId,Long duration){ + public static WsR startVideo(Long roomId,Long duration){ Map map = new HashMap<>(); map.put("roomid",roomId); map.put("duration",duration); @@ -51,7 +51,7 @@ public class WsRMsgGen { return ok; } - public static WsR hangup(String message, String roomId, Integer hangUpType) { + public static WsR hangup(String message, Long roomId, Integer hangUpType) { Map map = new HashMap<>(); map.put("roomid","roomId"); map.put("type","hangUpType"); diff --git a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/handler/AbstractMessageHandle.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/AbstractMessageHandle.java similarity index 82% rename from ruoyi-websocket/src/main/java/com/ruoyi/websocket/handler/AbstractMessageHandle.java rename to ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/AbstractMessageHandle.java index e66f9dfb..9543cf5e 100644 --- a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/handler/AbstractMessageHandle.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/AbstractMessageHandle.java @@ -1,9 +1,9 @@ -package com.ruoyi.websocket.handler; +package com.ruoyi.cai.ws.handler; import com.ruoyi.cai.ws.bean.FdCtxData; import com.ruoyi.cai.ws.cache.RoomCtxCache; -import com.ruoyi.websocket.dto.WsR; -import com.ruoyi.websocket.util.RoomWebSocketUtil; +import com.ruoyi.cai.ws.dto.WsR; +import com.ruoyi.cai.ws.util.RoomWebSocketUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -24,12 +24,12 @@ public abstract class AbstractMessageHandle implements IMessageHandler { RoomWebSocketUtil.sendSendMessage(sessionKey, r); } - protected void sendToReceiver(String roomId, WsR r){ + protected void sendToReceiver(Long roomId, WsR r){ String receiverSessionKey = roomCtxCache.getSessionKeyReceiverByRoomId(roomId); RoomWebSocketUtil.sendSendMessage(receiverSessionKey, r); } - protected void sendToAll(String roomId, WsR ... r ){ + protected void sendToAll(Long roomId, WsR ... r ){ List sessionKeys = roomCtxCache.getSessionKeysByRoomId(roomId); for (WsR wsR : r) { RoomWebSocketUtil.sendSendMessage(sessionKeys, wsR); diff --git a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/handler/IMessageHandler.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/IMessageHandler.java similarity index 85% rename from ruoyi-websocket/src/main/java/com/ruoyi/websocket/handler/IMessageHandler.java rename to ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/IMessageHandler.java index 73e86b62..21e968da 100644 --- a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/handler/IMessageHandler.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/IMessageHandler.java @@ -1,4 +1,4 @@ -package com.ruoyi.websocket.handler; +package com.ruoyi.cai.ws.handler; import com.alibaba.fastjson2.JSONObject; import com.ruoyi.cai.ws.bean.FdCtxData; diff --git a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/handler/MessageHandleApplication.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/MessageHandleApplication.java similarity index 90% rename from ruoyi-websocket/src/main/java/com/ruoyi/websocket/handler/MessageHandleApplication.java rename to ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/MessageHandleApplication.java index 77eafc15..6f2cf134 100644 --- a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/handler/MessageHandleApplication.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/MessageHandleApplication.java @@ -1,4 +1,4 @@ -package com.ruoyi.websocket.handler; +package com.ruoyi.cai.ws.handler; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; @@ -8,6 +8,7 @@ import com.ruoyi.cai.ws.cache.FdCtxDataCache; import com.ruoyi.cai.ws.constant.HangUpEnums; import com.ruoyi.cai.ws.service.CheckConnectionDTO; import com.ruoyi.cai.ws.service.RoomService; +import com.ruoyi.cai.ws.util.MapGetUtil; import com.ruoyi.cai.ws.util.WsExceptionUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -37,8 +38,8 @@ public class MessageHandleApplication { return; } Map attributes = session.getAttributes(); - String roomId = (String) attributes.get("roomId"); - String sessionKey = (String) attributes.get("token"); + Long roomId = MapGetUtil.getLong(attributes.get("roomId")); + String sessionKey = MapGetUtil.getString(attributes.get("token")); Room room = roomService.load(roomId); if(room == null){ WsExceptionUtil.throwException("房间不可用", sessionKey,HangUpEnums.OTHER, roomId); diff --git a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/handler/RoomWebSocketHandler.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/RoomWebSocketHandler.java similarity index 91% rename from ruoyi-websocket/src/main/java/com/ruoyi/websocket/handler/RoomWebSocketHandler.java rename to ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/RoomWebSocketHandler.java index 96bbfa20..41b3f9ac 100644 --- a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/handler/RoomWebSocketHandler.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/RoomWebSocketHandler.java @@ -1,8 +1,9 @@ -package com.ruoyi.websocket.handler; +package com.ruoyi.cai.ws.handler; -import com.ruoyi.websocket.constant.WebSocketConstants; -import com.ruoyi.websocket.holder.WebSocketSessionHolder; -import com.ruoyi.websocket.util.WebSocketUtils; +import com.ruoyi.cai.ws.constant.WebSocketConstants; +import com.ruoyi.cai.ws.holder.WebSocketSessionHolder; +import com.ruoyi.cai.ws.processon.OpenLogic; +import com.ruoyi.cai.ws.util.WebSocketUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -21,7 +22,7 @@ import java.util.Map; public class RoomWebSocketHandler extends AbstractWebSocketHandler { @Autowired - private IOpenLogic openLogic; + private OpenLogic openLogic; @Autowired private MessageHandleApplication messageHandleApplication; /** diff --git a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/handler/message/AgreeMessageHandle.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/message/AgreeMessageHandle.java similarity index 88% rename from ruoyi-websocket/src/main/java/com/ruoyi/websocket/handler/message/AgreeMessageHandle.java rename to ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/message/AgreeMessageHandle.java index dce397e5..37b7135e 100644 --- a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/handler/message/AgreeMessageHandle.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/message/AgreeMessageHandle.java @@ -1,4 +1,4 @@ -package com.ruoyi.websocket.handler.message; +package com.ruoyi.cai.ws.handler.message; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -8,9 +8,9 @@ import com.ruoyi.cai.ws.bean.FdCtxData; import com.ruoyi.cai.ws.bean.Room; import com.ruoyi.cai.ws.cache.RoomDataCache; import com.ruoyi.cai.ws.constant.RoomStatusEnums; -import com.ruoyi.websocket.dto.WsRMsgGen; -import com.ruoyi.websocket.handler.AbstractMessageHandle; -import com.ruoyi.websocket.handler.IMessageHandler; +import com.ruoyi.cai.ws.dto.WsRMsgGen; +import com.ruoyi.cai.ws.handler.IMessageHandler; +import com.ruoyi.cai.ws.handler.AbstractMessageHandle; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/handler/message/CanCallTimeMessageHandler.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/message/CanCallTimeMessageHandler.java similarity index 77% rename from ruoyi-websocket/src/main/java/com/ruoyi/websocket/handler/message/CanCallTimeMessageHandler.java rename to ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/message/CanCallTimeMessageHandler.java index 7549fa5e..70c3e714 100644 --- a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/handler/message/CanCallTimeMessageHandler.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/message/CanCallTimeMessageHandler.java @@ -1,12 +1,12 @@ -package com.ruoyi.websocket.handler.message; +package com.ruoyi.cai.ws.handler.message; import com.alibaba.fastjson2.JSONObject; import com.ruoyi.cai.ws.bean.FdCtxData; import com.ruoyi.cai.ws.bean.Room; +import com.ruoyi.cai.ws.handler.IMessageHandler; import com.ruoyi.cai.ws.service.RoomService; -import com.ruoyi.websocket.dto.WsRMsgGen; -import com.ruoyi.websocket.handler.AbstractMessageHandle; -import com.ruoyi.websocket.handler.IMessageHandler; +import com.ruoyi.cai.ws.dto.WsRMsgGen; +import com.ruoyi.cai.ws.handler.AbstractMessageHandle; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/handler/message/CancelMessageHandler.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/message/CancelMessageHandler.java similarity index 84% rename from ruoyi-websocket/src/main/java/com/ruoyi/websocket/handler/message/CancelMessageHandler.java rename to ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/message/CancelMessageHandler.java index 5285bea8..81163a9a 100644 --- a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/handler/message/CancelMessageHandler.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/message/CancelMessageHandler.java @@ -1,4 +1,4 @@ -package com.ruoyi.websocket.handler.message; +package com.ruoyi.cai.ws.handler.message; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -11,10 +11,10 @@ import com.ruoyi.cai.ws.bean.FdCtxData; import com.ruoyi.cai.ws.bean.Room; import com.ruoyi.cai.ws.constant.HangUpEnums; import com.ruoyi.cai.ws.constant.RoomStatusEnums; +import com.ruoyi.cai.ws.handler.IMessageHandler; import com.ruoyi.cai.ws.service.RoomService; -import com.ruoyi.websocket.dto.WsRMsgGen; -import com.ruoyi.websocket.handler.AbstractMessageHandle; -import com.ruoyi.websocket.handler.IMessageHandler; +import com.ruoyi.cai.ws.dto.WsRMsgGen; +import com.ruoyi.cai.ws.handler.AbstractMessageHandle; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -38,13 +38,13 @@ public class CancelMessageHandler extends AbstractMessageHandle implements IMess && !RoomStatusEnums.STATUS_RECEIVER_CONNECT.getCode().equals(room.getStatus())){ return; } - String roomId = room.getRoomId(); + Long roomId = room.getRoomId(); sendToCurrent(fdCtxData,WsRMsgGen.hangup("通话已取消",roomId, HangUpEnums.CANCEL.getCode())); sendToReceiver(roomId,WsRMsgGen.hangup("对方已取消",roomId, HangUpEnums.CANCEL.getCode())); roomService.closeAllFd(roomId); // IM - String receiverId = room.getReceiverUserData().getId() +""; - String callerId = room.getCallUserData().getId()+""; + Long receiverId = room.getReceiverUserData().getId(); + Long callerId = room.getCallUserData().getId(); ImDataRes imDataRes = ImMsgGen.callNotice(1, callerId, receiverId, 0); yunxin.sendTo(receiverId,imDataRes,callerId); // 更新房间状态 diff --git a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/handler/message/GiftMessageHandler.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/message/GiftMessageHandler.java similarity index 92% rename from ruoyi-websocket/src/main/java/com/ruoyi/websocket/handler/message/GiftMessageHandler.java rename to ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/message/GiftMessageHandler.java index 66e04fa3..a6bbd3a3 100644 --- a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/handler/message/GiftMessageHandler.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/message/GiftMessageHandler.java @@ -1,4 +1,4 @@ -package com.ruoyi.websocket.handler.message; +package com.ruoyi.cai.ws.handler.message; import com.alibaba.fastjson2.JSONObject; import com.ruoyi.cai.domain.CaiAccount; @@ -9,9 +9,9 @@ import com.ruoyi.cai.service.CaiGiftService; import com.ruoyi.cai.service.CaiUserGiftService; import com.ruoyi.cai.ws.bean.FdCtxData; import com.ruoyi.cai.ws.bean.Room; -import com.ruoyi.websocket.dto.WsRMsgGen; -import com.ruoyi.websocket.handler.AbstractMessageHandle; -import com.ruoyi.websocket.handler.IMessageHandler; +import com.ruoyi.cai.ws.dto.WsRMsgGen; +import com.ruoyi.cai.ws.handler.IMessageHandler; +import com.ruoyi.cai.ws.handler.AbstractMessageHandle; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/handler/message/HangupMessageHandler.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/message/HangupMessageHandler.java similarity index 76% rename from ruoyi-websocket/src/main/java/com/ruoyi/websocket/handler/message/HangupMessageHandler.java rename to ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/message/HangupMessageHandler.java index b1868767..a9e50fe5 100644 --- a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/handler/message/HangupMessageHandler.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/message/HangupMessageHandler.java @@ -1,23 +1,17 @@ -package com.ruoyi.websocket.handler.message; +package com.ruoyi.cai.ws.handler.message; import com.alibaba.fastjson2.JSONObject; import com.ruoyi.cai.ws.bean.FdCtxData; import com.ruoyi.cai.ws.bean.Room; -import com.ruoyi.cai.ws.cache.RoomCtxCache; import com.ruoyi.cai.ws.cache.RoomDataCache; import com.ruoyi.cai.ws.constant.HangUpEnums; +import com.ruoyi.cai.ws.dto.WsRMsgGen; +import com.ruoyi.cai.ws.handler.AbstractMessageHandle; +import com.ruoyi.cai.ws.handler.IMessageHandler; import com.ruoyi.cai.ws.service.RoomService; -import com.ruoyi.websocket.dto.WsR; -import com.ruoyi.websocket.dto.WsRMsgGen; -import com.ruoyi.websocket.handler.AbstractMessageHandle; -import com.ruoyi.websocket.handler.IMessageHandler; -import com.ruoyi.websocket.util.RoomWebSocketUtil; -import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import java.util.Map; - /** * 挂断处理 */ @@ -30,7 +24,7 @@ public class HangupMessageHandler extends AbstractMessageHandle implements IMess @Override public void processOn(Room room, FdCtxData fdCtxData, JSONObject map) { - if(StringUtils.isEmpty(room.getRoomId())){ + if(room.getRoomId() == null){ return; } // 经测试,app端挂断时,可能会把旧的房间id传上来,所以需要判断id与fd上下文的一致性 @@ -43,6 +37,7 @@ public class HangupMessageHandler extends AbstractMessageHandle implements IMess } // 触发结算 TODO + Integer type = fdCtxData.isCaller() ? HangUpEnums.FROM.getCode() : HangUpEnums.TO.getCode(); sendToCurrent(fdCtxData,WsRMsgGen.hangup("您已挂断",room.getRoomId(), type)); sendToTar(fdCtxData,WsRMsgGen.hangup("对方已挂断",room.getRoomId(), type)); diff --git a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/handler/message/HeartbeatMessageHandler.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/message/HeartbeatMessageHandler.java similarity index 83% rename from ruoyi-websocket/src/main/java/com/ruoyi/websocket/handler/message/HeartbeatMessageHandler.java rename to ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/message/HeartbeatMessageHandler.java index bf06f98a..f406c3ad 100644 --- a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/handler/message/HeartbeatMessageHandler.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/message/HeartbeatMessageHandler.java @@ -1,13 +1,13 @@ -package com.ruoyi.websocket.handler.message; +package com.ruoyi.cai.ws.handler.message; import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson2.JSONObject; import com.ruoyi.cai.ws.bean.FdCtxData; import com.ruoyi.cai.ws.bean.Room; import com.ruoyi.cai.ws.cache.UserDataCache; -import com.ruoyi.websocket.dto.WsRMsgGen; -import com.ruoyi.websocket.handler.AbstractMessageHandle; -import com.ruoyi.websocket.handler.IMessageHandler; +import com.ruoyi.cai.ws.dto.WsRMsgGen; +import com.ruoyi.cai.ws.handler.IMessageHandler; +import com.ruoyi.cai.ws.handler.AbstractMessageHandle; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/handler/message/MessageHandler.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/message/MessageHandler.java similarity index 77% rename from ruoyi-websocket/src/main/java/com/ruoyi/websocket/handler/message/MessageHandler.java rename to ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/message/MessageHandler.java index f0d5f904..426d8445 100644 --- a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/handler/message/MessageHandler.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/message/MessageHandler.java @@ -1,11 +1,11 @@ -package com.ruoyi.websocket.handler.message; +package com.ruoyi.cai.ws.handler.message; import com.alibaba.fastjson2.JSONObject; import com.ruoyi.cai.ws.bean.FdCtxData; import com.ruoyi.cai.ws.bean.Room; -import com.ruoyi.websocket.dto.WsRMsgGen; -import com.ruoyi.websocket.handler.AbstractMessageHandle; -import com.ruoyi.websocket.handler.IMessageHandler; +import com.ruoyi.cai.ws.dto.WsRMsgGen; +import com.ruoyi.cai.ws.handler.IMessageHandler; +import com.ruoyi.cai.ws.handler.AbstractMessageHandle; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; diff --git a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/handler/message/RefuseMessageHandler.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/message/RefuseMessageHandler.java similarity index 86% rename from ruoyi-websocket/src/main/java/com/ruoyi/websocket/handler/message/RefuseMessageHandler.java rename to ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/message/RefuseMessageHandler.java index 7f874746..05c6c14b 100644 --- a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/handler/message/RefuseMessageHandler.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/handler/message/RefuseMessageHandler.java @@ -1,4 +1,4 @@ -package com.ruoyi.websocket.handler.message; +package com.ruoyi.cai.ws.handler.message; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -12,10 +12,10 @@ import com.ruoyi.cai.ws.bean.Room; import com.ruoyi.cai.ws.cache.RoomDataCache; import com.ruoyi.cai.ws.constant.HangUpEnums; import com.ruoyi.cai.ws.constant.RoomStatusEnums; +import com.ruoyi.cai.ws.handler.IMessageHandler; import com.ruoyi.cai.ws.service.RoomService; -import com.ruoyi.websocket.dto.WsRMsgGen; -import com.ruoyi.websocket.handler.AbstractMessageHandle; -import com.ruoyi.websocket.handler.IMessageHandler; +import com.ruoyi.cai.ws.dto.WsRMsgGen; +import com.ruoyi.cai.ws.handler.AbstractMessageHandle; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -46,8 +46,8 @@ public class RefuseMessageHandler extends AbstractMessageHandle implements IMess roomService.closeAllFd(room.getRoomId()); //发送IM通知 - String receiverId = room.getReceiverUserData().getId()+""; - String callerId = room.getCallUserData().getId()+""; + Long receiverId = room.getReceiverUserData().getId(); + Long callerId = room.getCallUserData().getId(); ImDataRes imDataRes = ImMsgGen.callNotice(1, callerId, receiverId, 0); yunxin.sendTo(receiverId,imDataRes,callerId); diff --git a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/holder/WebSocketSessionHolder.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/holder/WebSocketSessionHolder.java similarity index 96% rename from ruoyi-websocket/src/main/java/com/ruoyi/websocket/holder/WebSocketSessionHolder.java rename to ruoyi-cai/src/main/java/com/ruoyi/cai/ws/holder/WebSocketSessionHolder.java index 1196774b..c0b66c50 100644 --- a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/holder/WebSocketSessionHolder.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/holder/WebSocketSessionHolder.java @@ -1,4 +1,4 @@ -package com.ruoyi.websocket.holder; +package com.ruoyi.cai.ws.holder; import lombok.AccessLevel; import lombok.NoArgsConstructor; diff --git a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/interceptor/PlusWebSocketInterceptor.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/interceptor/PlusWebSocketInterceptor.java similarity index 96% rename from ruoyi-websocket/src/main/java/com/ruoyi/websocket/interceptor/PlusWebSocketInterceptor.java rename to ruoyi-cai/src/main/java/com/ruoyi/cai/ws/interceptor/PlusWebSocketInterceptor.java index b087d610..814089cf 100644 --- a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/interceptor/PlusWebSocketInterceptor.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/interceptor/PlusWebSocketInterceptor.java @@ -1,4 +1,4 @@ -package com.ruoyi.websocket.interceptor; +package com.ruoyi.cai.ws.interceptor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.server.ServerHttpRequest; diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/manager/WebSocketManager.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/manager/WebSocketManager.java index c902a2ea..b3f6a1d3 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/manager/WebSocketManager.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/manager/WebSocketManager.java @@ -16,7 +16,6 @@ import com.ruoyi.cai.ws.cache.UserDataCache; import com.ruoyi.cai.ws.constant.RedisConstant; import com.ruoyi.cai.ws.service.RoomService; import com.ruoyi.common.exception.ServiceException; -import org.apache.commons.lang3.StringUtils; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired; @@ -44,8 +43,8 @@ public class WebSocketManager { private RedissonClient redissonClient; public Room checkOnlineRoom(Long fromUserId,Long toUserId){ - String roomId = callerRoomCache.getRoomId(fromUserId, toUserId); - if(StringUtils.isEmpty(roomId)){ + Long roomId = callerRoomCache.getRoomId(fromUserId, toUserId); + if(roomId == null){ return null; } Room room = roomService.load(roomId); @@ -55,7 +54,7 @@ public class WebSocketManager { return room; } - public String createRoom(String roomId) { + public Long createRoom(Long roomId) { CaiUserCall userCall = userCallService.getById(roomId); if(userCall == null){ throw new ServiceException("无效房间"); @@ -77,7 +76,7 @@ public class WebSocketManager { return roomId; } - public String initRoom(CaiUserCall call){ + public Long initRoom(CaiUserCall call){ call = userCallService.getById(call.getId()); CaiUser callUser = userService.getById(call.getFromUid()); if(callUser == null){ @@ -103,7 +102,7 @@ public class WebSocketManager { roomService.delCallRoom(call.getFromUid()); // 初始化 RoomData roomData = new RoomData(); - roomData.setRoomId(call.getId()+""); + roomData.setRoomId(call.getId()); roomData.setCallPrice(call.getCallPrice()); roomData.setSkillName(call.getSkillName()); roomData.setStatus(call.getStatus()); @@ -111,13 +110,13 @@ public class WebSocketManager { roomDataCache.init(roomData); UserData callerUserData = new UserData(); callerUserData.setId(call.getFromUid()); - callerUserData.setRoomId(call.getId()+""); + callerUserData.setRoomId(call.getId()); callerUserData.setNickname(callUser.getNickname()); callerUserData.setUserCode(callUser.getUsercode()); userDataCache.initCaller(callerUserData); UserData receiveUserData = new UserData(); receiveUserData.setId(call.getToUid()); - receiveUserData.setRoomId(call.getId()+""); + receiveUserData.setRoomId(call.getId()); receiveUserData.setNickname(receiverUser.getNickname()); receiveUserData.setUserCode(receiverUser.getUsercode()); receiveUserData.setInviterId(call.getReceiverInviteUserId()); @@ -128,7 +127,7 @@ public class WebSocketManager { receiveUserData.setUnionIsGet(call.getReceiverUnionGet()); userDataCache.initReceiver(callerUserData); callerRoomCache.addRoom(call.getFromUid(),call.getToUid(),call.getId()); - return call.getId()+""; + return call.getId(); } } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/processon/OpenLogic.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/processon/OpenLogic.java index e0022a76..50f8eef3 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/processon/OpenLogic.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/processon/OpenLogic.java @@ -11,12 +11,12 @@ import com.ruoyi.cai.ws.cache.*; import com.ruoyi.cai.ws.constant.HangUpEnums; import com.ruoyi.cai.ws.constant.RoomStatusEnums; import com.ruoyi.cai.ws.constant.UserDataConstant; +import com.ruoyi.cai.ws.dto.WsRMsgGen; import com.ruoyi.cai.ws.service.CheckConnectionDTO; import com.ruoyi.cai.ws.service.RoomService; +import com.ruoyi.cai.ws.util.MapGetUtil; +import com.ruoyi.cai.ws.util.RoomWebSocketUtil; import com.ruoyi.cai.ws.util.WsExceptionUtil; -import com.ruoyi.websocket.dto.WsRMsgGen; -import com.ruoyi.websocket.handler.IOpenLogic; -import com.ruoyi.websocket.util.RoomWebSocketUtil; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -27,7 +27,7 @@ import java.util.List; import java.util.Map; @Component -public class OpenLogic implements IOpenLogic { +public class OpenLogic { @Autowired private RoomService roomService; @Autowired @@ -47,17 +47,16 @@ public class OpenLogic implements IOpenLogic { @Autowired private Agora agora; - @Override public void processOn(WebSocketSession session) { Map map = session.getAttributes(); - String token = map.get("token").toString(); - String roomId = map.get("roomId").toString(); - Long userId = Long.valueOf(map.get("userId").toString()); + String token = MapGetUtil.getString(map.get("token")); + Long roomId = MapGetUtil.getLong(map.get("roomId")); + Long userId = MapGetUtil.getLong(map.get("userId")); // 校验token process(token,roomId,userId); } - public void process(String sessionKey,String roomId,Long userId){ + public void process(String sessionKey,Long roomId,Long userId){ Room room = roomService.load(roomId); if(room == null || (room.getCallUserData().getId().equals(userId) && room.getReceiverUserData().getId().equals(userId))){ WsExceptionUtil.throwException(sessionKey,"房间不可用", HangUpEnums.OTHER,roomId); @@ -117,7 +116,7 @@ public class OpenLogic implements IOpenLogic { return; } Long callTime = roomService.getCallTime(room); - RoomWebSocketUtil.sendSendMessage(sessionKey,WsRMsgGen.startVideo(room.getRoomId(), callTime)); + RoomWebSocketUtil.sendSendMessage(sessionKey, WsRMsgGen.startVideo(room.getRoomId(), callTime)); RoomWebSocketUtil.sendSendMessage(sessionKey,WsRMsgGen.sysNotice("重连成功,房间已通话(转换成时分秒) ")); String sessionKeyReceiver = roomCtxCache.getSessionKeyReceiverByRoomId(room.getRoomId()); if(StringUtils.isNotEmpty(sessionKeyReceiver)){ diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/service/RoomService.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/service/RoomService.java index 9698aa35..33c33000 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/service/RoomService.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/service/RoomService.java @@ -2,14 +2,19 @@ package com.ruoyi.cai.ws.service; import cn.hutool.core.date.DateUtil; import com.ruoyi.cai.domain.CaiAccount; +import com.ruoyi.cai.executor.ExecutorConstant; import com.ruoyi.cai.service.CaiAccountService; +import com.ruoyi.cai.service.CaiAnchorService; +import com.ruoyi.cai.service.CaiUserService; +import com.ruoyi.cai.trd.Agora; import com.ruoyi.cai.ws.bean.Room; import com.ruoyi.cai.ws.bean.RoomData; import com.ruoyi.cai.ws.bean.UserData; import com.ruoyi.cai.ws.cache.*; import com.ruoyi.cai.ws.constant.HangUpEnums; import com.ruoyi.cai.ws.constant.RoomStatusEnums; -import com.ruoyi.websocket.util.WebSocketUtils; +import com.ruoyi.cai.ws.util.MapGetUtil; +import com.ruoyi.cai.ws.util.WebSocketUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -33,8 +38,14 @@ public class RoomService { private FdCtxDataCache fdCtxDataCache; @Autowired private RoomCtxCache roomCtxCache; + @Autowired + private CaiUserService userService; + @Autowired + private CaiAnchorService anchorService; + @Autowired + private Agora agora; - public Room load(String roomId){ + public Room load(Long roomId){ Room room = new Room(); RoomData roomData = roomDataCache.getByRoomId(roomId); if(roomData == null){ @@ -57,7 +68,7 @@ public class RoomService { public void closeAllRoom(Long fromUid){ Map all = callerRoomCache.getAll(fromUid); for (Map.Entry entry : all.entrySet()) { - String roomId = String.valueOf(entry.getValue()); + Long roomId = MapGetUtil.getLong(entry.getValue()); Room room = load(roomId); if(room == null){ continue; @@ -74,7 +85,7 @@ public class RoomService { } } - public void closeAllFd(String roomId){ + public void closeAllFd(Long roomId){ List sessionKeysByRoomId = roomCtxCache.getSessionKeysByRoomId(roomId); for (String sessionKey : sessionKeysByRoomId) { WebSocketUtils.close(sessionKey); @@ -86,7 +97,7 @@ public class RoomService { public void delCallRoom(Long fromUid) { callerRoomCache.del(fromUid); } - private static Map STATUS_TO_HANG_UP = new HashMap<>(); + private static final Map STATUS_TO_HANG_UP = new HashMap<>(); static { STATUS_TO_HANG_UP.put(RoomStatusEnums.STATUS_CALLER_CANCEL.getCode(),new CheckConnectionDTO(HangUpEnums.CANCEL,"通话已取消")); STATUS_TO_HANG_UP.put(RoomStatusEnums.STATUS_CONNECT_CANCEL.getCode(),new CheckConnectionDTO(HangUpEnums.TIMEOUT,"通话未接听")); @@ -127,7 +138,7 @@ public class RoomService { return 0L; } RoomData roomData = room.getRoomData(); - int blockAmount = roomData.getPayCoin() + roomData.getPayIncome(); + long blockAmount = roomData.getPayCoin() + roomData.getPayIncome(); long totalAmount = account.getTotalCoin()+account.getIncomeCoin() + blockAmount; long totalSecond = (totalAmount / roomData.getCallPrice()) / 60; long useTime = 0; @@ -140,4 +151,40 @@ public class RoomService { return 0L; } } + + /** + * 释放房间资源 + */ + public void releaseRes(Long roomId) { + Room room = this.load(roomId); + if(room == null){ + return; + } + try { + UserData receiverUserData = room.getReceiverUserData(); + Long receiverId = receiverUserData.getId(); + Long callerId = room.getCallUserData().getId(); + // 呼叫方释放资源 + callerRoomCache.delRoom(receiverId,roomId); + userService.updateVideoStatus(callerId,0); + // 接收方释放资源(已连接的情况下) + if(receiverUserData.getConnectTime() != null && receiverUserData.getConnectTime() > 0){ + userService.updateVideoStatus(receiverId,0); + anchorService.updateVideoStatus(receiverId,0); + } + // 声网踢人 + if(room.getRoomData().getBeginTime() != null && room.getRoomData().getBeginTime() > 0){ + ExecutorConstant.ROOM_EXECUTOR.execute(() -> { + agora.closeChannel(roomId); + }); + } + // 修改释放状态 + Map map = new HashMap<>(); + map.put("releaseRes",1); + roomDataCache.hMSet(roomId,map); + }catch (Exception e){ + log.error("释放房间资源失败!房间号:{}",roomId,e); + } + + } } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/service/SettleService.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/service/SettleService.java new file mode 100644 index 00000000..ad56454c --- /dev/null +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/service/SettleService.java @@ -0,0 +1,125 @@ +package com.ruoyi.cai.ws.service; + +import cn.hutool.core.date.DateUtil; +import com.ruoyi.cai.domain.CaiAccount; +import com.ruoyi.cai.service.CaiAccountService; +import com.ruoyi.cai.trd.ImDataRes; +import com.ruoyi.cai.trd.ImMsgGen; +import com.ruoyi.cai.trd.Yunxin; +import com.ruoyi.cai.ws.bean.Room; +import com.ruoyi.cai.ws.bean.RoomData; +import com.ruoyi.cai.ws.bean.UserData; +import com.ruoyi.cai.ws.cache.OnlineDataCache; +import com.ruoyi.cai.ws.cache.RoomDataCache; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + +@Component +@Slf4j +public class SettleService { + + @Autowired + private RoomService roomService; + @Autowired + private RoomDataCache roomDataCache; + @Autowired + private CaiAccountService accountService; + @Autowired + private OnlineDataCache onlineDataCache; + @Autowired + private Yunxin yunxin; + + public void processOn(Room room){ + try { + deal(room); + }finally { + + } + } + + private void deal(Room room){ + if(room.isCanCall() || room.isSettle()){ + return; + } + if(!room.isReleaseRes()){ + roomService.releaseRes(Long.valueOf(room.getRoomId())); + return; + } + // 结算 + if(!settle(room)){ + return; + } + // 移除在线房间状态 + onlineDataCache.remove(room.getRoomId()); + // 更新支付金额信息 + Map map = new HashMap<>(); + map.put("payCoin", ""); // 实际支付的金额 + map.put("payIncome", ""); + map.put("settleTime", DateUtil.currentSeconds()); + roomDataCache.hMSet(Long.valueOf(room.getRoomId()),map); + // 主叫方通话市场通知 + Long callTime = roomService.getCallTime(room); + Long receiverUserId = room.getReceiverUserData().getId(); + Long callUserId = room.getCallUserData().getId(); + if(callTime > 0){ + ImDataRes imDataRes = ImMsgGen.callNotice(4, receiverUserId, callUserId, callTime); + yunxin.sendTo(room.getCallUserData().getId(),imDataRes,room.getReceiverUserData().getId()); + } + // 收入通知 + if(room != null){ // TODO修改数据 + + } + // 邀请人收入通知 + // 排行榜通知 + } + + /** + * 结算 + */ + private boolean settle(Room room){ + Long roomId = room.getRoomId(); + // 未通话,无需结算 + if(room.getRoomData().getBeginTime() == null){ + roomDataCache.hMSet(roomId,"settleTime", DateUtil.currentSeconds()); + return false; + } + // 开始结算 + // 呼叫方扣费 + this.computeCallerPay(room); + // 结束结算 + return true; + } + + private void computeCallerPay(Room room) { + RoomData roomData = room.getRoomData(); + UserData callUserData = room.getCallUserData(); + Long callPrice = roomData.getCallPrice(); + Long callTime = roomService.getCallTime(room); + // 本次支付金额 + Long totalAmount = callPrice * (callTime / 60); + // 补差价 + Long diff = totalAmount - roomData.getPayCoin() + roomData.getPayIncome(); + + CaiAccount callAccount = accountService.getByUserId(callUserData.getId()); + Long userAmount = callAccount.getCoin() + callAccount.getIncomeCoin(); + if(diff > 0){ + // 账户上面有余额 + if(userAmount > 0){ + diff = (userAmount > diff) ? diff : userAmount; + log.info("roomid {} 已支付 {} 仍需要补差价:{}", roomData.getRoomId(),roomData.getPayCoin() + roomData.getPayIncome(),diff); + // TODO 对账户进行统一扣费 + + }else{ + log.info("房间需要补差价,但用户余额不足 roomid {} 已支付 {} 仍需要补差价:{}", roomData.getRoomId(),roomData.getPayCoin() + roomData.getPayIncome(),diff); + } + }else{ + // 退钱逻辑 + diff = Math.abs(diff); + // TODO 对账户进行统一退钱逻辑 + } + } +} diff --git a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/util/RoomWebSocketUtil.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/util/RoomWebSocketUtil.java similarity index 73% rename from ruoyi-websocket/src/main/java/com/ruoyi/websocket/util/RoomWebSocketUtil.java rename to ruoyi-cai/src/main/java/com/ruoyi/cai/ws/util/RoomWebSocketUtil.java index 088a9eaa..af7fd756 100644 --- a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/util/RoomWebSocketUtil.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/util/RoomWebSocketUtil.java @@ -1,12 +1,12 @@ -package com.ruoyi.websocket.util; +package com.ruoyi.cai.ws.util; import com.alibaba.fastjson2.JSON; -import com.ruoyi.websocket.dto.WsR; +import com.ruoyi.cai.ws.dto.WsR; import java.util.List; public class RoomWebSocketUtil { - public static void sendSendMessage(String sessionKey,WsR r){ + public static void sendSendMessage(String sessionKey, WsR r){ WebSocketUtils.sendMessage(sessionKey, JSON.toJSONString(r)); } diff --git a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/util/WebSocketUtils.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/util/WebSocketUtils.java similarity index 92% rename from ruoyi-websocket/src/main/java/com/ruoyi/websocket/util/WebSocketUtils.java rename to ruoyi-cai/src/main/java/com/ruoyi/cai/ws/util/WebSocketUtils.java index 73a74fe2..a3756279 100644 --- a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/util/WebSocketUtils.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/util/WebSocketUtils.java @@ -1,7 +1,6 @@ -package com.ruoyi.websocket.util; +package com.ruoyi.cai.ws.util; -import com.ruoyi.websocket.holder.WebSocketSessionHolder; -import jdk.nashorn.internal.runtime.regexp.JoniRegExp; +import com.ruoyi.cai.ws.holder.WebSocketSessionHolder; import lombok.AccessLevel; import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/util/WsExceptionUtil.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/util/WsExceptionUtil.java index f292e6e0..687ba03c 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/util/WsExceptionUtil.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/ws/util/WsExceptionUtil.java @@ -1,15 +1,12 @@ package com.ruoyi.cai.ws.util; -import com.esotericsoftware.minlog.Log; import com.ruoyi.cai.ws.constant.HangUpEnums; -import com.ruoyi.websocket.dto.WsRMsgGen; -import com.ruoyi.websocket.util.RoomWebSocketUtil; -import com.ruoyi.websocket.util.WebSocketUtils; +import com.ruoyi.cai.ws.dto.WsRMsgGen; import lombok.extern.slf4j.Slf4j; @Slf4j public class WsExceptionUtil { - public static void throwException(String sessionKey, String message, HangUpEnums hangUpType, String roomId){ + public static void throwException(String sessionKey, String message, HangUpEnums hangUpType, Long roomId){ if(hangUpType == null){ hangUpType = HangUpEnums.OTHER; } diff --git a/ruoyi-websocket/pom.xml b/ruoyi-websocket/pom.xml deleted file mode 100644 index 129d43bb..00000000 --- a/ruoyi-websocket/pom.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - 4.0.0 - - com.ruoyi - ruoyi-vue-plus - 4.8.2 - - - ruoyi-websocket - - - 8 - 8 - UTF-8 - - - - - com.ruoyi - ruoyi-common - - - com.ruoyi - ruoyi-cai - 4.8.2 - - - org.springframework.boot - spring-boot-starter-websocket - - - com.alibaba - fastjson - 2.0.32 - - - - diff --git a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/handler/IOpenLogic.java b/ruoyi-websocket/src/main/java/com/ruoyi/websocket/handler/IOpenLogic.java deleted file mode 100644 index d9219973..00000000 --- a/ruoyi-websocket/src/main/java/com/ruoyi/websocket/handler/IOpenLogic.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.ruoyi.websocket.handler; - -import org.springframework.web.socket.WebSocketSession; - -public interface IOpenLogic { - - void processOn(WebSocketSession session); - -}