예제 #1
0
        public BusinessModule CreateModule(string name, object args = null)
        {
            if (m_mapModules.ContainsKey(name))
            {
                return(null);
            }

            BusinessModule module = null;

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

            if (type != null)
            {
                Debug.Log(name + "   has created");
                module = Activator.CreateInstance(type) as BusinessModule;
            }

            else
            {
                module = new LuaModule(name);
            }

            m_mapModules.Add(name, module);

            //处理预监听事件
            if (m_mapPreListenEvents.ContainsKey(name))
            {
                EventTable tblEvent = m_mapPreListenEvents[name];
                m_mapPreListenEvents.Remove(name);

                module.SetEventTable(tblEvent);
            }

            module.Create(args);

            //处理缓存的消息
            if (m_mapCacheMessage.ContainsKey(name))
            {
                List <MessageObject> list = m_mapCacheMessage[name];

                for (int i = 0; i < list.Count; i++)
                {
                    MessageObject msgobj = list[i];
                    module.HandleMessage(msgobj.msg, msgobj.args);
                }

                m_mapCacheMessage.Remove(name);
            }

            return(module);
        }
예제 #2
0
 public void ReleaseModule(BusinessModule module)
 {
     if (module != null)
     {
         if (m_mapModule.ContainsKey(module.Name))
         {
             m_mapModule.Remove(module.Name);
             module.Release();
         }
         else
         {
         }
     }
 }
예제 #3
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 = GetPreListEventTable(target);
                evt = table.GetEvent(type);
            }
            return(evt);
        }
        /// <summary>
        /// 某个模块中的某个事件
        /// </summary>
        /// <param name="target">目标模块</param>
        /// <param name="type">目标事件</param>
        /// <returns></returns>
        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);
        }
예제 #5
0
        //==========
        public ModuleEvent Event(string target, string type)
        {
            ModuleEvent    moduleEvent = null;
            BusinessModule module      = GetModule(target);

            if (module != null)
            {
                moduleEvent = module.Event(type);
            }
            else
            {
                EventManager eventManager = GetPreListenEvents(target);
                moduleEvent = eventManager.GetEvent(type);
            }
            return(moduleEvent);
        }
        /// <summary>
        /// 向指定模块发送消息
        /// </summary>
        /// <param name="target">发送到目标模块的名</param>
        /// <param name="msg">消息名</param>
        /// <param name="args">消息参数</param>
        public void SendMessage(string target, string msg, params object[] args)
        {
            BusinessModule module = GetModule(target);

            if (module != null)//如果模块已经加载了就发送消息
            {
                module.HandleMessage(msg, args);
            }
            else//模块没有加载就保存到缓存一下等待加载的时候再发送
            {
                List <MessageObject> list   = GetCacheMessageList(target);
                MessageObject        msgobj = new MessageObject();
                msgobj.target = target;
                msgobj.msg    = msg;
                msgobj.args   = args;
                list.Add(msgobj);
            }
        }
예제 #7
0
        public void SendMessage(string target, string msg, params object[] args)
        {
            BusinessModule module = GetModule(target);

            if (module != null)
            {
                module.HandleMsg(msg, args);
            }
            else
            {
                List <MessageObject> msgList = GetCachedMsgList(target);
                MessageObject        msgObj  = new MessageObject();
                msgObj.target = target;
                msgObj.msg    = msg;
                msgObj.args   = args;
                msgList.Add(msgObj);
            }
        }
예제 #8
0
        public BusinessModule CreateModule(string name, object args = null)
        {
            if (moduleMaps.ContainsKey(name))
            {
                return(null);
            }
            BusinessModule module = null;
            Type           type   = Type.GetType(m_domain + "." + name);

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

            //handle pre listened events
            if (modulePreListenEvents.ContainsKey(name))
            {
                EventManager eventManager = modulePreListenEvents[name];
                modulePreListenEvents.Remove(name);
                module.SetEventManager(eventManager);
            }

            module.Create(args);

            //handle cached message
            if (cachedMessages.ContainsKey(name))
            {
                List <MessageObject> msgList = cachedMessages[name];
                foreach (MessageObject msgObj in msgList)
                {
                    module.HandleMsg(msgObj.msg, msgObj.args);
                }
                cachedMessages.Remove(name);
            }

            return(module);
        }
 public void ReleaseModule(BusinessModule module)
 {
     if (module != null)
     {
         if (m_mapModule.ContainsKey(module.Name))
         {
             this.Log("ReleaseModule() name = " + module.Name);
             m_mapModule.Remove(module.Name);
             module.Release();
         }
         else
         {
             this.LogError("ReleaseModule() 模块不是由ModuleManager创建的! name = " + module.Name);
         }
     }
     else
     {
         this.LogError("ReleaseModule() module = null!");
     }
 }
        /// <summary>
        /// 创建模块
        /// </summary>
        /// <param name="name">模块类名</param>
        /// <param name="args">参数可为空</param>
        /// <returns></returns>
        public BusinessModule CreateModule(string name, object args = null)
        {
            if (m_mapModule.ContainsKey(name))//存在就不能重复创建
            {
                return(null);
            }
            BusinessModule module = null;
            Type           type   = Type.GetType(m_domain + "." + name);   //通过名字反射获得这个类型

            if (type != null)                                              //类型存在
            {
                module = Activator.CreateInstance(type) as BusinessModule; //创建这个实例
            }
            else
            {
                module = new LuaModule(name); //不存在可能是lua模块
            }
            m_mapModule.Add(name, module);    //添加进管理器
            //处理预监听的事件
            if (m_mapPreListenEvents.ContainsKey(name))
            {
                EventTable tblEvent = m_mapPreListenEvents[name];
                m_mapPreListenEvents.Remove(name); //取出这个预监听事件
                module.SetEventTable(tblEvent);    //设置给这个模块
            }
            module.Create(args);
            //处理缓存的消息
            if (m_mapCacheMessage.ContainsKey(name))
            {
                List <MessageObject> list = m_mapCacheMessage[name];
                for (int i = 0; i < list.Count; i++)
                {
                    MessageObject msgobj = list[i];
                    module.HandleMessage(msgobj.msg, msgobj.args); //发送这个模块中预缓存所有消息
                }
                m_mapCacheMessage.Remove(name);                    //移除这个模块的消息
            }
            return(module);
        }