예제 #1
0
        private void InitPreListenEventsForModule(BusinessModule module)
        {
            if (m_mapPreListenEvents.ContainsKey(module.Name))
            {
                EventTable tblEvent = m_mapPreListenEvents[module.Name];
                m_mapPreListenEvents.Remove(module.Name);

                module.setEventTable(tblEvent);
            }
        }
예제 #2
0
        public void ReleaseModule(BusinessModule module)
        {
            if (module == null)
            {
                return;
            }

            if (m_mapModules.ContainsKey(module.Name))
            {
                m_mapModules.Remove(module.Name);
                module.Release();
            }
        }
예제 #3
0
        private void InitCacheMessageForModule(BusinessModule module)
        {
            if (m_mapCacheMessage.ContainsKey(module.Name))
            {
                List <MessageObject> list = m_mapCacheMessage[module.Name];
                if (list == null || list.Count == 0)
                {
                    return;
                }

                foreach (MessageObject msgObj in list)
                {
                    module.HandleMessage(msgObj.msg, msgObj.args);
                }
            }
        }
예제 #4
0
        private BusinessModule CreateModuleInstance(string name)
        {
            BusinessModule module = null;

            Type type = Type.GetType(m_domain + "." + name);

            if (type != null)
            {
                module = Activator.CreateInstance(type) as BusinessModule;
            }
            else
            {
                module = new LuaModule(name);
            }

            return(module);
        }
예제 #5
0
        //=================================================================================

        public ModuleEvent Event(string target, string type)
        {
            ModuleEvent    evt    = null;
            BusinessModule module = GetModule(target);

            if (module != null)
            {
                evt = module.Event(type);
            }
            else
            {
                EventTable table = GetPreListenEventTable(target);
                evt = table.GetEvent(type);
            }

            return(evt);
        }
예제 #6
0
        public void SendMessage(string target, string msg, params object[] args)
        {
            BusinessModule module = GetModule(target);

            if (module != null)
            {
                module.HandleMessage(msg, args);
            }
            else
            {
                MessageObject msgObj = new MessageObject();
                msgObj.target = target;
                msgObj.msg    = msg;
                msgObj.args   = args;

                GetCacheMessageList(target).Add(msgObj);
            }
        }
예제 #7
0
        public BusinessModule CreateModule(string name, object args = null)
        {
            if (m_mapModules.ContainsKey(name))
            {
                return(m_mapModules[name]);
            }

            BusinessModule module = CreateModuleInstance(name);

            m_mapModules.Add(name, module);

            // 处理预监听事件
            InitPreListenEventsForModule(module);

            module.Create(args);

            // 处理缓存的消息
            InitCacheMessageForModule(module);

            return(module);
        }