Commit 1c48aa4f by lixiaozhong

策略模块的代码规范

parent c22b869b
......@@ -82,26 +82,27 @@ public class NettyApiRequest {
private void initWs(ChannelHandlerContext ctx, FullHttpRequest httpRequest) throws Exception {
Map<String, String> paramMap = FullHttpRequestUtils.parameterParse(httpRequest);
String token = paramMap.get(WsConstants.TOKEN);
DecodedJWT jwtInfo = JwtUtil.getJwtInfo(token);
String payload = jwtInfo.getPayload();
Base64.Decoder decoder = Base64.getDecoder();
payload = new String(decoder.decode(payload), StandardCharsets.UTF_8);
JSONObject jsonObject = JSONObject.parseObject(payload);
String appKey = (String) jsonObject.get("appKey");
String clientId = (String) jsonObject.get(CommonConstant.CLIENT_ID);
if (StringUtils.isBlank(token)) {
String context = new JsonMapper().writeValueAsString(ApiResult.result(ApiCode.FAIL, "token不能为空", (Object) null));
FullHttpRequestUtils.send(ctx, context, HttpResponseStatus.OK);
return;
}
if (JwtUtil.isExpired(token)) {
String context = new JsonMapper().writeValueAsString(ApiResult.result(ApiCode.FAIL, "JWT Token已过期,token", (Object) null));
FullHttpRequestUtils.send(ctx, context, HttpResponseStatus.OK);
return;
}
DecodedJWT jwtInfo = JwtUtil.getJwtInfo(token);
String payload = jwtInfo.getPayload();
Base64.Decoder decoder = Base64.getDecoder();
payload = new String(decoder.decode(payload), StandardCharsets.UTF_8);
JSONObject jsonObject = JSONObject.parseObject(payload);
String appKey = (String) jsonObject.get(CommonConstant.APP_KEY);
String clientId = (String) jsonObject.get(CommonConstant.CLIENT_ID);
// 从redis获取jwt的token 验签token
JwtToken jwtToken = shiroLoginService.getJwtTokenForRedis(token);
......@@ -113,9 +114,9 @@ public class NettyApiRequest {
}
if ((!jwtToken.getClientId().equals(clientId)) || (!jwtToken.getAppKey().equals(appKey))) {
log.info("clientId appKey 不一致");
String context = new JsonMapper().writeValueAsString(ApiResult.result(ApiCode.FAIL, "clientId appKey 不一致", (Object) null));
FullHttpRequestUtils.send(ctx, context, HttpResponseStatus.OK);
log.info("clientId appKey 不一致");
return;
}
......
......@@ -17,7 +17,7 @@ import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)//RUNTIME运行时保留
@Target(ElementType.TYPE) //type描述类、接口
@Documented
public @interface CmdTypeAnnotation {
public @interface ImCmdType {
WsRequestCmdEnum type();
}
......@@ -4,8 +4,8 @@ import com.fasterxml.jackson.databind.json.JsonMapper;
import com.wecloud.im.ws.enums.WsRequestCmdEnum;
import com.wecloud.im.ws.model.request.ReceiveModel;
import com.wecloud.im.ws.service.WriteDataService;
import com.wecloud.im.ws.strategy.AbstractImCmd;
import com.wecloud.im.ws.strategy.ImCmdContext;
import com.wecloud.im.ws.strategy.AbstractImCmdStrategy;
import com.wecloud.im.ws.strategy.ImCmdStrategyFactory;
import io.geekidea.springbootplus.framework.common.exception.BusinessException;
import io.netty.channel.ChannelHandlerContext;
import org.slf4j.Logger;
......@@ -24,7 +24,7 @@ public class ReadWsData {
private static final Logger log = LoggerFactory.getLogger(ReadWsData.class);
@Resource
private ImCmdContext receiveStrategyContext;
private ImCmdStrategyFactory receiveStrategyContext;
@Resource
private WriteDataService writeDataService;
......@@ -51,7 +51,7 @@ public class ReadWsData {
WsRequestCmdEnum wsRequestUriPathEnum = WsRequestCmdEnum.getByCode(receiveModel.getCmd());
// 使用策略模式, 根据不同类型请求调用不同实现类
AbstractImCmd cmdStrategy = receiveStrategyContext.getStrategy(wsRequestUriPathEnum);
AbstractImCmdStrategy cmdStrategy = receiveStrategyContext.getStrategy(wsRequestUriPathEnum);
cmdStrategy.process(receiveModel, ctx, data, appKey, clientId);
}
......
......@@ -11,7 +11,7 @@ import io.netty.channel.ChannelHandlerContext;
* @Author hewei hwei1233@163.com
* @Date 2020-01-02
*/
public abstract class AbstractImCmd {
public abstract class AbstractImCmdStrategy {
/**
* 处理业务流程
......@@ -19,5 +19,5 @@ public abstract class AbstractImCmd {
* @param requestModel
* @throws Exception
*/
abstract public void process(ReceiveModel requestModel, ChannelHandlerContext ctx, String data, String appKey, String clientId) throws JsonProcessingException;
public abstract void process(ReceiveModel requestModel, ChannelHandlerContext ctx, String data, String appKey, String clientId) throws JsonProcessingException;
}
......@@ -11,15 +11,15 @@ import java.util.Map;
* 维护指令码与策略实现的对应
* @Author hewei hwei1233@163.com
*/
public class ImCmdContext {
public class ImCmdStrategyFactory {
private final Map<WsRequestCmdEnum, Class> strategyMap;
public ImCmdContext(Map<WsRequestCmdEnum, Class> strategyMap) {
public ImCmdStrategyFactory(Map<WsRequestCmdEnum, Class> strategyMap) {
this.strategyMap = strategyMap;
}
public AbstractImCmd getStrategy(WsRequestCmdEnum wsRequestPathEnum) {
public AbstractImCmdStrategy getStrategy(WsRequestCmdEnum wsRequestPathEnum) {
if (wsRequestPathEnum == null) {
throw new IllegalArgumentException("not fond enum");
......@@ -35,6 +35,6 @@ public class ImCmdContext {
throw new IllegalArgumentException("not fond strategy for type:" + wsRequestPathEnum.getCmdCode());
}
return (AbstractImCmd) SpringBeanUtils.getBean(aClass);
return (AbstractImCmdStrategy) SpringBeanUtils.getBean(aClass);
}
}
package com.wecloud.im.ws.strategy;
import com.google.common.collect.Maps;
import com.wecloud.im.ws.annotation.CmdTypeAnnotation;
import com.wecloud.im.ws.annotation.ImCmdType;
import com.wecloud.im.ws.enums.WsRequestCmdEnum;
import com.wecloud.im.ws.utils.ClassScanner;
import org.springframework.beans.BeansException;
......@@ -25,27 +25,27 @@ import java.util.Set;
public class ImCmdStrategyProcessor implements BeanFactoryPostProcessor {
// 扫码注解的包路径
private static final String STRATEGY_PACK = "com.wecloud.im.ws.strategy.concrete";
// private static final String STRATEGY_PACK = "com.wecloud.im.ws.strategy.concrete";
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {
Map<WsRequestCmdEnum, Class> handlerMap = Maps.newHashMapWithExpectedSize(5);
// 扫码ReceiveTypeAnnotation注解的类
Set<Class<?>> classSet = ClassScanner.scan(STRATEGY_PACK, CmdTypeAnnotation.class);
Set<Class<?>> classSet = ClassScanner.scan(ImCmdStrategyProcessor.class.getPackage().getName(), ImCmdType.class);
classSet.forEach(clazz -> {
// 获取注解中的类型值,与枚举类一一对应
WsRequestCmdEnum type = clazz.getAnnotation(CmdTypeAnnotation.class).type();
WsRequestCmdEnum type = clazz.getAnnotation(ImCmdType.class).type();
handlerMap.put(type, clazz);
});
// 初始化Contenxt, 将其注册到spring容器当中
ImCmdContext context = new ImCmdContext(handlerMap);
ImCmdStrategyFactory context = new ImCmdStrategyFactory(handlerMap);
try {
configurableListableBeanFactory.registerResolvableDependency(Class.forName(ImCmdContext.class.getName()), context);
configurableListableBeanFactory.registerResolvableDependency(Class.forName(ImCmdStrategyFactory.class.getName()), context);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
......
......@@ -15,14 +15,14 @@ import com.wecloud.im.service.ImClientService;
import com.wecloud.im.service.ImConversationMembersService;
import com.wecloud.im.service.ImInboxService;
import com.wecloud.im.service.ImMessageService;
import com.wecloud.im.ws.annotation.CmdTypeAnnotation;
import com.wecloud.im.ws.annotation.ImCmdType;
import com.wecloud.im.ws.enums.WsRequestCmdEnum;
import com.wecloud.im.ws.enums.WsResponseCmdEnum;
import com.wecloud.im.ws.model.WsResponseModel;
import com.wecloud.im.ws.model.request.ReceiveModel;
import com.wecloud.im.ws.sender.PushTask;
import com.wecloud.im.ws.service.WriteDataService;
import com.wecloud.im.ws.strategy.AbstractImCmd;
import com.wecloud.im.ws.strategy.AbstractImCmdStrategy;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.shiro.util.SnowflakeUtil;
......@@ -40,10 +40,10 @@ import java.util.List;
/**
* @Description 处理app数据消息
*/
@CmdTypeAnnotation(type = WsRequestCmdEnum.DATA)
@ImCmdType(type = WsRequestCmdEnum.DATA)
@Service
@Slf4j
public class ImChatConcrete extends AbstractImCmd {
public class NormalChatStrategy extends AbstractImCmdStrategy {
public static final String PUSH_KEY = "push";
public static final String MSG_ID = "msgId";
......
......@@ -8,12 +8,12 @@
//import com.wecloud.im.service.ImConversationMembersService;
//import com.wecloud.im.service.ImInboxService;
//import com.wecloud.im.service.ImMessageService;
//import com.wecloud.im.ws.annotation.CmdTypeAnnotation;
//import com.wecloud.im.ws.annotation.ImCmdType;
//import com.wecloud.im.ws.enums.WsRequestCmdEnum;
//import com.wecloud.im.ws.model.request.ReceiveModel;
//import com.wecloud.im.ws.sender.PushTask;
//import com.wecloud.im.ws.service.WriteDataService;
//import com.wecloud.im.ws.strategy.ImCmdAbstract;
//import com.wecloud.im.ws.strategy.AbstractImCmdStrategy;
//import com.wecloud.rtc.entity.RtcSubCmd;
//import io.netty.channel.ChannelHandlerContext;
//import lombok.extern.slf4j.Slf4j;
......@@ -23,10 +23,10 @@
///**
// * 处理RTC信令消息
// */
//@CmdTypeAnnotation(type = WsRequestCmdEnum.SINGLE_RTC)
//@ImCmdType(type = WsRequestCmdEnum.SINGLE_RTC)
//@Service
//@Slf4j
//public class SingleRtcConcrete extends ImCmdAbstract {
//public class SingleRtcStrategy extends AbstractImCmdStrategy {
//
//
// private static final JsonMapper JSON_MAPPER = new JsonMapper();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment