users@grizzly.java.net

Re: [ANN] Getting notified when client or server close the connection.

From: Jeanfrancois Arcand <Jeanfrancois.Arcand_at_Sun.COM>
Date: Tue, 25 Nov 2008 10:28:02 -0500

Salut,

Survivant 00 wrote:
> JF, I try directly your code.. first you did a typo.. second line : you
> wrote shk.. it's skh :)
>
> but if I check at the commit logs :
>
> Sending grizzly
> Sending grizzly/src/main/java/com/sun/grizzly/BaseSelectionKeyHandler.java
>
> Sending grizzly/src/main/java/com/sun/grizzly/SSLConnectorHandler.java
> Sending grizzly/src/main/java/com/sun/grizzly/TCPConnectorHandler.java
> Sending grizzly/src/main/java/com/sun/grizzly/UDPConnectorHandler.java
>
> Sending
> grizzly/src/main/java/com/sun/grizzly/async/AbstractAsyncQueueReader.java
> Sending
> grizzly/src/main/java/com/sun/grizzly/async/AbstractAsyncQueueWriter.java
> Sending grizzly/src/main/java/com/sun/grizzly/async/TCPAsyncQueueReader.java
>
> Sending grizzly/src/main/java/com/sun/grizzly/async/TCPAsyncQueueWriter.java
> Sending grizzly/src/main/java/com/sun/grizzly/async/UDPAsyncQueueWriter.java
> Sending grizzly/src/main/java/com/sun/grizzly/filter/ReadFilter.java
>
> Adding
> grizzly/src/main/java/com/sun/grizzly/util/ConnectionCloseHandler.java
> Sending grizzly/src/main/java/com/sun/grizzly/util/InputReader.java
> Sending grizzly/src/main/java/com/sun/grizzly/util/OutputWriter.java
>
>
> you didn't commit Handler or SelectionKeyHandler. I don't have the
> method : skh.setConnectionCloseHandler in the interface.

Handler and SelectionKeyHandler hasn't changed. You need to use an
instance of BaseSelectionKeyHandler like DefaultSelectionKeyHandler.


>
>
> and if I look into the code the method setSelectionKeyHandler is deprecated.
>
> f_controller.setSelectionKeyHandler(skh);

Yes you can use instead SelectorHandler.setSelectionKeyHandler()...but I
was too lazy and used the Controller instead.

The code below looks OK to me. You don't get the notified? Strange as I
tested this yesterday with telnet and it was working...let me work on a
unit test.

A+

-- Jeanfrancois


>
>
>
> here my init method
>
>
> /**
> * Init
> */
> @SuppressWarnings("unchecked")
> public void init(){
>
> if(s_logger.isDebugEnabled()){
> s_logger.debug("listening for incomming TCP Connections on
> port : " + f_port);
> }
>
> try {
>
> f_controller = new Controller();
> TCPSelectorHandler tcpSelectorHandler = new
> TCPSelectorHandler();
> tcpSelectorHandler.setPort(f_port);
>
> Pipeline pipeline = new DefaultPipeline();
> pipeline.setMaxThreads(5);
>
> f_controller.setPipeline(pipeline);
>
> tcpSelectorHandler.setSelectionKeyHandler(new
> BaseSelectionKeyHandler());
>
> f_controller.addSelectorHandler(tcpSelectorHandler);
>
> SelectionKeyHandler skh = new DefaultSelectionKeyHandler();
> skh.setConnectionCloseHandler(new ConnectionCloseHandler() {
>
> public void locallyClosed(SelectionKey key) {
> s_logger.debug(key + " is being locally cancelled");
> }
>
> public void remotlyClosed(SelectionKey key) {
> s_logger.debug(key + " is being remotly cancelled
> (connection closed)");
> }
> });
>
> f_controller.setSelectionKeyHandler(skh);
>
> QuoteQueryProtocolFilter protocolParser = new
> QuoteQueryProtocolFilter();
> QuoteQueryManagerFilter quoteManagerFilter = new
> QuoteQueryManagerFilter(f_quoteManager);
>
> final ProtocolChain protocolChain = new DefaultProtocolChain();
> protocolChain.addFilter(protocolParser);
> protocolChain.addFilter(quoteManagerFilter);
> ((DefaultProtocolChain)
> protocolChain).setContinuousExecution(true);
>
>
> ProtocolChainInstanceHandler pciHandler = new
> DefaultProtocolChainInstanceHandler() {
>
> public boolean offer(ProtocolChain protocolChain) {
> return false;
>
> }
>
> public ProtocolChain poll() {
>
> return protocolChain;
> }
> };
>
> f_controller.setProtocolChainInstanceHandler(pciHandler);
> try {
> f_controller.start();
> } catch (IOException e) {
> e.printStackTrace();
> }
>
> } catch (Exception e) {
> f_quoteManager.exit(-10);
> }
> }
>
>
> 2008/11/25 Survivant 00 <survivant00_at_gmail.com
> <mailto:survivant00_at_gmail.com>>
>
> I reopen the bug, but not sure if I did it correctly.
>
> here what I have.
>
>
> tcpSelectorHandler.setSelectionKeyHandler(new BaseSelectionKeyHandler(){
>
>
> public void locallyClosed(SelectionKey key) {
> s_logger.debug(key + " is being locally
> cancelled");
>
> }
>
> public void remotlyClosed(SelectionKey key) {
> s_logger.debug(key + " is being remotly
> cancelled (connection closed)");
> }
> });
>
> f_controller.addSelectorHandler(tcpSelectorHandler);
>
> if I open a telnet connection and close it, I won't be notify.
>
> but I didn't use ConnectionCloseHandler.
>
> Can I mix the 2 handlers ?
>
>
>
>
> 2008/11/24 Jeanfrancois Arcand <Jeanfrancois.Arcand_at_sun.com
> <mailto:Jeanfrancois.Arcand_at_sun.com>>
>
> Salut,
>
> I've added a new Handler for managing local and remote
> connection close. The new ConnectionCloseHandler[1] can be
> configured on any class that extends our BaseSelectionKeyHandler
> (like DefaultSelectionKeyHandler):
>
> SelectionKeyHandler skh = new DefaultSelectionKeyHandler();
> shk.setConnectionCloseHandler(new ConnectionCloseHandler() {
>
> public void locallyClosed(SelectionKey key) {
> logger.info <http://logger.info>(key + " is being locally
> cancelled");
> }
>
> public void remotlyClosed(SelectionKey key) {
> logger.fine(key + " is being remotly cancelled
> (connection closed)");
> }
> });
>
> controller.setSelectionKeyHandler(skh);
>
> Those two methods gets invoked when any of the following
> condition happens:
>
> 1. Any IOException occurs on I/O operations (read/write)
> 2. When the read() or write() operation return -1
>
> Please try it :-)
>
> A+
>
> -- Jeanfrancois
>
> [1]
> https://grizzly.dev.java.net/nonav/apidocs/com/sun/grizzly/util/ConnectionCloseHandler.html
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe_at_grizzly.dev.java.net
> <mailto:users-unsubscribe_at_grizzly.dev.java.net>
> For additional commands, e-mail: users-help_at_grizzly.dev.java.net
> <mailto:users-help_at_grizzly.dev.java.net>
>
>
>