Пример #1
0
        //
        private void PushFrame2LaterFrameList(MercuryEventBase e)
        {
            if (e != null)
            {
                MEObjDeliver evt  = (MEObjDeliver)e;
                FrapWrap     frap = ObjectCachePool.instance.Fetch <FrapWrap>();
                frap.frameID = (uint)evt.args[0];
                frap.data    = evt.args[1];
                e.Release();

                if (Utility.LinkedListInsert(_laterFrames, frap, FrapWrap.FrapWrapInsertComparsionFunc))
                {
                    if (_lastFrameNeedToTrace < frap.frameID)
                    {
                        _lastFrameNeedToTrace = (int)frap.frameID; // record last frame while tracing the newest frame.
                    }
                }
                else
                {
                    // release duplicated data
                    AbstractSmartObj obj = (AbstractSmartObj)frap.data;
                    if (obj != null)
                    {
                        obj.Release();
                    }
                    frap.Release();
                }
            }
        }
Пример #2
0
        private void ProcessLaterFrames()
        {
            if (_laterFrames.Count > 0)
            {
                LinkedListNode <FrapWrap> node = _laterFrames.First;
                while (node != null && node.Value != null)
                {
                    FrapWrap     frap = node.Value;
                    MEObjDeliver e    = ObjectCachePool.instance.Fetch <MEObjDeliver>();
                    e.args[0] = frap.frameID;
                    e.args[1] = frap.data;
                    e.opcode  = (int)EObjDeliverOPCode.E_OP_HANDLE_FRAMEPACK;
                    Mercury.instance.Broadcast(EventTokenTable.et_framewindow, this, e);

                    ReportProgress();

                    frap.Release();
                    node = node.Next;
                }

                _laterFrames.Clear();
            }
        }