Leandro Casadei a écrit :
On Fri, Jan 15, 2010 at 2:54 PM, Emmanuel Lécharny <[email protected]>wrote:
Where in your code is the disconnect() method called ?


It's called somewhere else.
Not very helpful ;)

The same place where connect() is called.
The code i've posted is a piece of a client application that is used by
another application.
Can you tests this simple code (there are two classes, a server and a client), launching the server then the client, which should exit immediately ? (note that you'll have to add the slf4j and mina-cor jars)

If it works, then just try to see in your code if you are using the same template.

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package de.root1.minatest;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;

import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.core.service.IoHandler;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

/**
*
* @author ACHR
*/
public class Server implements IoHandler {

   public void sessionCreated(IoSession is) throws Exception {
       System.out.println("Server sessionCreated("+is+")");
   }

   public void sessionOpened(IoSession is) throws Exception {
       System.out.println("Server sessionOpened("+is+")");
   }

   public void sessionClosed(IoSession is) throws Exception {
       System.out.println("Server sessionClosed("+is+")");
   }

   public void sessionIdle(IoSession is, IdleStatus is1) throws Exception {
       System.out.println("Server sessionIdle("+is+", "+is1+")");
   }

public void exceptionCaught(IoSession is, Throwable thrwbl) throws Exception {
       System.out.println("Server exceptionCaught("+is+", "+thrwbl+")");
   }

   public void messageReceived(IoSession is, Object o) throws Exception {
       System.out.println("Server messageReceived("+is+", "+o+")");
       // reply msg
       is.write(o.toString()+"\r\n");

   }

   public void messageSent(IoSession is, Object o) throws Exception {
       System.out.println("Server messageSent("+is+", "+o+")");
   }

   private static final int PORT = 9123;

   public static void main(String[] args) throws IOException {
       Server server = new Server();
IoAcceptor acceptor = new NioSocketAcceptor();
       ((NioSocketAcceptor)acceptor).setReuseAddress( true );

       acceptor.getFilterChain().addLast( "logger", new LoggingFilter() );
acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));

       acceptor.setHandler( server );

       acceptor.getSessionConfig().setReadBufferSize( 2048 );
       acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 );
       acceptor.bind( new InetSocketAddress(PORT) );
       System.out.println("Server running ...");
   }

}

and

package de.root1.minatest;

import java.net.InetSocketAddress;
import java.nio.charset.Charset;

import org.apache.mina.core.future.CloseFuture;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.future.IoFuture;
import org.apache.mina.core.future.IoFutureListener;
import org.apache.mina.core.service.IoHandler;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketConnector;

/**
* Hello world!
*
*/
public class Client implements IoHandler {
   public void sessionCreated(IoSession is) throws Exception {
       System.out.println("client sessionCreated("+is+")");
   }

   public void sessionOpened(IoSession is) throws Exception {
       System.out.println("client sessionOpened("+is+")");
   }

   public void sessionClosed(IoSession is) throws Exception {
       System.out.println("client sessionClosed("+is+")");
   }

   public void sessionIdle(IoSession is, IdleStatus is1) throws Exception {
       System.out.println("client sessionIdle("+is+", "+is1+")");
   }

public void exceptionCaught(IoSession is, Throwable thrwbl) throws Exception {
       System.out.println("client exceptionCaught("+is+", "+thrwbl+")");
   }

   public void messageReceived(IoSession is, Object o) throws Exception {
       System.out.println("client messageReceived("+is+", "+o+")");
   }

   public void messageSent(IoSession is, Object o) throws Exception {
       System.out.println("client messageSent("+is+", "+o+")");
   }

   public static void main(String[] args) {
       Client client = new Client();
       final NioSocketConnector connector = new NioSocketConnector();

       // Set connect timeout.
       connector.setConnectTimeoutMillis(30 * 1000L);

       connector.setHandler(client);
       connector.getFilterChain().addLast( "logger", new LoggingFilter() );
connector.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));

       // Start communication.
       System.out.println( "Connection ..." );
ConnectFuture cf = connector.connect(new InetSocketAddress("localhost", 9123));

       System.out.println( "Waiting for conection to achieve ..." );
       cf.awaitUninterruptibly();

       System.out.println( "Connected !!!" );

       // send a message
       System.out.println( "Writing message ..." );
       cf.getSession().write("Hello World!\r\n");
       System.out.println( "Message written !!!" );

       // Get the close future for this session
       CloseFuture closeFuture = cf.getSession().getCloseFuture();

closeFuture.addListener((IoFutureListener<?>) new IoFutureListener<IoFuture>() {

           @Override
           public void operationComplete(IoFuture future) {
System.out.println("managed session count=" + connector.getManagedSessionCount());
           }
       });

       // wait for session close and then dispose the connector
       System.out.println( "Closing the session..." );
       closeFuture.getSession().close(false);

       System.out.println( "Waiting for the session to be closed..." );
       closeFuture.awaitUninterruptibly();
       System.out.println( "Session closed !!!" );

System.out.println("Disposing connector ...");
       connector.dispose();
       System.out.println("Disposing connector ... *finished*");
   }
}



--
Regards,
Cordialement,
Emmanuel Lécharny
www.nextury.com


Reply via email to