コード例 #1
0
        public static void ExecuteAsync(object x)
        {
            NFIActor xActor = (NFIActor)x;

            if (null != xActor)
            {
                xActor.Execute();
            }
        }
コード例 #2
0
ファイル: NFCScheduler.cs プロジェクト: xubingyue/NFrame
        public override void Execute()
        {
            NFGUID xID = null;

            while (mxWaitScheduler.TryDequeue(out xID))
            {
                NFIActor xActor = mxActorMng.GetActor(xID);
                if (null != xActor && xActor.GetNumQueuedMessages() > 0)
                {
                    //分配一个空闲的thread去隔天actor执行任务
                    Task.Factory.StartNew(NFCActor.ExecuteAsync, xActor);
                }
            }
        }
コード例 #3
0
        public override bool ReleaseActor(NFIDENTID xID)
        {
            if (null == xID)
            {
                return(false);;
            }

            NFIActor xActor = null;

            if (mxActorDic.TryRemove(xID, out xActor))
            {
                ReleaseActor(xActor);
            }

            return(true);
        }
コード例 #4
0
        public override NFIActor GetActor(NFIDENTID xID)
        {
            if (null == xID)
            {
                return(null);
            }

            NFIActor xActor = null;

            if (mxActorDic.TryGetValue(xID, out xActor))
            {
                return(xActor);
            }

            return(null);
        }
コード例 #5
0
        public override bool SendMsg(NFIDENTID address, NFIDENTID from, NFIActorMessage xMessage)
        {
            if (null == address || null == xMessage)
            {
                return(false);;
            }

            NFIActor xActor = GetActor(address);

            if (null != xActor)
            {
                return(xActor.PushMessages(from, xMessage));
            }

            return(false);
        }
コード例 #6
0
        public override bool RegisterHandler(NFIDENTID xID, NFIActor.Handler handler)
        {
            if (null == xID || null == handler)
            {
                return(false);
            }

            NFIActor xActor = GetActor(xID);

            if (null != xActor)
            {
                xActor.RegisterHandler(handler);

                return(true);
            }

            return(false);
        }
コード例 #7
0
        ///////////////////////////////////////////////////////

        private bool ReleaseActor(NFIActor xActor)
        {
            if (null == xActor)
            {
                return(false);
            }

            NFIActorMessage xMessage = new NFIActorMessage();

            xMessage.bAsync = false;//同步消息

            xMessage.eType = NFIActorMessage.EACTOR_MESSAGE_ID.EACTOR_BEFORE_SHUT;
            xActor.PushMessages(null, xMessage);

            xMessage.eType = NFIActorMessage.EACTOR_MESSAGE_ID.EACTOR_SHUT;
            xActor.PushMessages(null, xMessage);

            return(true);
        }