作者 crossoverJie

:sparkles: Introducing new features.私聊ok 判断账号是否存在

... ... @@ -43,7 +43,7 @@ public class MsgHandler implements MsgHandle {
@Override
public void sendMsg(String msg) {
String[] totalMsg = msg.split("><");
String[] totalMsg = msg.split("^^");
if (totalMsg.length > 1) {
//私聊
P2PReqVO p2PReqVO = new P2PReqVO();
... ...
... ... @@ -10,6 +10,7 @@ import com.crossoverjie.cim.client.vo.req.P2PReqVO;
import com.crossoverjie.cim.client.vo.res.CIMServerResVO;
import com.crossoverjie.cim.client.vo.res.OnlineUsersResVO;
import com.crossoverjie.cim.common.enums.StatusEnum;
import com.crossoverjie.cim.common.res.BaseResponse;
import okhttp3.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
... ... @@ -90,6 +91,15 @@ public class RouteRequestImpl implements RouteRequest {
if (!response.isSuccessful()){
throw new IOException("Unexpected code " + response);
}
String json = response.body().toString() ;
BaseResponse baseResponse = JSON.parseObject(json, BaseResponse.class);
//选择的账号不存在
if (baseResponse.getCode().equals(StatusEnum.OFF_LINE.getCode())){
LOGGER.error(p2PReqVO.getReceiveUserId() + ":" + StatusEnum.OFF_LINE.getMessage());
System.exit(-1);
}
}
@Override
... ...
... ... @@ -17,6 +17,9 @@ public enum StatusEnum {
/** 重复登录 */
REPEAT_LOGIN("5000", "账号重复登录,请退出一个账号!"),
/** 账号不在线 */
OFF_LINE("7000", "你选择的账号不在线,请重新选择!"),
/** 请求限流 */
REQUEST_LIMIT("6000", "请求限流"),
;
... ...
package com.crossoverjie.cim.route.controller;
import com.crossoverjie.cim.common.enums.StatusEnum;
import com.crossoverjie.cim.common.exception.CIMException;
import com.crossoverjie.cim.common.pojo.CIMUserInfo;
import com.crossoverjie.cim.common.res.BaseResponse;
import com.crossoverjie.cim.common.res.NULLBody;
... ... @@ -94,6 +95,7 @@ public class RouteController {
public BaseResponse<NULLBody> p2pRoute(@RequestBody P2PReqVO p2pRequest) throws Exception {
BaseResponse<NULLBody> res = new BaseResponse();
try {
//获取接收消息用户的路由信息
CIMServerResVO cimServerResVO = accountService.loadRouteRelatedByUserId(p2pRequest.getReceiveUserId());
//推送消息
... ... @@ -103,9 +105,13 @@ public class RouteController {
ChatReqVO chatVO = new ChatReqVO(p2pRequest.getReceiveUserId(),p2pRequest.getMsg()) ;
accountService.pushMsg(url,p2pRequest.getUserId(),chatVO);
res.setCode(StatusEnum.SUCCESS.getCode());
res.setMessage(StatusEnum.SUCCESS.getMessage());
}catch (CIMException e){
res.setCode(e.getErrorCode());
res.setMessage(e.getErrorMessage());
}
return res;
}
... ...
package com.crossoverjie.cim.route.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.crossoverjie.cim.common.exception.CIMException;
import com.crossoverjie.cim.common.pojo.CIMUserInfo;
import com.crossoverjie.cim.route.service.AccountService;
import com.crossoverjie.cim.route.service.UserInfoCacheService;
... ... @@ -23,6 +24,7 @@ import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import static com.crossoverjie.cim.common.enums.StatusEnum.OFF_LINE;
import static com.crossoverjie.cim.route.constant.Constant.ACCOUNT_PREFIX;
import static com.crossoverjie.cim.route.constant.Constant.ROUTE_PREFIX;
... ... @@ -120,6 +122,11 @@ public class AccountServiceRedisImpl implements AccountService {
@Override
public CIMServerResVO loadRouteRelatedByUserId(Long userId) {
String value = redisTemplate.opsForValue().get(ROUTE_PREFIX + userId);
if (value == null){
throw new CIMException(OFF_LINE) ;
}
String[] server = value.split(":");
CIMServerResVO cimServerResVO = new CIMServerResVO(server[0], Integer.parseInt(server[1]), Integer.parseInt(server[2]));
return cimServerResVO;
... ...