/**
*
*/
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;
}
}