users@grizzly.java.net

Re: how to detect a client that close his connection to the server ?

From: Jeanfrancois Arcand <Jeanfrancois.Arcand_at_Sun.COM>
Date: Thu, 13 Nov 2008 08:03:25 -0500

Salut,

Jeanfrancois Arcand wrote:
> Salut,
>
> Oleksiy Stashok wrote:
>> Hi Sebastien,
>>
>> you can easily add custom Filter before ReadFilter.
>> Implement postExecute method, with approx. following code:
>>
>> public boolean postExecute(Context ctx) throws IOException {
>>
>> final Context.KeyRegistrationState state =
>> ctx.getKeyRegistrationState();
>>
>> if (state == Context.KeyRegistrationState.CANCEL){
>> notifyConnectionClosed();
>> }
>> }
>
> hum. Not sure it will works because one of the Filter can always set the
> KeyRegistrationState to CANCEL.

I need to avoid starting working too early ;-) Of course no Filter will
be invoked when the connection is closed :-)

Forget me!

-- Jeanfrancois


I would propose we add a way to get
> notified when the client close the connection in ReadFilter (specially
> with ProtocolParser, because you can't override the ReadFilter.execute()
> method. What do you think?
>
> A+
>
> -- Jeanfrancois
>
>
>>
>>
>> Hope this will help.
>>
>> WBR,
>> Alexey.
>>
>>
>> On Nov 13, 2008, at 4:08 , Survivant 00 wrote:
>>
>>> yes I'm using a ProtocolParser..
>>>
>>> QuoteQueryProtocolFilter protocolParser = new
>>> QuoteQueryProtocolFilter();
>>>
>>> :)
>>>
>>> I'll put a flag on my thread. I need to fix that before putting my
>>> application in test.
>>>
>>>
>>>
>>> 2008/11/12 Jeanfrancois Arcand <Jeanfrancois.Arcand_at_sun.com
>>> <mailto:Jeanfrancois.Arcand_at_sun.com>>
>>>
>>> Salut,
>>>
>>>
>>> Survivant 00 wrote:
>>>
>>> I just find a bug in my application. I don't know how to get
>>> notify when I client close the connection with the server.
>>> (TCP)
>>>
>>>
>>> I can't remember when we talked about that, but I was under the
>>> impression the ReadFilter has an API to register listener when the
>>> connection get closed. But looking at the code, I guess I've
>>> dreamed....
>>>
>>> The solution is to write your own SelectionKeyHandler and monitor
>>> the SelectionKey that are closed. But I don't really like the
>>> solution.
>>>
>>> The logic should really be in ReadFilter, but I suspect you are
>>> using ProtocolParser and let me investigate more...Alexey and John
>>> might wakes faster than me on that :-)
>>>
>>> A+
>>>
>>> -Jeanfrancois
>>>
>>>
>>>
>>>
>>> here the init of the server
>>>
>>> public void init(){
>>> System.out.println("listening for incoming 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);
>>> 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 ProtocolChain poll() {
>>>
>>> return protocolChain;
>>> }
>>>
>>> public boolean offer(ProtocolChain
>>> protocolChain) {
>>> return false;
>>>
>>> }
>>> };
>>>
>>>
>>> f_controller.setProtocolChainInstanceHandler(pciHandler);
>>> try {
>>> f_controller.start();
>>> } catch (IOException e) {
>>> e.printStackTrace();
>>> }
>>> } catch (Exception e) {
>>> System.exit(-10);
>>> }
>>> }
>>>
>>>
>>>
>>> ---------------------------------------------------------------------
>>> 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>
>>>
>>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe_at_grizzly.dev.java.net
> For additional commands, e-mail: users-help_at_grizzly.dev.java.net
>