Exemplo n.º 1
0
        public void TryDoTimeout()
        {
            lock (WaitCallBacks)
            {
                var rmvList    = new List <UInt16>();
                var rmvObjList = new List <RPCWait>();
                var now        = Support.Time.GetTickCount();
                foreach (var i in WaitCallBacks)
                {
                    if (now - i.Value.CallTime > i.Value.Timout)
                    {
                        rmvList.Add(i.Key);
                        rmvObjList.Add(i.Value);
                    }
                }

                foreach (var i in rmvList)
                {
                    WaitCallBacks.Remove(i);
                }
                rmvList.Clear();
                foreach (var i in rmvObjList)
                {
                    RPCWaitAllocator.ReleaseObject(i);
                }
                rmvObjList.Clear();
            }
        }
Exemplo n.º 2
0
        public RPCWait AddCalBack(FRPCReturnCallBack cb)
        {
            lock (WaitCallBacks)
            {
                var     serialId = CurSerialId++;
                RPCWait wait;
                if (WaitCallBacks.TryGetValue(serialId, out wait))
                {
                    if (wait.RetCallBack != null && wait.RetCallBack.Method != null)
                    {
                        System.Diagnostics.Debug.WriteLine($"RPCExecManager A CallBack has Timeout:{wait.RetCallBack.Method.DeclaringType.FullName}.{wait.RetCallBack.Method.Name}");
                    }
                    wait.RetCallBack(ref NetCore.PkgReader.NullReader, true);
                    wait.RetCallBack = cb;
                }
                else
                {
                    var tempTask = RPCWaitAllocator.QueryObject(null);
                    tempTask.Wait();
                    wait             = tempTask.Result;
                    wait.SerialId    = serialId;
                    wait.RetCallBack = cb;
                    wait.CallTime    = Support.Time.GetTickCount();
                    WaitCallBacks.Add(wait.SerialId, wait);
                }

                return(wait);
            }
        }
Exemplo n.º 3
0
        public void DoCallBack(UInt16 serialId, ref NetCore.PkgReader data)
        {
            lock (WaitCallBacks)
            {
                RPCWait wait;
                if (WaitCallBacks.TryGetValue(serialId, out wait))
                {
                    WaitCallBacks.Remove(serialId);
#if PWindow
                    var saved = System.Threading.SynchronizationContext.Current;
                    System.Threading.SynchronizationContext.SetSynchronizationContext(null);
                    wait.RetCallBack(ref data, false);
                    System.Threading.SynchronizationContext.SetSynchronizationContext(saved);
#else
                    wait.RetCallBack(ref data, false);
#endif
                    RPCWaitAllocator.ReleaseObject(wait);
                }
            }
        }