mina客户端实例

package mi.magic.service.impl;

import java.net.InetSocketAddress;
import mi.magic.service.ConnectService;
import mi.magic.util.SamplMinaClientHandler;
import mi.magic.util.SocketLineMap;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
import org.apache.mina.transport.socket.nio.NioSocketConnector;

import cn.ijimu.commons.util.SimpleLogUtils;
import cn.lawrence.io.SocketData;
import cn.lawrence.io.SocketResultData;

public class ConnectServiceImpl implements ConnectService {
 static {
  SimpleLogUtils.config();
 }
 private static Log LOG = LogFactory.getLog(ConnectServiceImpl.class);
 public static final String HOST = "localhost";// 服务器地址
 public static final int PORT = 5656; // 服务器端口号
 private NioSocketConnector connector;
 private ConnectFuture cf;
 private IoSession session;

 public void createConnect() {
  connector = new NioSocketConnector();
  connector.getSessionConfig().setReadBufferSize(2048);

  connector.getFilterChain().addLast("objectFilter",
    new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));
  // 设定服务器端的消息处理器:一个SamplMinaServerHandler对象,
  connector.setHandler(new SamplMinaClientHandler());
  cf = connector.connect(new InetSocketAddress(HOST, PORT));// 连结到服务器
  // Wait for the connection attempt to be finished.
  cf.awaitUninterruptibly();// 等待连接创建完成

  LOG.info("客户端启动");
 }

 
 public SocketResultData sendData(int id, boolean hasReturn,
   String descation, String method, Object[] args) {
  if (cf == null) {
   createConnect();
  }
  SocketData data = new SocketData();
  data.id = id;
  data.hasReturn = hasReturn;
  data.descation = descation;
  data.method = method;
  data.args = args;
  
  session = cf.getSession();// 获得session
  // 同步操作
  session.write(data);
  SocketResultData resultData = new SocketResultData(id);
  SocketLineMap.addLine(resultData, id);
  try {
  
   synchronized (resultData) {

    while(true)
    {
     resultData.wait(10);
     if(resultData.isReturnResult()) break;
    }
//    resultData.wait(10);
   }
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   SocketLineMap.removeLine(id);
  }
//  session.close(true);
  
//  if(!cf.isConnected()){
//   connector.dispose();
//  }
  
  return resultData;

   //异步操作
//   session.getConfig().setUseReadOperation(true);
//   WriteFuture writeFuture = session.write(data);
//   writeFuture.awaitUninterruptibly(); // 等待发送数据操作完成
//   ReadFuture readFuture = session.read();
//   readFuture.awaitUninterruptibly(); // 等待处理结果
//   SocketResultData socketResultData = (SocketResultData) readFuture
//   .getMessage();
//   session.getConfig().setUseReadOperation(false);
//   session.close(true);
//   return socketResultData;

  
  // connector.dispose();
 }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值