使用 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
}
}
我的基本问题是,我将如何向客户端编写字符串和 ServerMesssage?(我的字符串很简单)
任何帮助是极大的赞赏!