0

サーバー部分の構成ファイルをメモリに読み込み、ハンドラーでデータを使用する計画があります。

コードスニペットを添付しました。

// サンプルディレクトリから

public class TelnetServer {

    private final int port;
    private final String myConfFile;

    // MyConf is a singleton class which read the config
    // from my app into memory
    private static final AttributeKey<MyConf> myCAttribute = new AttributeKey<MyConf>("MyConf");

    public TelnetServer(int port,String confFile) {
        this.port = port;
        this.myConfFile = confFile;
    }

    public void run() throws Exception {
        EventLoopGroup bossGroup = new NioEventLoopGroup();
        EventLoopGroup workerGroup = new NioEventLoopGroup();
        try {
            ServerBootstrap b = new ServerBootstrap();
            b.childAttr(myCAttribute, MyConf.getInstance(myConfFile));
            b.group(bossGroup, workerGroup)
                .channel(NioServerSocketChannel.class)
                .childHandler(new TelnetServerInitializer());

            b.bind(port).sync().channel().closeFuture().sync();
        } finally {
            bossGroup.shutdownGracefully();
            workerGroup.shutdownGracefully();
        }
    }
}

ここで、TelnetServerHandler で値を使用したいと考えています。

public void channelRead0(ChannelHandlerContext ctx, String request) throws Exception {

    // Generate and write a response.
    String response;
    boolean close = false;
    if (request.isEmpty()) {
        response = "Please type something.\r\n";
    } else if ("bye".equals(request.toLowerCase())) {
        response = "Have a good day!\r\n";
        close = true;
    } else {
        response = "Did you say '" + request + "'?\r\n";
        MyConf mc = (MyConf)ctx.attr("MyConf");            
    }

    // We do not need to write a ChannelBuffer here.
    // We know the encoder inserted at TelnetPipelineFactory will do the conversion.
    ChannelFuture future = ctx.write(response);

    // Close the connection after sending 'Have a good day!'
    // if the client has sent 'bye'.
    if (close) {
        future.addListener(ChannelFutureListener.CLOSE);
    }
}

しかし、これは機能しません。だれか適切なドキュメントを教えてください。または、この計画を実現する方法のヒントを教えてください。

手伝ってくれてありがとう。ジョン

4

1 に答える 1

0

そうあるべきだと思う

MyConf mc = ctx.attr(TelnetServer.myCAttribute).get();

プロジェクトで試してみたところ、チャネル コンテキストから属性を取得する際に問題が発生し、チャネル自体から取得する必要がありました。

MyConf mc = ctx.channel().attr(TelnetServer.myCAttribute).get();   

それらのいずれかがあなたのために働くかどうか試してください。

于 2013-10-21T14:47:22.090 に答える