KKSU
2024-06-27 cd59cd93b4eceee7b5f948a19d4e78371348fcd0
后台
4 files modified
2 files added
112 ■■■■ changed files
src/main/java/cc/mrbird/febs/mall/quartz/RedisLinkHoldJob.java 25 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/GameServiceImpl.java 66 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/ApiGamePlayerVo.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/websocket/HttpAuthHandler.java 7 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/websocket/WebSocketRes.java 9 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/websocket/WsAuthInterceptor.java 2 ●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/quartz/RedisLinkHoldJob.java
New file
@@ -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);
    }
}
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();
    }
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-结束
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
src/main/java/cc/mrbird/febs/websocket/WebSocketRes.java
New file
@@ -0,0 +1,9 @@
package cc.mrbird.febs.websocket;
import lombok.Data;
@Data
public class WebSocketRes {
    private Integer code;
    private String msg;
}
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;