package com.alibaba.doris.dataserver.net.netty; import org.jboss.netty.channel.Channel; import org.jboss.netty.channel.ChannelFuture; import org.jboss.netty.channel.Channels; import org.jboss.netty.channel.MessageEvent; import com.alibaba.doris.dataserver.action.Action; import com.alibaba.doris.dataserver.action.ActionFactory; import com.alibaba.doris.dataserver.action.data.ActionData; import com.alibaba.doris.dataserver.action.data.ErrorActionData; import com.alibaba.doris.dataserver.core.BaseResponse; /** * @author ajun Email:jack.yuj@alibaba-inc.com */ public class NettyResponse extends BaseResponse { public NettyResponse(MessageEvent e, ActionData oriActionData) { this.orignalActionData = oriActionData; this.e = e; } public void write(ActionData md) { this.md = md; } public void flush() { Channel channel = e.getChannel(); if (channel.isConnected()) { if (null != md) { e.getChannel().write(md); } else { Action action = ActionFactory.getAction(orignalActionData.getActionType()); errorAd.setErrorMessage("Couldn't find any action data to flush. You should call the write method of response.[" + action.getClass().getName() + "]"); e.getChannel().write(errorAd); } } else { // TODO: When connection is closed by client. Should we do something here? } } public void close() { ChannelFuture future = Channels.close(e.getChannel()); future.awaitUninterruptibly(); } private ActionData md; private ActionData orignalActionData; private MessageEvent e; private ErrorActionData errorAd = new ErrorActionData(ErrorActionData.SERVER_ERROR); }