|
@@ -7,10 +7,8 @@ import com.zanxiang.game.module.manage.constant.RedisKeyConstant;
|
|
|
import com.zanxiang.game.module.manage.enums.KfRoomMsgOwnerEnum;
|
|
|
import com.zanxiang.game.module.manage.enums.KfRoomMsgTypeEnum;
|
|
|
import com.zanxiang.game.module.manage.enums.KfWebSocketMsgEnum;
|
|
|
-import com.zanxiang.game.module.manage.pojo.dto.GameAppletDTO;
|
|
|
import com.zanxiang.game.module.manage.pojo.dto.KfWebSocketMsgDTO;
|
|
|
import com.zanxiang.game.module.manage.pojo.params.KfWebSocketMsgParam;
|
|
|
-import com.zanxiang.game.module.manage.service.IGameAppletService;
|
|
|
import com.zanxiang.game.module.manage.service.IKfRoomMsgService;
|
|
|
import com.zanxiang.game.module.manage.service.IKfRoomService;
|
|
|
import com.zanxiang.game.module.manage.service.IKfSessionUserService;
|
|
@@ -20,6 +18,7 @@ import com.zanxiang.game.module.mybatis.entity.KfRoomMsg;
|
|
|
import com.zanxiang.game.module.mybatis.entity.KfSessionUser;
|
|
|
import com.zanxiang.module.redis.service.IDistributedLockComponent;
|
|
|
import com.zanxiang.module.util.JsonUtil;
|
|
|
+import com.zanxiang.module.util.bean.BeanUtil;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.logging.log4j.util.Strings;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
@@ -30,10 +29,7 @@ import reactor.util.function.Tuple2;
|
|
|
|
|
|
import java.io.IOException;
|
|
|
import java.time.LocalDateTime;
|
|
|
-import java.util.HashMap;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
-import java.util.Objects;
|
|
|
+import java.util.*;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
|
|
@@ -49,9 +45,6 @@ public class KfMsgWebsocketHandler implements WebSocketHandler {
|
|
|
@Autowired
|
|
|
private KfMsgWebSocketSessionRegistry kfMsgWebSocketSessionRegistry;
|
|
|
|
|
|
- @Autowired
|
|
|
- private IGameAppletService gameAppletService;
|
|
|
-
|
|
|
@Autowired
|
|
|
private IKfRoomService kfRoomService;
|
|
|
|
|
@@ -98,42 +91,40 @@ public class KfMsgWebsocketHandler implements WebSocketHandler {
|
|
|
|
|
|
switch (webSocketMsgType) {
|
|
|
case WEBSOCKET_MSG_CONNECT_HEART_BEAT:
|
|
|
- log.error("收到客户端心跳消息, param : {}", JsonUtil.toString(param));
|
|
|
+ log.error("收到客户端心跳消息, kfUserId : {}, param : {}", SecurityUtil.getUserId(), JsonUtil.toString(param));
|
|
|
break;
|
|
|
case WEBSOCKET_MSG_KF_HAND_SHAKE:
|
|
|
- log.error("首次握手, kfUserId : {}", SecurityUtil.getUserId());
|
|
|
+ log.error("首次握手, kfUserId : {}, param : {}", SecurityUtil.getUserId(), JsonUtil.toString(param));
|
|
|
kfHandShake(session, webSocketMsgType);
|
|
|
break;
|
|
|
case WEBSOCKET_MSG_KF_CREATE_CONNECT:
|
|
|
- log.error("创建连接, kfUserId : {}, gameId : {}", SecurityUtil.getUserId(), gameId);
|
|
|
+ log.error("创建连接, kfUserId : {}, param : {}", SecurityUtil.getUserId(), JsonUtil.toString(param));
|
|
|
kfCreateConnect(session, webSocketMsgType, gameId);
|
|
|
break;
|
|
|
case WEBSOCKET_MSG_USER_CONNECT_JOIN:
|
|
|
- log.error("玩家接入, kfUserId : {}, gameId : {}", SecurityUtil.getUserId(), gameId);
|
|
|
+ log.error("玩家接入, kfUserId : {}, param : {}", SecurityUtil.getUserId(), JsonUtil.toString(param));
|
|
|
userConnectJoin(session, param);
|
|
|
break;
|
|
|
case WEBSOCKET_MSG_ROOM_HISTORY:
|
|
|
- log.error("获取房间历史消息, kfUserId : {}, gameId : {}, roomId : {}",
|
|
|
- SecurityUtil.getUserId(), gameId, param.getRoomId());
|
|
|
+ log.error("获取房间历史消息, kfUserId : {}, param : {}", SecurityUtil.getUserId(), JsonUtil.toString(param));
|
|
|
msgRoomHistory(session, param);
|
|
|
break;
|
|
|
case WEBSOCKET_MSG_KF_SEND:
|
|
|
-
|
|
|
+ log.error("客服发送消息, kfUserId : {}, param : {}", SecurityUtil.getUserId(), JsonUtil.toString(param));
|
|
|
+ fkSendMsg(session, param);
|
|
|
break;
|
|
|
case WEBSOCKET_MSG_FINISH_ROOM_LIST:
|
|
|
- log.error("获取已结束房间列表, kfUserId : {}, gameId : {}", SecurityUtil.getUserId(), gameId);
|
|
|
+ log.error("获取已结束房间列表, kfUserId : {}, param : {}", SecurityUtil.getUserId(), JsonUtil.toString(param));
|
|
|
finishRoomList(session, param);
|
|
|
break;
|
|
|
case WEBSOCKET_MSG_FINISH_SESSION:
|
|
|
- log.error("结束会话, kfUserId : {}, gameId : {}, roomId : {}",
|
|
|
- SecurityUtil.getUserId(), gameId, param.getRoomId());
|
|
|
+ log.error("结束会话, kfUserId : {}, param : {}", SecurityUtil.getUserId(), JsonUtil.toString(param));
|
|
|
kfFinishSession(session, webSocketMsgType, gameId, param.getRoomId());
|
|
|
break;
|
|
|
case WEBSOCKET_MSG_QUICK_REPLY:
|
|
|
|
|
|
break;
|
|
|
default:
|
|
|
-
|
|
|
this.sendMessage(session, KfWebSocketMsgDTO.fail(webSocketMsgType, "参数错误, 未知的消息类型"));
|
|
|
}
|
|
|
}
|
|
@@ -169,15 +160,21 @@ public class KfMsgWebsocketHandler implements WebSocketHandler {
|
|
|
}
|
|
|
|
|
|
private void fkSendMsg(WebSocketSession session, KfWebSocketMsgParam param) {
|
|
|
-
|
|
|
- GameAppletDTO gameAppletDTO = gameAppletService.getByGameId(param.getGameId());
|
|
|
- if (gameAppletDTO == null) {
|
|
|
- this.sendMessage(session, KfWebSocketMsgDTO.fail(param.getWebSocketMsgType(),
|
|
|
- "参数错误, 小程序信息不存在, param : " + JsonUtil.toString(param)));
|
|
|
+ if (param.getRoomId() == null) {
|
|
|
+ this.sendMessage(session, KfWebSocketMsgDTO.fail(param.getWebSocketMsgType(), "参数错误,roomId为空"));
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ KfRoom kfRoom = kfRoomService.getById(param.getRoomId());
|
|
|
+ if (kfRoom == null) {
|
|
|
+ this.sendMessage(session, KfWebSocketMsgDTO.fail(param.getWebSocketMsgType(), "参数错误,房间信息不存在"));
|
|
|
return;
|
|
|
}
|
|
|
-
|
|
|
KfWebSocketMsgParam.MsgContentBean msgContent = param.getMsgContent();
|
|
|
+ if (msgContent == null) {
|
|
|
+ this.sendMessage(session, KfWebSocketMsgDTO.fail(param.getWebSocketMsgType(), "参数错误,消息内容不可为空"));
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
Map<String, Object> msgParamMap = new HashMap<>(3);
|
|
|
msgParamMap.put("touser", param.getOpenId());
|
|
|
|
|
@@ -189,18 +186,45 @@ public class KfMsgWebsocketHandler implements WebSocketHandler {
|
|
|
}
|
|
|
|
|
|
if (Objects.equals(msgContent.getMsgType(), KfRoomMsgTypeEnum.KF_MSG_TYPE_IMAGE)) {
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+ Map<String, Object> imageMap = new HashMap<>(1);
|
|
|
+
|
|
|
+ imageMap.put("media_id", "media_id");
|
|
|
|
|
|
+ msgParamMap.put("msgtype", KfRoomMsgTypeEnum.KF_MSG_TYPE_IMAGE.getValue());
|
|
|
+ msgParamMap.put(KfRoomMsgTypeEnum.KF_MSG_TYPE_IMAGE.getValue(), imageMap);
|
|
|
this.sendMessage(session, KfWebSocketMsgDTO.fail(param.getWebSocketMsgType(),
|
|
|
- "发图片的逻辑还没写完, 先发文本, param : " + JsonUtil.toString(param)));
|
|
|
+ "发图片上传素材的逻辑还没写完, 先发文本, param : " + JsonUtil.toString(param)));
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ Tuple2<Long, String> tuple2 = wxApiService.sendCustomMessageApi(param.getGameId(), msgParamMap);
|
|
|
+ Long result = tuple2.getT1();
|
|
|
+
|
|
|
+ if (result != 0) {
|
|
|
+ this.sendMessage(session, KfWebSocketMsgDTO.fail(param.getWebSocketMsgType(), tuple2.getT2()));
|
|
|
return;
|
|
|
}
|
|
|
- wxApiService.sendCustomMessageApi(gameAppletDTO, msgParamMap);
|
|
|
-
|
|
|
|
|
|
+ kfRoomMsgService.save(this.transform(param.getGameId(), kfRoom, msgContent));
|
|
|
+ this.sendMessage(session, KfWebSocketMsgDTO.ok(param.getWebSocketMsgType()));
|
|
|
+ }
|
|
|
+
|
|
|
+ private KfRoomMsg transform(Long gameId, KfRoom kfRoom, KfWebSocketMsgParam.MsgContentBean msgContent) {
|
|
|
+ return KfRoomMsg.builder()
|
|
|
+ .msgId(UUID.randomUUID().toString().replace("-", ""))
|
|
|
+ .msgType(msgContent.getMsgType().getValue())
|
|
|
+ .gameId(gameId)
|
|
|
+ .openId(kfRoom.getOpenId())
|
|
|
+ .userId(kfRoom.getUserId())
|
|
|
+ .kfUserId(kfRoom.getKfUserId())
|
|
|
+ .readStatus(Boolean.TRUE)
|
|
|
+ .roomId(kfRoom.getId())
|
|
|
+ .msgOwner(KfRoomMsgOwnerEnum.KF_MSG_OWNER_KF.getValue())
|
|
|
+ .content(JsonUtil.toString(BeanUtil.copy(msgContent, KfWebSocketMsgDTO.MsgContentBean.class)))
|
|
|
+ .source(JsonUtil.toString(msgContent))
|
|
|
+ .createTime(LocalDateTime.now())
|
|
|
+ .updateTime(LocalDateTime.now())
|
|
|
+ .build();
|
|
|
}
|
|
|
|
|
|
private void kfFinishSession(WebSocketSession session, KfWebSocketMsgEnum webSocketMsgType, Long gameId, Long roomId) {
|
|
@@ -274,11 +298,15 @@ public class KfMsgWebsocketHandler implements WebSocketHandler {
|
|
|
.set(KfSessionUser::getUpdateTime, LocalDateTime.now())
|
|
|
.eq(KfSessionUser::getOpenId, param.getOpenId())
|
|
|
);
|
|
|
+
|
|
|
+ KfSessionUser kfSessionUser = kfSessionUserService.getById(param.getOpenId());
|
|
|
|
|
|
Long roomId = kfRoomService.userJoinRoom(param.getOpenId(), param.getGameId());
|
|
|
|
|
|
kfRoomMsgService.update(new LambdaUpdateWrapper<KfRoomMsg>()
|
|
|
.set(KfRoomMsg::getRoomId, roomId)
|
|
|
+ .set(KfRoomMsg::getUserId, kfSessionUser == null ? null : kfSessionUser.getUserId())
|
|
|
+ .set(KfRoomMsg::getKfUserId, SecurityUtil.getUserId())
|
|
|
.set(KfRoomMsg::getUpdateTime, LocalDateTime.now())
|
|
|
.eq(KfRoomMsg::getOpenId, param.getOpenId())
|
|
|
.eq(KfRoomMsg::getGameId, param.getGameId())
|