/** 初始化连接类 */
  public synchronized void initConnector(IoHandler handler) {
    if (connector == null) {
      connector = new NioSocketConnector();
      // 设置缓存大小
      connector.getSessionConfig().setMaxReadBufferSize(2048);
      // 添加过滤器
      connector
          .getFilterChain()
          .addLast(
              "codec", new ProtocolCodecFilter(new ExpressCodecFactory(Charset.forName("UTF-8"))));

      // 设置日志过滤器
      LoggingFilter loggingFilter = new LoggingFilter();
      loggingFilter.setMessageReceivedLogLevel(LogLevel.DEBUG);
      loggingFilter.setMessageSentLogLevel(LogLevel.DEBUG);
      connector.getFilterChain().addLast("logger", loggingFilter);
      // 添加登录过滤器
      connector.getFilterChain().addLast("loginFilter", new TCPLoginFilter());
      // 添加登出过滤器
      connector.getFilterChain().addLast("logoutFilter", new TCPLogoutFilter());
      // 防回流过滤器
      connector.getFilterChain().addLast("backFlowFilter", new BackFlowFilter());

      // 添加业务逻辑处理器类
      connector.setHandler(handler);
    }
  }
예제 #2
0
파일: CmdClient.java 프로젝트: perkyliu/jd
 private CmdClient(long connectTimeoutInMillis) {
   connector.setConnectTimeoutMillis(connectTimeoutInMillis);
   connector
       .getFilterChain()
       .addLast(
           "codec", new ProtocolCodecFilter(new CmdRequestEncoder(), new CmdResponseDecoder()));
   connector.getFilterChain().addLast("threadPool", new ExecutorFilter(executor));
   connector.setHandler(this);
 }
예제 #3
0
  public void socketServer() {
    // 创建一个socket连接
    NioSocketConnector connector = new NioSocketConnector();
    // 消息核心处理器
    connector.setHandler(new MinaClientHanlder());
    // 设置链接超时时间
    connector.setConnectTimeoutCheckInterval(30);
    // 获取过滤器链
    DefaultIoFilterChainBuilder chain = connector.getFilterChain();
    ProtocolCodecFilter filter =
        new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8")));
    // 添加编码过滤器 处理乱码、编码问题
    chain.addLast("objectFilter", filter);

    // 连接服务器,知道端口、地址
    ConnectFuture cf = connector.connect(new InetSocketAddress(App.address, App.bindPort));
    // 等待连接创建完成
    cf.awaitUninterruptibly();
    if (cf.isConnected()) {
      App.isConnected = true;
      System.out.println("等待连接断开");
      // 等待连接断开
      cf.getSession().getCloseFuture().awaitUninterruptibly();
    } else {
      System.out.println("连接断开");
      App.isConnected = false;
    }
    System.out.println("----dispose");
    connector.dispose();
    System.out.println("dispose----");
  }
예제 #4
0
  private void keepAliveFilterForIdleStatus(IdleStatus status) throws Exception {
    NioSocketConnector connector = new NioSocketConnector();
    KeepAliveFilter filter =
        new KeepAliveFilter(new ClientFactory(), status, EXCEPTION, INTERVAL, TIMEOUT);
    filter.setForwardEvent(true);
    connector.getFilterChain().addLast("keep-alive", filter);

    final AtomicBoolean gotException = new AtomicBoolean(false);
    connector.setHandler(
        new IoHandlerAdapter() {
          @Override
          public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
            // cause.printStackTrace();
            gotException.set(true);
          }

          @Override
          public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
            // Do nothing
          }
        });

    ConnectFuture future =
        connector.connect(new InetSocketAddress("127.0.0.1", port)).awaitUninterruptibly();
    IoSession session = future.getSession();
    assertNotNull(session);

    Thread.sleep((INTERVAL + TIMEOUT + 1) * 1000);

    assertFalse("got an exception on the client", gotException.get());

    session.close(true);
    connector.dispose();
  }
예제 #5
0
 private NioSocketConnector setupConnector(IoHandlerAdapter handler) {
   NioSocketConnector connector = new NioSocketConnector();
   connector.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 300);
   connector.setConnectTimeoutCheckInterval(5);
   connector
       .getFilterChain()
       .addLast(
           "codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));
   connector.setHandler(handler);
   return connector;
 }
예제 #6
0
  public void connect(InetAddress ia, int port) {
    connector = new NioSocketConnector();
    connector
        .getFilterChain()
        .addLast("codec", new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));
    if (logger.isDebugEnabled()) {
      LoggingFilter logFilter = new LoggingFilter();
      logFilter.setMessageSentLogLevel(LogLevel.DEBUG);
      logFilter.setMessageReceivedLogLevel(LogLevel.DEBUG);
      connector.getFilterChain().addLast("logger", logFilter);
    }
    connector.setHandler(this);

    ConnectFuture future = connector.connect(new InetSocketAddress(ia, port));
    future.awaitUninterruptibly();
    if (!future.isConnected()) {
      logger.error("Connection failed");
    }
    session = future.getSession();
  }
예제 #7
0
파일: Bot.java 프로젝트: jiangchao1987/pokr
  private void init() {
    connector = new NioSocketConnector();
    bh = new BotHandler(username, password, roomId);
    connector.setHandler(bh);

    DefaultIoFilterChainBuilder chain = connector.getFilterChain();

    log.debug("connecing to the server...");
    ConnectFuture connFuture =
        connector.connect(
            new InetSocketAddress(ServerConfig.gameServerAddress, ServerConfig.gameServerPort));
    connFuture.awaitUninterruptibly();
  }
예제 #8
0
  private CommandMinaClient() throws java.net.ConnectException {
    NioSocketConnector connector = new NioSocketConnector();
    // 创建接收数据的过滤器
    DefaultIoFilterChainBuilder chain = connector.getFilterChain();
    // 设定这个过滤器将以对象为单位读取数据
    ProtocolCodecFilter filter = new ProtocolCodecFilter(new ObjectSerializationCodecFactory());
    // 设定服务器端的消息处理器:一个SamplMinaServerHandler对象,
    chain.addLast("objectFilter", filter);

    // 设定服务器端的消息处理器:一个 SamplMinaServerHandler 对象,
    connector.setHandler(new CommandMinaClientHanlder());
    // Set connect timeout.
    connector.setConnectTimeoutCheckInterval(30);
    // 连结到服务器:
    ConnectFuture cf = connector.connect(new InetSocketAddress("159.226.95.156", 9900));
    // Wait for the connection attempt to be finished.
    cf.awaitUninterruptibly();

    session = cf.getSession();
  }
예제 #9
0
/**
 * @ClassName: TongbuClient @Description: mina客户端=====同步
 *
 * @author xubin
 * @date 2012-9-10 下午6:33:53
 */
public class TongbuClient {
  NioSocketConnector connector = new NioSocketConnector();
  DefaultIoFilterChainBuilder chain = connector.getFilterChain();
  CommResultInfo info;

  /**
   * Title:
   *
   * <p>Desc:初始化客户端信息
   *
   * @param message
   * @throws UnsupportedEncodingException
   */
  public TongbuClient(Object message, String url, int port) {
    chain.addLast("logging", new LoggingFilter()); // 添加日志过滤器
    chain.addLast("myChin", new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));
    if (message instanceof String) {
      connector.setHandler(new ClientHandler((String) message));
    } else if (message instanceof CommEntity) {
      connector.setHandler(new ClientHandler((CommEntity) message));
    }
    connector.setConnectTimeoutMillis(10000);
    SocketSessionConfig cfg = connector.getSessionConfig();
    cfg.setUseReadOperation(true);
    IoSession session =
        connector.connect(new InetSocketAddress(url, port)).awaitUninterruptibly().getSession();
    ReadFuture readFuture = session.read();
    readFuture.awaitUninterruptibly();
    this.info = (CommResultInfo) readFuture.getMessage();
    session.close(true);
    session.getService().dispose();
  }

  public CommResultInfo getResult() {
    return info;
  }
}
  public void init() {

    // Create TCP/IP connector.
    connector = new NioSocketConnector();
    // 创建接收数据的过滤器
    DefaultIoFilterChainBuilder chain = connector.getFilterChain();
    // 自动重连
    chain.addLast(
        "reConnect",
        new IoFilterAdapter() {
          public void sessionClosed(NextFilter nextFilter, IoSession session) throws Exception {
            logger.error("连接被关闭:" + getServerInfo());
            scheduleConnect();
          }
        });
    // 设定这个过滤器将一行一行(/r/n)的读取数据
    chain.addLast("protocolCodecFilter", new ProtocolCodecFilter(new TextLineCodecFactory()));
    // 设定服务器端的消息处理器:一个MinaClientHandler对象,
    connector.setHandler(ioHandler);
    // Set connect timeout.
    connector.setConnectTimeoutMillis(30 * 1000);

    doConnnect();
  }