From cd59cd93b4eceee7b5f948a19d4e78371348fcd0 Mon Sep 17 00:00:00 2001 From: KKSU <15274802129@163.com> Date: Thu, 27 Jun 2024 10:29:27 +0800 Subject: [PATCH] 后台 --- src/main/java/cc/mrbird/febs/mall/vo/ApiGamePlayerVo.java | 3 + src/main/java/cc/mrbird/febs/mall/service/impl/GameServiceImpl.java | 66 ++++++++++++++++++++++++++++----- src/main/java/cc/mrbird/febs/websocket/HttpAuthHandler.java | 7 +++ src/main/java/cc/mrbird/febs/mall/quartz/RedisLinkHoldJob.java | 25 ++++++++++++ src/main/java/cc/mrbird/febs/websocket/WebSocketRes.java | 9 ++++ src/main/java/cc/mrbird/febs/websocket/WsAuthInterceptor.java | 2 6 files changed, 100 insertions(+), 12 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/mall/quartz/RedisLinkHoldJob.java b/src/main/java/cc/mrbird/febs/mall/quartz/RedisLinkHoldJob.java new file mode 100644 index 0000000..9d13ed5 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/quartz/RedisLinkHoldJob.java @@ -0,0 +1,25 @@ +package cc.mrbird.febs.mall.quartz; + +import cc.mrbird.febs.common.utils.RedisUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +/** + * @author wzy + * @date 2022-06-07 + **/ +@Slf4j +@Component +public class RedisLinkHoldJob { + + @Autowired + private RedisUtils redisUtils; + + + @Scheduled(cron = "0/5 * * * * ?") + public void redisLinkHold() { + redisUtils.set("redis_link_hold", 1); + } +} diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/GameServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/GameServiceImpl.java index 6218867..ad6c898 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/GameServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/GameServiceImpl.java @@ -3,10 +3,7 @@ import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.enumerates.*; import cc.mrbird.febs.common.exception.FebsException; -import cc.mrbird.febs.common.utils.AppContants; -import cc.mrbird.febs.common.utils.LoginUserUtil; -import cc.mrbird.febs.common.utils.MallUtils; -import cc.mrbird.febs.common.utils.ShareCodeUtil; +import cc.mrbird.febs.common.utils.*; import cc.mrbird.febs.mall.dto.*; import cc.mrbird.febs.mall.entity.*; import cc.mrbird.febs.mall.mapper.*; @@ -14,10 +11,12 @@ import cc.mrbird.febs.mall.service.IApiMallMemberWalletService; import cc.mrbird.febs.mall.service.IMallMoneyFlowService; import cc.mrbird.febs.mall.vo.*; +import cc.mrbird.febs.websocket.WebSocketRes; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; @@ -100,6 +99,14 @@ Integer partner = ObjectUtil.isEmpty(mallMember.getPartner()) ? 2 : mallMember.getPartner(); if(AppContants.MEMBER_PARTNER_NO == partner){ throw new FebsException("用户没有创建房间的权限!"); + } + + QueryWrapper<GameRoom> gameRoomQuery = new QueryWrapper<>(); + gameRoomQuery.eq("owner_member_id",memberId); + gameRoomQuery.ne("state",GameRoom.STATE_DONE); + List<GameRoom> gameRoomsExists = gameRoomMapper.selectList(gameRoomQuery); + if(CollUtil.isNotEmpty(gameRoomsExists)){ + throw new FebsException("房间已创建!房间码为:"+gameRoomsExists.get(0).getPassword()); } Integer roomType = apiCreateRoomDto.getRoomType(); @@ -192,7 +199,10 @@ /** * 给房间里面的所有人发送一个开始的信息 */ - this.sendMsgByRoomId(roomId,"START:"+gameGame.getId()); + WebSocketRes webSocketRes = new WebSocketRes(); + webSocketRes.setCode(200); + webSocketRes.setMsg(gameGame.getId().toString()); + this.sendMsgByRoomId(roomId, JSONUtil.parse(webSocketRes).toString()); ApiStartGameVo apiStartGameVo = new ApiStartGameVo(); apiStartGameVo.setRoomType(gameRoom.getRoomType()); @@ -364,7 +374,13 @@ /** * 给房间里面的所有人发送一个开始的信息 */ - this.sendMsgByRoomId(roomId,"TZ:"+gameGame.getId()); + + + WebSocketRes webSocketRes = new WebSocketRes(); + webSocketRes.setCode(200); + webSocketRes.setMsg(gameId.toString()); + this.sendMsgByRoomId(roomId, JSONUtil.parse(webSocketRes).toString()); +// this.sendMsgByRoomId(roomId,"TZ:"+gameGame.getId()); return new FebsResponse().success().message("操作成功"); } @@ -391,6 +407,24 @@ if(GameRoom.STATE_DONE == gameRoom.getState()){ throw new FebsException("房间已失效"); } + + QueryWrapper<GameRoomChild> roomChildQueryWrapper = new QueryWrapper<>(); + roomChildQueryWrapper.eq("member_id",memberId); + List<GameRoomChild> roomChildExists = gameRoomChildMapper.selectList(roomChildQueryWrapper); + if(CollUtil.isNotEmpty(roomChildExists)){ + List<Long> roomIds = roomChildExists.stream().map(GameRoomChild::getRoomId).collect(Collectors.toList()); + + QueryWrapper<GameRoom> roomQuery = new QueryWrapper<>(); + roomQuery.in("id",roomIds); + List<GameRoom> gameRooms = gameRoomMapper.selectList(roomQuery); + List<GameRoom> collect = gameRooms.stream().filter(room -> room.getState() != GameRoom.STATE_DONE).collect(Collectors.toList()); + if(CollUtil.isNotEmpty(collect)){ + if(collect.size() > 1){ + throw new FebsException("请回到房间,房间码:"+collect.get(0).getPassword()); + } + } + } + ApiGamePlayerVo apiGamePlayerVo = new ApiGamePlayerVo(); @@ -440,6 +474,10 @@ apiGamePlayerVo.setPassword(gameRoom.getPassword()); apiGamePlayerVo.setState(gameRoom.getState()); apiGamePlayerVo.setGameTime(gameRoom.getGameTime()); + + Long ownerMemberId = gameRoom.getOwnerMemberId(); + MallMember mallMember = mallMemberMapper.selectById(ownerMemberId); + apiGamePlayerVo.setRoomOwner(mallMember.getAccountLogin()); QueryWrapper<GameGame> gameGameQueryWrapper = new QueryWrapper<>(); gameGameQueryWrapper.eq("room_id",gameRoom.getId()); @@ -517,7 +555,11 @@ //结算 todo 改成rabbitMq消息推送,注意游戏主表的状态变化 this.perkGameGameChild(gameId,firstNum,secondNum); - this.sendMsgByRoomId(roomId,"DONE:"+gameId); + WebSocketRes webSocketRes = new WebSocketRes(); + webSocketRes.setCode(200); + webSocketRes.setMsg(gameId.toString()); + this.sendMsgByRoomId(roomId, JSONUtil.parse(webSocketRes).toString()); +// this.sendMsgByRoomId(roomId,"DONE:"+gameId); ApiEndGameVo apiEndGameVo = new ApiEndGameVo(); apiEndGameVo.setRoomId(roomId); @@ -725,7 +767,7 @@ Long memberId = LoginUserUtil.getLoginUser().getId(); Long roomId = apiExistGameDto.getRoomId(); /** - * 删除房间子表的数据 + * 更新房间子表的数据 */ MallMember mallMember = mallMemberMapper.selectById(memberId); QueryWrapper<GameRoomChild> gameRoomChildQueryWrapper = new QueryWrapper<>(); @@ -743,11 +785,15 @@ gameRoom.setState(GameRoom.STATE_DONE); gameRoomMapper.updateById(gameRoom); - this.sendMsgByRoomId(roomId,"OVER"); + WebSocketRes webSocketRes = new WebSocketRes(); + webSocketRes.setCode(200); + webSocketRes.setMsg("OVER"); + this.sendMsgByRoomId(roomId, JSONUtil.parse(webSocketRes).toString()); +// this.sendMsgByRoomId(roomId,"OVER"); } } //断开websocket - WsSessionManager.remove(mallMember.getInviteId()); + WsSessionManager.removeAndClose(mallMember.getInviteId()); return new FebsResponse().success(); } diff --git a/src/main/java/cc/mrbird/febs/mall/vo/ApiGamePlayerVo.java b/src/main/java/cc/mrbird/febs/mall/vo/ApiGamePlayerVo.java index 7faa634..ad91a82 100644 --- a/src/main/java/cc/mrbird/febs/mall/vo/ApiGamePlayerVo.java +++ b/src/main/java/cc/mrbird/febs/mall/vo/ApiGamePlayerVo.java @@ -35,6 +35,9 @@ @ApiModelProperty(value = "房间类型 1-初级房2-土豪房3-尊爵房") private Integer roomType;//房间类型 1-初级房2-土豪房3-尊爵房 + @ApiModelProperty(value = "房主昵称") + private String roomOwner;//房间类型 1-初级房2-土豪房3-尊爵房 + @ApiModelProperty(value = "房间状态0-未开始1-正常2-结束") private Integer state;//房间状态0-未开始1-正常2-结束 diff --git a/src/main/java/cc/mrbird/febs/websocket/HttpAuthHandler.java b/src/main/java/cc/mrbird/febs/websocket/HttpAuthHandler.java index f4b6696..240eae1 100644 --- a/src/main/java/cc/mrbird/febs/websocket/HttpAuthHandler.java +++ b/src/main/java/cc/mrbird/febs/websocket/HttpAuthHandler.java @@ -1,5 +1,6 @@ package cc.mrbird.febs.websocket; +import cn.hutool.json.JSONUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import org.springframework.web.socket.CloseStatus; @@ -32,7 +33,11 @@ @Override protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { log.info("收到消息--{}", message.getPayload()); - session.sendMessage(message); + WebSocketRes webSocketRes = new WebSocketRes(); + webSocketRes.setCode(200); + webSocketRes.setMsg("PONG"); + TextMessage textMessage = new TextMessage(JSONUtil.parse(webSocketRes).toString()); + session.sendMessage(textMessage); } @Override diff --git a/src/main/java/cc/mrbird/febs/websocket/WebSocketRes.java b/src/main/java/cc/mrbird/febs/websocket/WebSocketRes.java new file mode 100644 index 0000000..519d619 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/websocket/WebSocketRes.java @@ -0,0 +1,9 @@ +package cc.mrbird.febs.websocket; + +import lombok.Data; + +@Data +public class WebSocketRes { + private Integer code; + private String msg; +} diff --git a/src/main/java/cc/mrbird/febs/websocket/WsAuthInterceptor.java b/src/main/java/cc/mrbird/febs/websocket/WsAuthInterceptor.java index 131b79a..f62a686 100644 --- a/src/main/java/cc/mrbird/febs/websocket/WsAuthInterceptor.java +++ b/src/main/java/cc/mrbird/febs/websocket/WsAuthInterceptor.java @@ -26,7 +26,7 @@ public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler webSocketHandler, Map<String, Object> map) throws Exception { // log.info("拦截器,握手前"); Map<String, String> params = parseParameterMap(request.getURI().getQuery()); - + //invite_id_时间戳 例如:45656161_4554848489的加密 String token = params.get("token"); if (StrUtil.isNotBlank(token)) { String inviteId = token; -- Gitblit v1.9.1