使用Netty 4.x将两种类型的消息写入通道

时间:2012-10-02 17:27:51

标签: java netty

使用Netty的新的4.x API,有一些变化(一些很小的一些)。我已经迁移了我的旧服务器核心以使用新的API,但我无法找到解决此问题的方法。在3.x中,我可以使用

     MessageEvent e

这允许我将e转换为我需要的类型(在这种情况下,ServerMessage和String,因为这些是用于服务器 - >客户端消息的两种类型)。

使用3.x时,我可以这样做:

  public void writeRequested(ChannelHandlerContext chctx, MessageEvent e)
    {
        if(e.getMessage() instanceof ServerMessage) //change 
        {
         ServerMessage message = (ServerMessage) e.getMessage();
        Channels.write(chctx,e.getFuture(),message.getData());
        logger.debug("Message sent (id: "+message.getMessageID()+ " data: "+message.getMessageBody()+")");


    }

        else if(e.getMessage() instanceof String)
        {
            String data =(String)e.getMessage();
            ChannelBuffer buffer = ChannelBuffers.buffer(data.length());
            buffer.writeBytes(data.getBytes());

            Channels.write(chctx,e.getFuture(),buffer);

            logger.debug("Written string (possible <policy-file-request />) to client #id ->" +
                    +Environment.getGameInstance().getManager().getSession(chctx.getChannel());
        }
    }

然而,对于4.x,我对我可以使用的东西感到有点困惑。我已经部分实现了这样的简单发送;

public void encode(ChannelHandlerContext ctx, ServerMessage msg, ByteBuf buffer) {

   if(msg instanceof ServerMessage) {

        ServerMessage message = (ServerMessage)msg;
        ctx.channel().write(message.getData());
        logger.debug("Message sent (id: "+message.getMessageID()+ " data: "+message.getMessageBody()+")");

   }
    else {
                 // string stuff here
            }
   }

我的基本问题是如何将String和ServerMesssage写入客户端? (我的字符串很简单)

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

如果你真的想为两个对象使用相同的ChannelHandler,只需使用两个消息的公共超类,然后像在3.x中那样进行转换。无论如何,如果你只使用两个不同的ChannelHandler,我认为会更干净。