Netty - How to get server response in the client

前端 未结 2 1531
梦谈多话
梦谈多话 2020-12-09 12:27

I\'m mostly there with Netty but one concept is still alluding me, and I can\'t find anything in the tutorials and so on. Firstly I do understand that Netty is asynchronous,

2条回答
  •  眼角桃花
    2020-12-09 13:05

    Jestan is correct. In my case I have a client that need to process price tick data. I use Antlr for the parsing. I fire my events in my parser, but in my case my protocol is String based. Below is an example without Antlr, I pass the String message in your case it could be the users.

    //----------------- Event --------------
    public class DataChangeEvent {
        private String message;
    
        public DataChangeEvent(String message) {
            this.message = message;
        }
    
        public String getMessage() {
            return message;
        }
    
    
    }
    
    //----------------- Listener --------------
    public interface DataChangeListenter {
        public void dataChangeEvent(DataChangeEvent event);
    }
    
    //----------------- Event Handler that fires the dataChange events --------------
    // This class needs to be static since you need to register all your classes that want to be notified of data change events
    public class DataChangedHandler {
        private static List listeners = new ArrayList();
    
        public static void registerDataChangeListener(DataChangeListenter listener) {
            listeners.add(listener);
        }
    
        public static void fireDataChange(DataChangeEvent dataChangeEvent) {
            for(DataChangeListenter listenter : listeners) {
                listenter.dataChangeEvent(dataChangeEvent);
            }
        }
    }
    
    //----------------- Example class that implements the listener and registers itself for events --------------
    public class ProcessMessage implements DataChangeListenter {
    
        public ProcessMessage() {
            DataChangedHandler.registerDataChangeListener(this);
        }
    
        public void dataChangeEvent(DataChangeEvent event) {
            //Depending on your protocal, I use Antlr to parse my message
            System.out.println(event.getMessage());
        }
    
    
    }
    
    //---------------- Netty Handler -----------
    public class TelnetClientHandler extends SimpleChannelHandler {
    
        private static final Logger logger = Logger.getLogger(TelnetClientHandler.class.getName());
    
        @Override
        public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
            String message = (String) e.getMessage();
            DataChangedHandler.fireDataChange(message);
        }
    }
    

提交回复
热议问题