Usage One: Add an asynchronous interface to the channel
Public void Close () { Log.debug(this . GetClass (). GetName ()); = Events.event (null, events.disconnect); if (channel.isconnected ()) { Channel.write (event). AddListener (Channelfuturelistener.close); } Else { channel.close (); Log.trace ("Unable to write the event {} with type {} to Socket", event, Event.gettype ()); } }
Usage Two: The future class adds the listening interface
Public voidHandlegameroomjoin (player player, channel Channel, String refkey) {gameroom gameroom=Lookupservice.gameroomlookup (Refkey); if(NULL!=gameroom) {playersession playersession=gameroom.createplayersession (player); Gameroom.onlogin (playersession); String Reconnectkey=(String) idgeneratorservice. Generatefor (Playersession.getclass ()); Playersession.setattribute (Jetconfig.reconnect_key, Reconnectkey); Playersession.setattribute (Jetconfig.reconnect_registry, reconnectregistry); Log.trace ("Sending game_room_join_success to channel {}", Channel.getid ()); Channelfuture Future=Channel.write (Eventtoframe (events.game_room_join_success, Reconnectkey)); Connecttogameroom (GameRoom, Playersession, future); } Else { //Write failure and close channel.Channelfuture future =Channel.write (Eventtoframe (Events.game_room_join_failure,NULL)); Future.addlistener (Channelfuturelistener.close); Log.error ("Invalid ref key provided by client: {}. Channel {} 'll be closed ", Refkey, Channel.getid ()); } }
Public voidConnecttogameroom (Finalgameroom GameRoom,Finalplayersession playersession, channelfuture Future) {Future.addlistener (NewChannelfuturelistener () {@Override Public voidOperationcomplete (channelfuture future)throwsException {Channel channel=Future.getchannel (); Log.trace ("Sending game_room_join_success to channel {} completed", Channel.getid ()); if(Future.issuccess ()) {//Set The TCP channel on the session.Nettytcpmessagesender sender =NewNettytcpmessagesender (channel); Playersession.settcpsender (sender); //Connect the pipeline to the game.gameroom.connectsession (playersession); //Send the Connect event so that it'll in turn Send the//START event.playersession.onevent (events.connectevent (sender)); } Else{log.error ("Sending game_room_join_success message to client was failure, channel would be closed"); Channel.close (); } } }); }
Jetserver Open Source Project Learning (vii) usage of--channelfuturelistener