سؤال

I have a very basic question. I have just started with vertx Framework. There is one thing I am not able to understand like

vertx.createNetServer().connectHandler(new Handler<NetSocket>() {
@Override
public void handle(final NetSocket socket) {

    socket.dataHandler(new Handler<Buffer>() {
        public void handle(Buffer buffer) {
            /* I can access the socket object inside this handler */
            socket.write("Hello");
        }
    });
}
}).listen(1234);

but if I write the handler function separately like this

Handler<Message> socketHandler = new Handler<Buffer>() {
        public void handle(Buffer buffer) {
            /* How can i access the socket object now */
            socket.write("Hello"); //this will give error as it does not recognize the socket object
        }
    };


vertx.createNetServer().connectHandler(new Handler<NetSocket>() {
@Override
public void handle(final NetSocket socket) {
    socket.dataHandler(socketHandler);//now I write handler separately
}
}).listen(1234);

Handler can be anywhere in the same java class or other java class. Please help me me how I can write handler separately and still access the socket object.

هل كانت مفيدة؟

المحلول

In your second example, you're not passing socket to socketHandler, so you cannot expect socketHandler to know about it.

You could solve this by creating a method like createSocketHandler(final Socket socket) that returns a Handler<Message> and that replaces your socketHandler variable.

To learn more, and to find out why you need socket to be final, look up "anonymous inner classes"

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top