users@grizzly.java.net

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

From: Survivant 00 <survivant00_at_gmail.com>
Date: Tue, 25 Nov 2008 09:25:49 -0500

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.


and if I look into the code the method setSelectionKeyHandler is deprecated.

f_controller.setSelectionKeyHandler(skh);



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>

> 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>
>
> 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(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
>> For additional commands, e-mail: users-help_at_grizzly.dev.java.net
>>
>>
>