package auth.handler;
import auth.HandlerManager;
import auth.IMHandler;
import auth.Worker;
import com.google.protobuf.Message;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import protobuf.ParseRegistryMap;
import protobuf.Utils;
import protobuf.analysis.ParseMap;
import protobuf.generate.cli2srv.chat.Chat;
import protobuf.generate.internal.Internal;
/**
* Created by win7 on 2016/3/5.
*/
public class AuthLogicConnectionHandler extends SimpleChannelInboundHandler<Message> {
private static final Logger logger = LoggerFactory.getLogger(AuthLogicConnectionHandler.class);
private static ChannelHandlerContext _authLogicConnection;
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
setAuthLogicConnecttion(ctx);
logger.info("[Auth-Logic] connection is established");
//向logic发送Greet协议
sendGreet2Logic();
}
@Override
protected void channelRead0(ChannelHandlerContext channelHandlerContext, Message message) throws Exception {
Internal.GTransfer gt = (Internal.GTransfer) message;
int ptoNum = gt.getPtoNum();
Message msg = ParseMap.getMessage(ptoNum, gt.getMsg().toByteArray());
IMHandler handler = null;
if(msg instanceof Chat.CPrivateChat) {
handler = HandlerManager.getHandler(ptoNum, gt.getUserId(), -1L, msg, AuthServerHandler.getGateAuthConnection());
} else {
logger.error("Error Messgae Type: {}", msg.getClass());
return;
}
Worker.dispatch(gt.getUserId(), handler);
}
private void sendGreet2Logic() {
Internal.Greet.Builder ig = Internal.Greet.newBuilder();
ig.setFrom(Internal.Greet.From.Auth);
ByteBuf out = Utils.pack2Server(ig.build(), ParseRegistryMap.GREET, -1, Internal.Dest.Logic, "admin");
getAuthLogicConnection().writeAndFlush(out);
logger.info("Auth send Green to Logic.");
}
public static ChannelHandlerContext getAuthLogicConnection() {
return _authLogicConnection;
}
public static void setAuthLogicConnecttion(ChannelHandlerContext ctx) {
_authLogicConnection = ctx;
}
}