コード例 #1
0
        private void HandlerActionEvent(EventMsg eventMsg)
        {
            ActionEventMsg actionMsg = (ActionEventMsg)eventMsg;

            workerContext.s = actionMsg.sAgent;
            actionMsg.action(workerContext, actionMsg.attachData);
        }
コード例 #2
0
        public void Close()
        {
            EventMsg eventMsg = new EventMsg();

            eventMsg.eventType = EventType.EVENT_WORKER_CLOSE;
            this.Enqueue(eventMsg);

            workerThread.Join();
        }
コード例 #3
0
        private void HandlerRouteRpc(EventMsg eventMsg)
        {
            RpcEventMsg rpcMsg = (RpcEventMsg)eventMsg;

            RpcHandler handler = null;

            if (rpcHandlerMap.TryGetValue(rpcMsg.rpcName, out handler))
            {
                workerContext.s = rpcMsg.sAgent;
                handler(workerContext, rpcMsg.attachData);
            }
            else
            {
                sLog.Error("executor", "executor {0} handle route rpc type {1} null.", this.mName, rpcMsg.rpcName);
            }
        }
コード例 #4
0
        private void HandlerRouteMsg(EventMsg eventMsg)
        {
            DataEventMsg dataMsg = (DataEventMsg)eventMsg;

            MsgHandler handler = null;

            if (msgHandlerMap.TryGetValue(dataMsg.typeID, out handler))
            {
                workerContext.s = dataMsg.sAgent;
                handler(workerContext, dataMsg.attchData);
            }
            else
            {
                sLog.Error("executor", "executor {0} handle route msg type {1} null.", this.mName, dataMsg.typeID);
            }
        }
コード例 #5
0
        public void Run()
        {
            isRunning = true;
            do
            {
                try {
                    tlsCtx.Value = workerContext;
                    EventMsg eventMsg = null;

                    if (!eConcurrQueue.TryTake(out eventMsg, 1))
                    {
                        continue;
                    }

                    switch (eventMsg.GetEventType())
                    {
                    case EventType.EVENT_ROUTER_MSG:
                        HandlerRouteMsg(eventMsg);
                        break;

                    case EventType.EVENT_WORKER_CLOSE:
                        HandlerCloseSignal(eventMsg);
                        break;

                    case EventType.EVENT_WORKER_ACTION:
                        HandlerActionEvent(eventMsg);
                        break;

                    case EventType.EVENT_ROUTE_RPC:
                        HandlerRouteRpc(eventMsg);
                        break;

                    default:
                        break;
                    }

                    timerManager.Execute();
                } catch (Exception ex) {
                    sLog.Error("executor", "executor {0} worker exception.", this.mName);
                    sLog.Error("executor", ex.Message);
                    sLog.Error("executor", ex.StackTrace);
                }
            } while (isRunning);
        }
コード例 #6
0
 public void Enqueue(EventMsg eventMsg)
 {
     eConcurrQueue.Add(eventMsg);
 }
コード例 #7
0
 private void HandlerCloseSignal(EventMsg eventMsg)
 {
     isRunning = false;
 }