使用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写入客户端? (我的字符串很简单)
非常感谢任何帮助!
答案 0 :(得分:0)
如果你真的想为两个对象使用相同的ChannelHandler,只需使用两个消息的公共超类,然后像在3.x中那样进行转换。无论如何,如果你只使用两个不同的ChannelHandler,我认为会更干净。