package com.alibaba.doris.dataserver.net.netty;
import java.net.InetSocketAddress;
import org.jboss.netty.channel.ChannelHandlerContext;
import com.alibaba.doris.common.data.Key;
import com.alibaba.doris.common.data.KeyFactory;
import com.alibaba.doris.common.data.Value;
import com.alibaba.doris.common.data.ValueFactory;
import com.alibaba.doris.dataserver.ApplicationContext;
import com.alibaba.doris.dataserver.action.data.ActionData;
import com.alibaba.doris.dataserver.action.data.BaseActionData;
import com.alibaba.doris.dataserver.action.data.CommonActionData;
import com.alibaba.doris.dataserver.core.BaseRequest;
/**
* @author ajun Email:jack.yuj@alibaba-inc.com
*/
public class NettyRequest extends BaseRequest {
public NettyRequest(ApplicationContext appContext, ActionData md, ChannelHandlerContext ctx) {
super(appContext, md);
this.ctx = ctx;
}
public String getClientAddress() {
InetSocketAddress localAddress = (InetSocketAddress) ctx.getChannel().getRemoteAddress();
return localAddress.getAddress().getHostAddress();
}
@Override
public int getClientPort() {
InetSocketAddress localAddress = (InetSocketAddress) ctx.getChannel().getRemoteAddress();
return localAddress.getPort();
}
@Override
public int getServerPort() {
InetSocketAddress localAddress = (InetSocketAddress) ctx.getChannel().getLocalAddress();
return localAddress.getPort();
}
public String getServerAddress() {
InetSocketAddress localAddress = (InetSocketAddress) ctx.getChannel().getLocalAddress();
return localAddress.getAddress().getHostName();
}
public Key getKey() {
if (null != key) {
return key;
}
ActionData ad = super.getActionData();
if (ad instanceof BaseActionData) {
BaseActionData actionData = (BaseActionData) ad;
key = KeyFactory.createKey(actionData.getKeyBytes(), actionData.getVnode());
key.setRouteVersion(actionData.getRouteVersion());
return key;
}
return null;
}
public Value getValue() {
if (null != this.value) {
return this.value;
}
ActionData ad = super.getActionData();
if (ad instanceof CommonActionData) {
CommonActionData md = (CommonActionData) ad;
this.value = ValueFactory.createValue(md.getBodyByteArray(), md.getFlag(), md.getTimestamp());
return value;
}
return null;
}
private Value value;
private Key key;
private ChannelHandlerContext ctx;
}