/** * */ package com.alibaba.rocketmq.client.impl; import io.netty.channel.ChannelHandlerContext; import org.slf4j.Logger; import com.alibaba.rocketmq.client.impl.factory.MQClientFactory; import com.alibaba.rocketmq.common.protocol.MQProtos.MQRequestCode; import com.alibaba.rocketmq.common.protocol.header.CheckTransactionStateRequestHeader; import com.alibaba.rocketmq.common.protocol.header.CheckTransactionStateResponseHeader; import com.alibaba.rocketmq.common.protocol.header.SendMessageRequestHeader; import com.alibaba.rocketmq.common.protocol.header.SendMessageResponseHeader; import com.alibaba.rocketmq.remoting.exception.RemotingCommandException; import com.alibaba.rocketmq.remoting.netty.NettyRequestProcessor; import com.alibaba.rocketmq.remoting.protocol.RemotingCommand; /** * Client����Broker�Ļص���������������ص���������������������ص� * * @author vintage.wang@gmail.com shijia.wxr@taobao.com */ public class ClientRemotingProcessor implements NettyRequestProcessor { private final Logger log; private final MQClientFactory mqClientFactory; public ClientRemotingProcessor(final MQClientFactory mqClientFactory, final Logger log) { this.log = log; this.mqClientFactory = mqClientFactory; } @Override public RemotingCommand processRequest(ChannelHandlerContext ctx, RemotingCommand request) throws RemotingCommandException { MQRequestCode code = MQRequestCode.valueOf(request.getCode()); switch (code) { case CHECK_TRANSACTION_STATE: return this.checkTransactionState(ctx, request); default: break; } return null; } public RemotingCommand checkTransactionState(ChannelHandlerContext ctx, RemotingCommand request) throws RemotingCommandException { final RemotingCommand response = RemotingCommand.createResponseCommand(CheckTransactionStateResponseHeader.class); final CheckTransactionStateResponseHeader responseHeader = (CheckTransactionStateResponseHeader) response.getCustomHeader(); final CheckTransactionStateRequestHeader requestHeader = (CheckTransactionStateRequestHeader) request .decodeCommandCustomHeader(CheckTransactionStateRequestHeader.class); response.setOpaque(request.getOpaque()); return response; } }