Exemplo n.º 1
0
        /// <summary>
        /// 获取所有正在请求加载资产关联的 的UI状态名
        /// </summary>
        /// <param name="uiStateName">返回UI状态名</param>
        public void GetUIState(ref JWArrayList <string> uiStateName)
        {
            for (int i = 0; i < _resourceRequesting.Count; i++)
            {
                LoadData loadData = _resourceRequesting[i];
                if (loadData.Data.Life == LifeType.UIState && !string.IsNullOrEmpty(loadData.Data.StateName) &&
                    uiStateName.IndexOf(loadData.Data.StateName, StringComparer.OrdinalIgnoreCase) == -1)
                {
                    uiStateName.Add(loadData.Data.StateName);
                }
            }

            for (int i = 0; i < _data.Count; i++)
            {
                AssetData data = _data[i];
                if (data.Priority == LoadPriority.Wait)
                {
                    continue;
                }

                if (data.Life == LifeType.UIState && !string.IsNullOrEmpty(data.StateName) &&
                    uiStateName.IndexOf(data.StateName, StringComparer.OrdinalIgnoreCase) == -1)
                {
                    uiStateName.Add(data.StateName);
                }
            }
        }
Exemplo n.º 2
0
 /// <summary>
 /// 开始事务
 /// </summary>
 /// <param name="ss"></param>
 public void BeginSession(IFSSession ss)
 {
     if (ss==null)
     {
         JW.Common.Log.LogE("IFS Service BeginSession nil Session");
         return;
     }
     //
     for (int i = _sessionProcessors.Count - 1; i >= 0; --i)
     {
         if (_sessionProcessors[i].Name.Equals(ss.Name))
         {
             JW.Common.Log.LogE("Repeat Session:" + ss.Name);
             return;
         }
     }
     //
     IFSSessionProcessor pp = IFSSessionProcessor.Create(ss);
     if (pp != null)
     {
         pp.gameObject.transform.parent = this.transform;
         _sessionProcessors.Add(pp);
         pp.BeginSession();
     }
 }
        /// <summary>
        /// 切换状态,并清空之前的状态
        /// </summary>
        /// <Param name="stateName">状态名</Param>
        /// <Param name="stateParam">状态参数</Param>
        public void ChangeState(string stateName, object stateParam = null)
        {
            if (string.IsNullOrEmpty(stateName))
            {
                return;
            }
            //正在切换
            if (_switchState)
            {
                JW.Common.Log.LogE("UIStateService.ChangeState : state is switching");
                return;
            }

            // 状态相同,无须跳转
            string oldStateName = _state.Count > 0 ? _state[_state.Count - 1].StateName : string.Empty;

            if (stateName.Equals(oldStateName, StringComparison.OrdinalIgnoreCase))
            {
                JW.Common.Log.LogD("UIStateService.ChangeState error - already in state {0}", stateName);
                return;
            }
            _switchState = true;
            // 跳转
            _state.Clear();
            StateData stateData;

            stateData.StateName = stateName;
            stateData.Param     = stateParam;
            _state.Add(stateData);
            AddStateHistory(stateName);

            SwitchState(UIStateChangeTypeChange, oldStateName, stateName, stateParam);

            _switchState = false;
        }
Exemplo n.º 4
0
        /// <summary>
        /// 添加事件接收器
        /// </summary>
        /// <param name="id">事件ID</param>
        /// <param name="instance">事件接收对象</param>
        /// <param name="methodName">事件接收函数名</param>
        public void AddEventHandler(uint id, object instance, string methodName)
        {
            if (instance == null || methodName == null)
            {
                return;
            }

            for (int i = 0; i < _eventHandler.Count; i++)
            {
                EventHandler h = _eventHandler[i];
                if (h.IsEqual(id, instance))
                {
                    return;
                }
            }

            EventHandler handler = new EventHandler();

            if (!handler.Create(id, instance, methodName))
            {
                JW.Common.Log.LogE("EventService.AddEventHandler error - id:{0} instance:{1} methodName:{2}", id, instance, methodName);
                return;
            }

            _eventHandler.Add(handler);
        }
Exemplo n.º 5
0
        /// <summary>
        /// 获取所有的UI状态名
        /// </summary>
        /// <param name="uiStateName">返回UI状态名</param>
        public void GetUIState(ref JWArrayList <string> uiStateName)
        {
            Dictionary <string, JWArrayList <BaseAsset> > .Enumerator enumerator = _assets.GetEnumerator();
            while (enumerator.MoveNext())
            {
                JWArrayList <BaseAsset> val = enumerator.Current.Value;
                if (val == null)
                {
                    continue;
                }

                for (int i = 0; i < val.Count; i++)
                {
                    BaseAsset ba = val[i];
                    if (ba == null || ba.BaseData.Life != LifeType.UIState || string.IsNullOrEmpty(ba.BaseData.StateName))
                    {
                        continue;
                    }

                    if (uiStateName.IndexOf(ba.BaseData.StateName, StringComparer.OrdinalIgnoreCase) == -1)
                    {
                        uiStateName.Add(ba.BaseData.StateName);
                    }
                }
            }
        }
Exemplo n.º 6
0
        /// <summary>
        /// 获得一个连接
        /// </summary>
        /// <param name="gateIp"></param>
        /// <param name="gatePort"></param>
        /// <param name="gateQueryRoute"></param>
        /// <returns></returns>
        public NetConnector GetConnector(string gateIp, int gatePort, string gateQueryRoute)
        {
            NetConnector cc = new NetConnector();

            cc.Initialize(gateIp, gatePort, gateQueryRoute);
            _connectors.Add(cc);
            return(cc);
        }
Exemplo n.º 7
0
        /// <summary>
        /// 创建Mediator
        /// </summary>
        /// <typeparam name="T">Mediator类型</typeparam>
        public T CreateMediator <T>() where T : UIMediator, new()
        {
            T mediator = new T();

            mediator.Create(this);

            _allMediator.Add(mediator);
            return(mediator);
        }
Exemplo n.º 8
0
        public ModuleBase Create <T>() where T : ModuleBase, new()
        {
            T module = new T();

            module.Create();

            _modules.Add(module);
            return(module);
        }
Exemplo n.º 9
0
        /// <summary>
        /// 创建窗口对象
        /// </summary>
        /// <typeparam name="T">对象类型</typeparam>
        /// <param name="usePool">是否使用对象池</param>
        /// <param name="customID">自定义ID</param>
        /// <param name="parameter">预制件初始化参数</param>
        /// <returns>预制件对象</returns>
        protected T CreateFormClass <T>(bool usePool, int customID = 0, object parameter = null) where T : UIFormClass, new()
        {
            T prefabClass = UIFormHelper.CreateFormClass <T>(usePool, this, customID, parameter);

            if (prefabClass == null)
            {
                JW.Common.Log.LogE("UIMediator.CreatePrefabClass : failed to create {0}", typeof(T).FullName);
                return(null);
            }

            _forms.Add(prefabClass);
            return(prefabClass);
        }
Exemplo n.º 10
0
        /// <summary>
        /// 添加工厂
        /// </summary>
        /// <param name="type">对象标识</param>
        /// <param name="factory">工厂</param>
        public void AddFactory(int type, IObjectFactory <T> factory)
        {
            for (int i = 0; i < _data.Count; i++)
            {
                if (_data[i].Type == type)
                {
                    return;
                }
            }

            Data data;

            data.Type    = type;
            data.Factory = factory;
            _data.Add(data);
        }
Exemplo n.º 11
0
        //------------------准备网络资源--------------------------
        public uint PrepareNetAssets(LuaTable prepareUrls, System.Action <float> progresHandler)
        {
            if (prepareUrls == null)
            {
                return(0);
            }
            NetAssetSession ss = new NetAssetSession();

            ss.SessionId = _currentId++;

            ss.PrepareNetAsset(prepareUrls, progresHandler);
            if (ss != null && (ss.IsOver == false))
            {
                _prepareSessions.Add(ss);
            }
            return(ss.SessionId);
        }
Exemplo n.º 12
0
 /// <summary>
 /// 开始一个本地文件列表检查 完整性
 /// </summary>
 /// <param name="sName"></param>
 /// <param name="localFileList"></param>
 /// <param name="handler"></param>
 public void BeginLocalChecker(string sName, string localFileList, IFSLocalCheckerDelegate handler)
 {
     for (int i = _localCheckers.Count - 1; i >= 0; --i)
     {
         if (_localCheckers[i].Name.Equals(sName))
         {
             JW.Common.Log.LogE("Repeat BeginLocalChecker:" + sName);
             return;
         }
     }
     IFSLocalChecker newChecker = IFSLocalChecker.Create(sName, localFileList,handler);
     if (newChecker != null)
     {
         newChecker.gameObject.transform.parent = this.transform;
         _localCheckers.Add(newChecker);
         newChecker.StartCheck();
     }
 }
Exemplo n.º 13
0
        /// <summary>
        /// 添加定帧回调
        /// </summary>
        /// <param name="interval">间隔帧数</param>
        /// <param name="repeat">是否重复</param>
        /// <param name="handler">回调接口</param>
        /// <returns>定帧ID(==0添加失败)</returns>
        public uint AddFrame(int interval, bool repeat, IScheduleHandler handler)
        {
            if (handler == null)
            {
                return(0);
            }

            Data data;

            data.ID       = _currentID++;
            data.Interval = interval;
            data.Remain   = interval;
            data.Repeat   = repeat;
            data.Handler  = handler;
            _frames.Add(data);

            return(data.ID);
        }
        /// <summary>
        /// 清理缓存的资源
        /// </summary>
        /// <param name="uiStateHistory">UI状态历史列表(=null标识没有UI状态)</param>
        public void ClearUIStateCache(JWArrayList <string> uiStateHistory)
        {
            if (_loader == null)
            {
                return;
            }

            _tempList.Clear();
            _tempList2.Clear();
            if (uiStateHistory != null)
            {
                _assetManager.GetCacheUIState(ref _tempList);
                _loader.GetUIState(ref _tempList);

                for (int i = uiStateHistory.Count - 1; i >= 0; i--)
                {
                    string stateName = uiStateHistory[i];
                    if (string.IsNullOrEmpty(stateName) || _tempList.IndexOf(stateName, StringComparer.OrdinalIgnoreCase) == -1)
                    {
                        continue;
                    }

                    _tempList2.Add(stateName);
                    if (_tempList2.Count == CacheUIStateCount)
                    {
                        break;
                    }
                }
            }

            _assetManager.ClearCache(_tempList2);
            _loader.ClearTask(_tempList2);

            if (AlwaysGc)
            {
                if (LuaGCHook != null)
                {
                    LuaGCHook(true);
                }
                ResService.GetInstance().UnloadUnusedAssets();
                return;
            }
        }
Exemplo n.º 15
0
        /// 游戏更新检查后后启动
        public void StartAfterUpdate(Action <bool> allCompletedCallback)
        {
            _allCompletedCallback = allCompletedCallback;
#if USE_PACK_RES
            if (ResService.GetInstance().PackConfig == null)
            {
                JW.Common.Log.LogE("Preloader.StartAfterUpdate : resource initialize failed");
                return;
            }
            //
            _bundleFiles   = BundleMediator.GetInstance().GetPreloadBundles();
            _bundleLoading = false;

            string filename = "main_shaders.ab";
            _shaderBundle = BundleService.GetInstance().GetBundle(filename);
            if (_shaderBundle == null)
            {
                JW.Common.Log.LogE("Preloader.StartAfterUpdate : failed to get shader bundle");
            }

            ResPackInfo pi = ResService.GetInstance().PackConfig.GetPackInfo(filename);
            if (pi == null)
            {
                _shaderFilename = new JWArrayList <string>(0);
            }
            else
            {
                _shaderFilename = new JWArrayList <string>(pi.Resources.Count);
                for (int i = 0; i < pi.Resources.Count; i++)
                {
                    _shaderFilename.Add(pi.Resources[i].Path);
                }
            }
#else
            _bundleFiles    = new JWObjList <string>(0);
            _shaderBundle   = null;
            _shaderFilename = new JWArrayList <string>(0);
#endif

            //真正的开始预加载协成
            StartCoroutine(PreloadCoroutine());
        }
Exemplo n.º 16
0
        /// <summary>
        /// 添加定时回调
        /// </summary>
        /// <param name="interval">定时器间隔,单位:ms</param>
        /// <param name="repeat">是否重复触发</param>
        /// <param name="handler">回调接口</param>
        /// <returns>定时器ID(==0添加失败)</returns>
        public uint AddTimer(int interval, bool repeat, IScheduleHandler handler)
        {
            if (interval <= 0 || handler == null)
            {
                return(0);
            }

            interval *= 100;

            Data data;

            data.ID       = _currentID++;
            data.Interval = interval;
            data.Remain   = interval;
            data.Repeat   = repeat;
            data.Handler  = handler;
            _timers.Add(data);

            return(data.ID);
        }
        private void AddStateHistory(string stateName)
        {
            if (string.IsNullOrEmpty(stateName))
            {
                return;
            }

            for (int i = 0; i < _stateHistory.Count; i++)
            {
                if (_stateHistory[i].Equals(stateName, StringComparison.OrdinalIgnoreCase))
                {
                    _stateHistory.RemoveAt(i);
                    break;
                }
            }
            _stateHistory.Add(stateName);

            if (_stateHistory.Count > 100)
            {
                _stateHistory.RemoveAt(0);
            }
        }
        /// <summary>
        /// 添加Mediator
        /// </summary>
        /// <param name="mediator">mediaotr</param>
        /// <param name="stateName">mediator所处的状态名数组</param>
        public void AddMediator(UIMediator mediator, string[] stateName)
        {
            if (mediator == null)
            {
                return;
            }

            for (int i = 0; i < _mediator.Count; i++)
            {
                if (_mediator[i].Mediator == mediator)
                {
                    JW.Common.Log.LogE("UIStateService.AddMediator error - duplicate mediator {0}", mediator.GetType().FullName);
                    return;
                }
            }

            MediatorData data;

            data.Mediator  = mediator;
            data.StateName = stateName;

            _mediator.Add(data);
        }
Exemplo n.º 19
0
        /// <summary>
        /// 添加更新
        /// </summary>
        /// <param name="handler">更新回调接口</param>
        /// <param name="isFirst">添加到List头部,目前用于Time更新,其余情况不要使用</param>
        /// <returns></returns>
        public void AddUpdate(IScheduleHandler handler, bool isFirst = false)
        {
            if (handler == null)
            {
                return;
            }

            for (int i = 0; i < _updates.Count; i++)
            {
                if (_updates[i] == handler)
                {
                    return;
                }
            }

            if (isFirst)
            {
                _updates.Insert(0, handler);
            }
            else
            {
                _updates.Add(handler);
            }
        }
Exemplo n.º 20
0
        /// 注册下载文件
        public uint RegisteFileHttpDownload(string url, string filePath, HttpFileSessionDelegate handler = null)
        {
            if (string.IsNullOrEmpty(url) || (filePath == null))
            {
                JW.Common.Log.LogE("RegisteFileHttpDownload:Arg Error");
                return(0);
            }
            if ((!url.Contains("http://")) && (!url.Contains("https://")))
            {
                url = "http://" + url;
            }

            HttpFileSession hf = new HttpFileSession();

            hf.Url = url;
            hf.DownloadFilePath = filePath;
            hf.Id      = _currentId++;
            hf.Handler = handler;
            if (hf != null && (hf.IsOver == false))
            {
                _httpSessions.Add(hf);
            }
            return(hf.Id);
        }
        //切换状态
        private void SwitchState(int changeType, string oldStateName, string newStateName, object stateParam)
        {
            // 新状态信息应用
            if (string.IsNullOrEmpty(newStateName))
            {
                JW.Common.Log.LogE("UIStateService.ChangeState error stateName");
                return;
            }

            // 通知Mediator
            _switchMediatorData.Clear();
            for (int i = 0; i < _mediator.Count; i++)
            {
                MediatorData mediatorData = _mediator[i];
                if (mediatorData.Mediator == null)
                {
                    continue;
                }

                bool oldState = mediatorData.IsBelongsState(oldStateName);
                bool newState = mediatorData.IsBelongsState(newStateName);
                if (oldState == newState)
                {
                    if (newState)
                    {
                        _switchMediatorData.Add(new KeyValuePair <UIMediator, int>(mediatorData.Mediator, 0));
                    }
                    continue;
                }

                if (oldState)
                {
                    _switchMediatorData.Add(new KeyValuePair <UIMediator, int>(mediatorData.Mediator, 1));
                }

                if (newState)
                {
                    _switchMediatorData.Add(new KeyValuePair <UIMediator, int>(mediatorData.Mediator, 2));
                }
            }
            // out
            for (int i = 0; i < _switchMediatorData.Count; i++)
            {
                KeyValuePair <UIMediator, int> data = _switchMediatorData[i];
                if (data.Value == 1)
                {
                    data.Key.ChangeState(changeType, false, oldStateName, newStateName, null);
                }
            }

            if (Hook != null)
            {
                Hook(1, changeType, oldStateName, newStateName, stateParam);
            }


            //清理资源
            if (StateService.IsValidate())
            {
                AssetService.GetInstance().ClearUIStateCache(_stateHistory);
            }

            for (int i = 0; i < _switchMediatorData.Count; i++)
            {
                KeyValuePair <UIMediator, int> data = _switchMediatorData[i];
                if (data.Value == 2)
                {
                    data.Key.ChangeState(changeType, true, oldStateName, newStateName, stateParam);
                }
            }

            if (Hook != null)
            {
                Hook(2, changeType, oldStateName, newStateName, stateParam);
            }

            //stay
            for (int i = 0; i < _switchMediatorData.Count; i++)
            {
                KeyValuePair <UIMediator, int> data = _switchMediatorData[i];
                if (data.Value == 0)
                {
                    data.Key.RefreshState(changeType, oldStateName, newStateName, stateParam);
                }
            }

            if (Hook != null)
            {
                Hook(0, changeType, oldStateName, newStateName, stateParam);
            }

            JW.Common.Log.LogD("<color=yellow>UIStateService</color>--->Switch UI State from {0} to {1}<----", oldStateName, newStateName);
        }
Exemplo n.º 22
0
        private IEnumerator AsynchronousLoad_LoadAssetBundle(JWObjList <string> stringList, JWArrayList <AssetData> assetDataList)
        {
            while (true)
            {
                stringList.Clear();
                assetDataList.Clear();
                for (int i = 0; i < _data.Count;)
                {
                    AssetData data = _data[i];
                    if (data.Priority != _loadAssetBundlePriority)
                    {
                        ++i;
                        continue;
                    }

                    _data.RemoveAt(i);

                    if (_assetManager.GetCacheCount(data.Name) >= data.Count)
                    {
                        if (data.Callback != null)
                        {
                            assetDataList.Add(data);
                        }
                        continue;
                    }

                    LoadData loadData;
                    loadData.Data            = data;
                    loadData.LoadBundleState = LoadStateLoading;
                    loadData.Request         = null;

                    bool insert = false;
                    for (int j = _resourceRequesting.Count - 1; j >= 0; --j)
                    {
                        if (_resourceRequesting[j].Data.Priority <= data.Priority)
                        {
                            _resourceRequesting.Insert(j + 1, loadData);
                            insert = true;
                            break;
                        }
                    }

                    if (!insert)
                    {
                        _resourceRequesting.Insert(0, loadData);
                    }

                    stringList.Add(data.Filename);

                    if (_loadAssetBundlePriority >= LoadPriority.Preprocess)
                    {
                        break;
                    }
                }

                yield return(null);

                if (stringList.Count > 0)
                {
#if USE_PACK_RES
                    BundleMediator.GetInstance().LoadBundle(stringList, OnBundleLoadCompleted);
#else
                    OnBundleLoadCompleted(stringList, true);
#endif
                }

                yield return(null);

                for (int i = 0; i < assetDataList.Count; i++)
                {
                    AssetData data = assetDataList[i];
                    if (data.Callback != null)
                    {
                        data.Callback.OnLoadAssetCompleted(data.Name, AssetLoadResult.Success, null);
                        yield return(null);
                    }
                }

                yield return(InstructionEnd);
            }
        }
Exemplo n.º 23
0
        /// <summary>
        /// 装载
        /// </summary>
        /// <param name="data">资产数据</param>
        /// <param name="clone">是否Clone一个副本</param>
        /// <returns>资产</returns>
        public BaseAsset Load(ref AssetData data, bool clone)
        {
            if (string.IsNullOrEmpty(data.Filename))
            {
                JW.Common.Log.LogE("AssetManager.Load : invalid parameter");
                return(null);
            }

            //缓存找
            BaseAsset ba = _cache.GetAsset(data.Name);

            if (ba != null)
            {
                //缓存复制
                if (clone)
                {
                    BaseAsset cloneBa = AssetProcessor.ProcessClone(ba);
                    _cache.AddAsset(ba);
                    ba = cloneBa;
                }

                if (ba != null)
                {
                    if (!AssetProcessor.ProcessCreate(ba))
                    {
                        JW.Common.Log.LogE("AssetManager.CreateAsset : failed to process create - {0}", data.Name);
                        ba.BaseData.Callback = null;
                        ba.BaseData.Factory  = null;
                        ba.Resource          = null;
                        data.Factory.DestroyObject(ba);
                        return(null);
                    }
                    _usingAsset.Add(ba);
                }
                return(ba);
            }

            //没在缓存 同步创建
            ResObj resource = ResService.GetResource(data.Filename);

            if (resource == null)
            {
                JW.Common.Log.LogE("AssetManager.Load : failed to load resource - {0}", data.Filename);
                return(null);
            }

            if (resource.Content == null)
            {
                JW.Common.Log.LogE("AssetManager.Load : failed to load resource - {0}", data.Filename);

                ResService.UnloadResource(resource);
                return(null);
            }

            ba = CreateAsset(data, resource);
            if (ba == null)
            {
                ResService.UnloadResource(resource);
                return(null);
            }

            if (clone)
            {
                BaseAsset cloneBa = AssetProcessor.ProcessClone(ba);
                _cache.AddAsset(ba);
                ba = cloneBa;
            }

            if (ba != null)
            {
                _usingAsset.Add(ba);
            }

            return(ba);
        }