BlazeDS StreamingAMF: How to detect when flex client closes the connection?

Posted by Adrian Pirvulescu on Stack Overflow See other posts from Stack Overflow or by Adrian Pirvulescu
Published on 2010-05-13T12:17:13Z Indexed on 2010/05/13 14:04 UTC
Read the original article Hit count: 425

Filed under:
|
|

Hello,

I have a Flex application that connects to a BlazeDS server using the StreamingAMF channel. On the server-side the logic is handled by a custom adapter that extends ActionScriptAdapter and implements FlexSessionListener and FlexClientListener interfaces.

I am asking how can I detect which "flex-client" has closed a connection when for example the user is closing the browser? (so I can clean some infos inside the database)

I tried using the following:

1. To manually manage the command messages:

    @Override
    public Object manage(final CommandMessage commandMessage) {
        switch (commandMessage.getOperation()) {
            case CommandMessage.SUBSCRIBE_OPERATION:
                System.out.println("SUBSCRIBE_OPERATION = " + commandMessage.getHeaders());
                break;
            case CommandMessage.UNSUBSCRIBE_OPERATION:
                System.out.println("UNSUBSCRIBE_OPERATION = " + commandMessage.getHeaders());               
                break;
        }
        return super.manage(commandMessage);
    }

But the clientID's are always different from the ones that came.

2. Listening for sessionDestroyed and clientDestroyed events

    @Override
    public void clientCreated(final FlexClient client) {
        client.addClientDestroyedListener(this);
        System.out.println("clientCreated = " + client.getId());
    }

    @Override
    public void clientDestroyed(final FlexClient client) {
        System.out.println("clientDestroyed = " + client.getId());
    }

    @Override
    public void sessionCreated(final FlexSession session) {
        System.out.println("sessionCreated = " + session.getId());
        session.addSessionDestroyedListener(this);
    }

    @Override
    public void sessionDestroyed(final FlexSession session) {
        System.out.println("sessionDestroyed = " + session.getId());
    }

But those sessionDestroyed and clientDestroyed methods are never called. :(

© Stack Overflow or respective owner

Related posts about blazeds

Related posts about flex