//线程安全方法 void Close() { if (IsClose) { return; } Debug.LogError("CloseRemoteClient"); if (client != null) { try { if (client != null && client.Connected) { client.Close(); } } catch (Exception exception) { Debug.LogError(exception.ToString()); } } client = null; IsClose = true; signal.Set(); if (evtHandler != null) { var eh = evtHandler; ml.queueInLoop(() => { SendEvt(eh, RemoteClientEvent.Close); }); } evtHandler = null; msgHandler = null; }
public IEnumerator SendWaitResponse(byte[] data, uint fid, KBEngine.MessageHandler handler, Bundle bundle) { var ret = false; flowHandler.Add(fid, (packet) => { handler(packet); ret = true; }); Send(data, bundle); //float passTime = 0; while (!ret && !IsClose) { yield return(null); //passTime += Time.deltaTime; } if (!ret) { Debug.LogError("TimeOutRequest: " + fid + " h " + handler); var packet = new Packet(); packet.responseFlag = 1; handler(packet); } }