public object execute(IExecutor handler) { ProtoBufPackage pack = handler.buildPackage(); addHander(pack.NSerialNo, handler); while (!over) { if (connected) { try { socket.Send(pack.pack()); ms.Flush(); }catch (Exception e) { Console.WriteLine(e.GetBaseException()); } break; } sleepMillis(1); } long startTime = Utils.currentTimeMillis(); while (handler.getValue() == null) { if ((Utils.currentTimeMillis() - startTime) > 30 * 1000)//超时 { break; } sleepMillis(1); } return(handler.getValue()); }
/** * 初始化协议 * @throws UnknownHostException * @throws IOException */ public void initConnection() { ms = new MemoryStream(); socket = new Socket(SocketType.Stream, ProtocolType.Tcp); IPAddress ipAdd = IPAddress.Parse(ip);; IPEndPoint point = new IPEndPoint(ipAdd, port); socket.Connect(point); InitConnectExec init = new InitConnectExec(); ProtoBufPackage pack = init.buildPackage(); this.addHander(pack.NSerialNo, init); socket.Send(pack.pack()); ms.Flush(); }
/** * 发送心跳包 */ public void sendHeartbeat() { while (!over && keepAlive) { try { sleepMillis(10 * 1000);// 10s发送一次心跳 KeepAliveExec keepAlive = new KeepAliveExec(); ProtoBufPackage pack = keepAlive.buildPackage(); addHander(pack.NSerialNo, keepAlive); socket.Send(pack.pack()); ms.Flush(); } catch (Exception e) { } } }