Netty の新しい 4.x API では、いくつかの変更 (大きなものと小さなもの) がありました。古いサーバー コアを新しい API で動作するように移行しましたが、この問題を解決する方法がわかりません。3.xでは、使用できました
MessageEvent e
これにより、e を必要な型にキャストすることができました (この場合は、サーバーからクライアントへのメッセージに使用される 2 つの型であるため、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 と ServerMessage をクライアントに書き込むにはどうすればよいかということです。(私の文字列は単純です)
どんな助けでも大歓迎です!