public void OnFarCallFinished(System.UInt16 id, PackageProxy ret, bool bTimeOut) { RPCWaitHandle result = null; lock (this) { if (mWaitHandles.TryGetValue(id, out result)) { mWaitHandles.Remove(id); } } if (result != null) { try { result.Raise_OnFarCallFinished(ret, bTimeOut); } catch (System.Exception ex) { Log.Log.Common.Print(ex.ToString()); Log.Log.Common.Print(ex.StackTrace.ToString()); } } }
public RPCWaitHandle NewWaitHandleTimeOut(System.Diagnostics.StackTrace st, float timeOut) { lock (this) { RPCWaitHandle result = new RPCWaitHandle(); result.CallID = ++CurrentId; result.mTimeOut = timeOut; try { mWaitHandles.Add(result.CallID, result); } catch (System.Exception) { ClearTimeoutHandles(); mWaitHandles.Add(result.CallID, result); Log.Log.Common.Print("NewWaitHandle Add Failed,ClearTimeoutHandles"); } if (st != null) { result.SrcFile = st.GetFrame(0).GetMethod().Name; } return(result); } }
public RPCWaitHandle WaitDoClient2PlanesPlayer(Iocp.NetConnection conn, float timeOut) { PkgType = PackageType.PKGT_C2P_Player_SendAndWait; if (RPCManager == null) { RPCManager = RPCNetworkMgr.Instance; } RPCWaitHandle handle = RPCManager.NewWaitHandleTimeOut(null, timeOut); SerialId = handle.CallID; SendBuffer(conn); return(handle); }
public void _SyncDoCommand(Iocp.TcpClient cltConn, int timeout) { if (RPCManager == null) { RPCManager = RPCNetworkMgr.Instance; } PkgType = PackageType.PKGT_SendAndWait; RPCWaitHandle handle = RPCManager.NewWaitHandle(null); SendBuffer(cltConn); while (true) { cltConn.Update(); if (null == RPCManager.GetWaitHandle(handle.CallID)) { break; } System.Threading.Thread.Sleep(1); } }
public RPCWaitHandle WaitDoCommandWithTimeOut(float timeOut, Iocp.NetConnection conn, CommandTargetType target, System.Diagnostics.StackTrace st) {//其实这里有很微弱的多线程问题,后面如果设置delegate的时候,网络已经返回的话,不过这个情况应该基本不可能发生 switch (target) { case CommandTargetType.DefaultType: PkgType = PackageType.PKGT_SendAndWait; break; case CommandTargetType.Planes: PkgType = PackageType.PKGT_C2P_SendAndWait; break; } if (RPCManager == null) { RPCManager = RPCNetworkMgr.Instance; } RPCWaitHandle handle = RPCManager.NewWaitHandleTimeOut(st, timeOut); SerialId = handle.CallID; SendBuffer(conn); return(handle); }