Package devutilsplugin.utils

Source Code of devutilsplugin.utils.SocketClient

package devutilsplugin.utils;

import java.net.InetSocketAddress;
import java.security.GeneralSecurityException;

import javax.net.ssl.SSLContext;

import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.future.WriteFuture;
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.example.echoserver.ssl.BogusSslContextFactory;
import org.apache.mina.filter.ssl.SslFilter;
import org.apache.mina.transport.socket.nio.NioSocketConnector;

public class SocketClient {
  NioSocketConnector connector;
  IoHandler handler = null;
  boolean bSSL = false;
 
  public SocketClient() {
    init();
   
  }
  public void setSSL(boolean bSSL) {
    this.bSSL = bSSL;
    init();
    connector.setHandler(handler);
 
  public void init() {
    dispose();
   
    int processors = Runtime.getRuntime().availableProcessors();
    connector = new NioSocketConnector(processors*2);
    connector.getSessionConfig().setReuseAddress(true);
//    connector.getSessionConfig().setReaderIdleTime(30);
//    connector.getSessionConfig().setWriterIdleTime(30);
//    connector.getSessionConfig().setBothIdleTime(idleTime);
//    connector.getSessionConfig().setUseReadOperation(true);
    connector.setConnectTimeoutMillis(3*1000);
   
    if(bSSL){
      try{
        SslFilter sslFilter = new SslFilter(BogusSslContextFactory.getInstance(false));
        sslFilter.setUseClientMode(true);
        connector.getFilterChain().addFirst("sslFilter", sslFilter);
      }catch(Exception e){
        e.printStackTrace();
      }
    }
   
  }
 
  public void setHandler(IoHandler handler){
    this.handler = handler;
    connector.setHandler(handler);
  }
 
  public ConnectFuture connect(String host, int port){
    ConnectFuture cf = connector.connect(new InetSocketAddress(host, port));
    System.out.println("cf:" + cf);
    return cf;
  }
 
  public WriteFuture send(ConnectFuture cf, byte [] data){
    System.out.println("start");
    cf.awaitUninterruptibly();
    IoBuffer message = IoBuffer.allocate(data.length);
    message.put(data);
    message.flip();
    System.out.println("cf::" + cf);
    System.out.println("cf.getSession()::" + cf.getSession());
    WriteFuture wf = cf.getSession().write(message);
    System.out.println("end");
    return wf;
  }
 
  public void close(ConnectFuture cf){
    cf.getSession().close(true);
  }
 
  public void dispose(){
    if(connector != null){
      connector.dispose();
    }
  }

  /**
   * @param args
   * @throws Exception
   */
  public static void main(String[] args) throws Exception {
    SocketClient client = new SocketClient();
    client.setHandler(new IoHandler() {
     
      @Override
      public void sessionOpened(IoSession session) throws Exception {
//        System.out.println("sessionOpened");
      }
     
      @Override
      public void sessionIdle(IoSession session, IdleStatus idle) throws Exception {
//        System.out.println("sessionIdle");
      }
     
      @Override
      public void sessionCreated(IoSession session) throws Exception {
        System.out.println("sessionCreated");
      }
     
      @Override
      public void sessionClosed(IoSession session) throws Exception {
        System.out.println("sessionClosed");
      }
     
      @Override
      public void messageSent(IoSession session, Object message) throws Exception {
        System.out.println("messageSent");
       
      }
     
      @Override
      public void messageReceived(IoSession arg0, Object message) throws Exception {
        System.out.println("messageReceived");
       
      }
     
      @Override
      public void exceptionCaught(IoSession arg0, Throwable t)
          throws Exception {
       
      }
    });
    ConnectFuture cf = client.connect("127.0.0.1", 1234);
   
    client.send(cf, "hello".getBytes());
    client.send(cf, " world!".getBytes());
   
    try {
      Thread.sleep(10000);
    } catch (InterruptedException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    client.close(cf);
   
    client.dispose();
  }

}
TOP

Related Classes of devutilsplugin.utils.SocketClient

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.