/// <summary>
        /// 获取到某个资源
        /// </summary>
        /// <param name="path">资源路径</param>
        /// <param name="onSucc">成功时的回调</param>
        /// <param name="onFail">失败时的回调</param>
        /// <param name="resType">资源类型,默认是UnKnow,如果是在bundle模式下,并且传入Unknow类型,会改成AssetBundle类型,如果text或AudioClip不打成bungle,必须传入类型,获取资源使用特定的方法</param>
        /// <returns>返回当前加载的Resource</returns>
        public Resource GetResource(string path, ResourceHandler onSucc = null, ResourceHandler onFail = null,
                                    ResourceType resType = ResourceType.UnKnow)
        {
            if (string.IsNullOrEmpty(path))
            {
                CLog.LogError("[GetResource]ResName can not is null!");
                return(null);
            }
            Resource res;

            _mapRes.TryGetValue(GetRealResourcePath(path), out res);
            if (res != null)
            {
                if (res.isDone)
                {
                    if (res.isSucc && onSucc != null)
                    {
                        ResourceHandler tempOnSucc = onSucc;
                        onSucc = null;
                        tempOnSucc.Invoke(res, path);
                        tempOnSucc = null;
                    }
                }
                else
                {
                    AddListener(res, path, onSucc, onFail);
                }
                return(res);
            }
            res          = new Resource();
            res.realPath = GetRealResourcePath(path);
            res.resType  = (!DirectLoadMode && resType == ResourceType.UnKnow) ? ResourceType.AssetBundle : resType;

            //这个需要在加载依赖之前放入字典中(如果出现循环引用时需要直接获取)
            _mapRes.Add(res.realPath, res);
            res.Retain();

            //获取到当前资源的依赖资源(可能没法保证顺序,所以拿的时候需要保证所有依赖资源都已经加载好)
            if (!DirectLoadMode && res.resType == ResourceType.AssetBundle)
            {
                string[] listDependResPath = GetDependResPath(path);
                if (listDependResPath != null && listDependResPath.Length > 0)
                {
                    List <Resource> listDependRes = new List <Resource>();
                    for (int i = 0; i < listDependResPath.Length; i++)
                    {
                        //加载依赖资源
                        Resource dependRes = GetResource(listDependResPath[i]);
                        listDependRes.Add(dependRes);
                    }
                    res.SetDependsRes(listDependRes);
                }
            }
            //真正加载当前资源
            //_mapRes.Add(res.realPath, res);
            //res.Retain();
            AddListener(res, path, onSucc, onFail);
            _resLoader.Load(res);
            return(res);
        }
Exemple #2
0
        public bool RunFrameData(int frameIndex)
        {
            if (Status != SocketClientStatus.Connected)
            {
                return(false);
            }
            if (frameIndex >= m_cFrameData.recvFrameIndex)
            {
                return(false);
            }
            var lst = m_cFrameData.GetFrameData(frameIndex);

            if (lst != null)
            {
                for (int i = 0; i < lst.Count; i++)
                {
                    try
                    {
                        HandleRecvData(lst[i]);
                    }
                    catch (Exception e)
                    {
                        CLog.LogError("handle frame data error,opcode=" + lst[i].recvOpcode + ",\n" + e.ToString());
                    }
                }
            }
            m_cFrameData.RemoveFrameData(frameIndex);
            return(true);
        }
Exemple #3
0
 public void LoadList(List <string> names, Action <MultiResourceLoader> OnComplete = null, Action <Resource> OnProgress = null, ResourceType resType = ResourceType.UnKnow)
 {
     if (names == null || names.Count == 0)
     {
         return;
     }
     for (int i = 0; i < names.Count; i++)
     {
         if (_loadList.Contains(names[i]))
         {
             CLog.LogError("Can not has same name in one MultiResourceLoader");
             return;
         }
         else
         {
             _loadList.Add(names[i]);
         }
     }
     this._OnComplete = OnComplete;
     this._OnProgress = OnProgress;
     for (int i = 0; i < names.Count; i++)
     {
         _resourceContainer.GetResource(names[i], OnFinish, OnFinish, resType);
     }
 }
Exemple #4
0
 public void Open(string name, ViewParam param = null)
 {
     if (!_views.ContainsKey(name))
     {
         string clsName = name + "Controller";
         Type   type    = Type.GetType(clsName);
         if (type == null)
         {
             type = typeof(BaseViewController);
         }
         object obj = Activator.CreateInstance(type);
         if (obj == null)
         {
             CLog.LogError("Cannot find class with type [" + type + "].");
             return;
         }
         BaseViewController controller = obj as BaseViewController;
         controller.viewName = name;
         controller.viewPath = GetViewPath(name);
         //_views.Add(name, controller);
         m_cContainer.Add(controller, param);
     }
     else
     {
         _views[name].Open(param);
     }
 }
 private void Update()
 {
     if (m_dicLoadingQueue.Count == 0)
     {
         return;
     }
     foreach (var item in m_dicLoadingQueue)
     {
         if (item.Key.isDone)
         {
             m_dicLoadedQueue.Add(item.Key, item.Value);
         }
     }
     foreach (var item in m_dicLoadedQueue)
     {
         item.Value.isDone = true;
         if (item.Key.asset == null)
         {
             item.Value.errorTxt = "Load resource [" + item.Value.realPath + "] fail!";
             CLog.LogError(item.Value.errorTxt);
         }
         else
         {
             item.Value.SetDirectObject(item.Key.asset);
         }
         m_dicLoadingQueue.Remove(item.Key);
         OnDone(item.Value);
     }
     m_dicLoadedQueue.Clear();
 }
Exemple #6
0
 private void Update()
 {
     if (m_dicLoadingQueue.Count == 0)
     {
         return;
     }
     foreach (var item in m_dicLoadingQueue)
     {
         if (item.Key.isDone)
         {
             m_dicLoadedQueue.Add(item.Key, item.Value);
         }
     }
     foreach (var item in m_dicLoadedQueue)
     {
         item.Value.isDone = true;
         if (item.Key.assetBundle != null)
         {
             item.Value.SetBundle(item.Key.assetBundle);
         }
         else
         {
             string errorTxt = "Load resource [" + GetInResPath(item.Value) + "] fail!";
             item.Value.errorTxt = errorTxt;
             CLog.LogError(errorTxt);
         }
         m_dicLoadingQueue.Remove(item.Key);
         OnDone(item.Value);
     }
     m_dicLoadedQueue.Clear();
 }
        private void Update()
        {
            if (m_dicLoadingQueue.Count == 0)
            {
                return;
            }
            foreach (var item in m_dicLoadingQueue)
            {
                if (item.Key.isDone)
                {
                    m_dicLoadedQueue.Add(item.Key, item.Value);
                }
            }
            foreach (var item in m_dicLoadedQueue)
            {
                item.Value.isDone = true;
                if (string.IsNullOrEmpty(item.Key.error))
                {
                    item.Value.SetWWWObject(item.Key);
                }
                else
                {
                    item.Value.errorTxt = item.Key.error;

                    CLog.LogError("Load resource [" + item.Key.url + "] fail!");
                }
                m_dicLoadingQueue.Remove(item.Key);
                item.Key.Dispose();
                OnDone(item.Value);
            }
            m_dicLoadedQueue.Clear();
        }
 /// <summary>
 /// 复制整个目录,包含子目录和文件
 /// </summary>
 public bool CopyDirectory(string srcDir, string destDir)
 {
     try
     {
         if (!Directory.Exists(srcDir))
         {
             CLog.LogError("CopyDirectory Error, srcDir not exist!srcDir=" + srcDir);
             return(false);
         }
         if (!Directory.Exists(destDir))
         {
             Directory.CreateDirectory(destDir);
         }
         DirectoryInfo srcDirInfo = new DirectoryInfo(srcDir);
         FileInfo[]    files      = srcDirInfo.GetFiles("*", SearchOption.TopDirectoryOnly);
         foreach (FileInfo file in files)
         {
             file.CopyTo(Path.Combine(destDir, file.Name));
         }
         DirectoryInfo[] directories = srcDirInfo.GetDirectories();
         foreach (DirectoryInfo dir in directories)
         {
             CopyDirectory(Path.Combine(srcDir, dir.Name), Path.Combine(destDir, dir.Name));
         }
         return(true);
     }
     catch (Exception e)
     {
         CLog.LogError("CopyDirectory Error!srcDir=" + srcDir + ",destDir=" + destDir + ",msg=" + e.Message + ",StackTrace=" + e.StackTrace);
         return(false);
     }
 }
 private void OnResLoadCache(Resource res, string path)
 {
     if (res.isSucc)
     {
         ResourceObjectQueue resQueue = m_dicGO[path];
         resQueue.prefab = res.GetAsset(path);
         resQueue.isDone = true;
         List <CacheCallbackStruct> lstCallbackStruct = null;
         if (m_dicCacheCallback.TryGetValue(path, out lstCallbackStruct))
         {
             while (lstCallbackStruct.Count > 0)
             {
                 var callbackStruct = lstCallbackStruct[0];
                 lstCallbackStruct.RemoveAt(0);
                 if (!callbackStruct.isPrefab)
                 {
                     for (int i = 0; i < callbackStruct.count; i++)
                     {
                         var go = GetGameObject(resQueue.prefab, path);
                         SaveObject(path, go);
                     }
                 }
                 callbackStruct.callback.Invoke(path);
             }
         }
     }
     else
     {
         CLog.LogError("加载GameObject资源" + path + "失败");
     }
 }
Exemple #10
0
 public void RegistUIPath(string viewName, string prefabPath)
 {
     if (m_dicPath.ContainsKey(viewName))
     {
         CLog.LogError("已注册viewName=" + viewName + "的配置");
         return;
     }
     m_dicPath.Add(viewName, prefabPath);
 }
Exemple #11
0
        protected string GetViewPath(string viewName)
        {
            string path = "";

            if (!m_dicPath.TryGetValue(viewName, out path))
            {
                CLog.LogError("找不到viewName=" + viewName + "的UI配置");
            }
            return(path);
        }
Exemple #12
0
 private bool CheckReceiveZero(int count)
 {
     if (count == 0)
     {
         CLog.LogError("SocketReceiver receive count = 0");
         m_bLostConnect = true;
         return(true);
     }
     return(false);
 }
 private void OnResLoad(Resource res, string path)
 {
     if (res.isSucc)
     {
         m_lstAsyncQueue.AddLast(LoadAssetAndCallback(res, path));
     }
     else
     {
         CLog.LogError("加载GameObject资源" + path + "失败");
     }
 }
Exemple #14
0
 public override void SendNetData(NetSendData data)
 {
     if (m_cSender != null)
     {
         m_cSender.SendData(data);
     }
     else
     {
         CLog.LogError("socket not connected,can not send net Data!");
     }
 }
Exemple #15
0
 public override int RecvNetData(Queue <NetRecvData> queue)
 {
     if (m_cReceiver != null)
     {
         m_cReceiver.RecvNetData(queue);
     }
     else
     {
         CLog.LogError("socket not connected,can not recv net Data!");
     }
     return(0);
 }
Exemple #16
0
        private void OnFinish(Resource res)
        {
            if (res.isSucc)
            {
                res.Retain();
                _mapRes.Add(res.path, res);
            }
            else
            {
                CLog.LogError("[MultiResourceLoader] load " + res.path + " fail!");
            }
            _finishCount++;
            List <Action <Resource> > list;

            _mapTryGetRes.TryGetValue(res.path, out list);
            if (list != null)
            {
                _mapTryGetRes.Remove(res.path);
                for (int i = 0; i < list.Count; i++)
                {
                    list[i].Invoke(res);
                }
            }
            if (_OnProgress != null)
            {
                Action <Resource> tempAction = _OnProgress;
                tempAction.Invoke(res);
            }
            if (_finishCount == _loadList.Count)
            {
                foreach (var item in _mapTryGetRes)
                {
                    Resource tempRes;
                    _mapRes.TryGetValue(item.Key, out tempRes);
                    if (tempRes == null)
                    {
                        continue;
                    }
                    for (int i = 0; i < item.Value.Count; i++)
                    {
                        item.Value[i].Invoke(tempRes);
                    }
                }
                _mapTryGetRes.Clear();
                if (_OnComplete != null)
                {
                    Action <MultiResourceLoader> tempAction = _OnComplete;
                    _OnComplete = null;
                    tempAction.Invoke(this);
                }
            }
        }
        private void OnLoadAsset(string path, UnityEngine.Object prefab)
        {
            if (prefab == null)
            {
                CLog.LogError("加载资源path=" + path + "的预制为空");
            }
            ResourceObjectQueue resQueue;

            if (m_dicGO.TryGetValue(path, out resQueue))
            {
                resQueue.prefab = prefab;
            }
        }
Exemple #18
0
        private bool CheckEndToPoint(string ip, int port, out IPEndPoint point)
        {
            point = null;
            IPAddress ipAddress;

            if (IPAddress.TryParse(ip, out ipAddress))
            {
                point = new IPEndPoint(ipAddress, port);
                return(true);
            }
            CLog.LogError("ip=" + ip + ",port=" + port + " can not arrived!(or format error)");
            return(false);
        }
 private GameObject GetGameObject(UnityEngine.Object prefab, string path)
 {
     try
     {
         GameObject go = (GameObject)GameObject.Instantiate(prefab);
         return(go);
     }
     catch (Exception e)
     {
         CLog.LogError("路径为" + path + "传入预设为空");
     }
     return(null);
 }
Exemple #20
0
        public void DestroyEffectGO(GameObject go)
        {
            EffectCtrl effectCtrl = go.GetComponent <EffectCtrl>();

            if (effectCtrl != null)
            {
                DestroyEffect(effectCtrl);
            }
            else
            {
                CLog.LogError("销毁特效的对象上必须有EffectCtrl脚本");
            }
        }
Exemple #21
0
        public static void AddUIEffect(this Transform go, GameObject effect)
        {
            go.gameObject.AddChildToParent(effect);
#if UNITY_EDITOR
            Renderer[] renders = effect.GetComponentsInChildren <Renderer>();
            for (int i = 0; i < renders.Length; i++)
            {
                if (renders[i].material.renderQueue != 3000 || renders[i].sortingOrder != 0 || renders[i].sortingLayerName != "Default")
                {
                    CLog.LogError("特效name=" + effect.name + "中的render=" + renders[i].gameObject.name + "渲染层次不符合法,请美术重新修改");
                }
            }
#endif
        }
 public void RemoveFile(string path)
 {
     try
     {
         if (!File.Exists(path))
         {
             return;
         }
         File.Delete(path);
     }catch (Exception e)
     {
         CLog.LogError("Remove File Error!path=" + path);
     }
 }
Exemple #23
0
        protected void OnTick(float dt)
        {
            _isUpdating = true;
//			CLog.Log ("_listSchedulerEntity.count:"+_listSchedulerEntity.Count);
            for (int i = 0; i < _listSchedulerEntity.Count; i++)
            {
                SchedulerEntity entity = _listSchedulerEntity [i];
                if (entity.state == SchedulerEntityState.Error)
                {
                    continue;
                }
                if (entity.state == SchedulerEntityState.ToDoAction)
                {
                    try
                    {
                        if (!entity.OnTick(dt))
                        {
                            entity.state = SchedulerEntityState.ToRemove;

                            SchedulerEntity RemoveEntity = _pool.GetObject();
                            RemoveEntity.Init(entity.handler);
                            RemoveEntity.state = SchedulerEntityState.ToRemove;
                            _listOperateEntity.Add(RemoveEntity);
                        }
                    }
                    //捕获异常,防止有异常后整个scheduler全部卡死
                    catch (System.Exception ex)
                    {
                        entity.state = SchedulerEntityState.Error;
                        CLog.LogError(ex.Message + "\n" + ex.StackTrace);
                    }
                }
            }
            _isUpdating = false;
            for (int i = 0; i < _listOperateEntity.Count; i++)
            {
                SchedulerEntity entity = _listOperateEntity [i];
                if (entity.state == SchedulerEntityState.ToAdd)
                {
                    AddScheduler(entity.handler, entity.delay, entity.times);
                }
                else if (entity.state == SchedulerEntityState.ToRemove)
                {
                    RemoveScheduler(entity.handler);
                }
                _pool.SaveObject(entity);
            }
            _listOperateEntity.Clear();
        }
Exemple #24
0
 private void OnResourceDone(Resource res)
 {
     if (res.isSucc)
     {
         List <ResourceHandlerStruct> succList;
         _succCallbacks.TryGetValue(res, out succList);
         _succCallbacks.Remove(res);
         if (succList != null)
         {
             while (succList.Count > 0)
             {
                 var callbackStruct = succList[0];
                 succList.RemoveAt(0);
                 callbackStruct.callback.Invoke(res, callbackStruct.path);
             }
         }
         res.Release();
     }
     else
     {
         //失败的话,将资源先移除掉
         if (res.refCount > 1)
         {
             CLog.LogError("DestroyResource[resPath=" + res.realPath + "],RefCount>1.");
         }
         else
         {
             _mapRes.Remove(res.realPath);
         }
         List <ResourceHandlerStruct> failList;
         _failCallbacks.TryGetValue(res, out failList);
         _failCallbacks.Remove(res);
         if (failList != null)
         {
             while (failList.Count > 0)
             {
                 var callbackStruct = failList[0];
                 failList.RemoveAt(0);
                 callbackStruct.callback.Invoke(res, callbackStruct.path);
             }
         }
         res.Release();
         if (res.refCount <= 0)
         {
             res.DestroyResource();
         }
     }
 }
 public bool Remove(IDynamicObj obj)
 {
     if (RemoveObj(obj))
     {
         if (OnRemove != null)
         {
             OnRemove(obj, null);
         }
         return(true);
     }
     else
     {
         CLog.LogError("移除" + obj.key + "失败!");
     }
     return(false);
 }
Exemple #26
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="moveRadius">anchorPosition的宽度为准</param>
 /// <param name="fixedBase"></param>
 public void Init(float moveRadius, bool fixedBase)
 {
     m_defaultBasePosition = mBase.anchoredPosition;
     m_fMoveRadius         = moveRadius;
     m_bFixedBase          = fixedBase;
     //关闭遥感的Raycast
     ForbidRaycastTarget(transform as RectTransform);
     //关闭mEffectTransfrom与mBase与mMove下的碰撞检测
     //ForbidRaycastTarget(mEffectTransfrom);
     //ForbidRaycastTarget(mBase);
     //ForbidRaycastTarget(mMove);
     if (mBase.parent != mMove.parent)
     {
         CLog.LogError("mBase与mMove必须在相同父节点下");
     }
 }
        public void Update(object param = null)
        {
            m_bIsUpdating = true;
            int count = m_lstEntity.Count;

            for (int i = 0; i < count; i++)
            {
                var entity = m_lstEntity[i];
                if (entity.state == DCState.Error)
                {
                    continue;
                }
                if (entity.state == DCState.ToDoAction)
                {
                    try
                    {
                        if (OnUpdate != null)
                        {
                            OnUpdate(entity.obj, param);
                        }
                    }
                    catch (System.Exception ex)
                    {
                        entity.state = DCState.Error;
                        Remove(entity.obj);
                        CLog.LogError(ex.Message + "\n" + ex.StackTrace);
                    }
                }
            }
            m_bIsUpdating = false;
            int count1 = m_lstOperateEntity.Count;

            for (int i = 0; i < count1; i++)
            {
                var entity = m_lstOperateEntity[i];
                if (entity.state == DCState.ToAdd)
                {
                    AddObj(entity.obj, entity.param);
                }
                else if (entity.state == DCState.ToRemove)
                {
                    RemoveObj(entity.obj);
                }
                m_cEntityPool.SaveObject(entity);
            }
            m_lstOperateEntity.Clear();
        }
Exemple #28
0
 private void OnLoadManifest(Resource res, string path)
 {
     if (res.isSucc)
     {
         m_cManifest = (AssetBundleManifest)res.GetAsset(null);
     }
     else
     {
         CLog.LogError("AssetBundleFile文件初始化失败!");
     }
     if (m_cCallback != null)
     {
         var callback = m_cCallback;
         m_cCallback = null;
         callback.Invoke(res.isSucc);
     }
 }
Exemple #29
0
 public override void DisConnect()
 {
     try {
         if (m_cSocket != null)
         {
             if (m_cAsyncResult != null)
             {
                 m_cSocket.EndConnect(m_cAsyncResult);
             }
             if (Status == SocketClientStatus.Connected)
             {
                 m_cSocket.Shutdown(SocketShutdown.Both);
             }
         }
     }catch (Exception e)
     {
         CLog.LogError(e.Message + "\n" + e.StackTrace);
     }
     finally
     {
         try
         {
             if (m_cSocket != null)
             {
                 m_cSocket.Close();
             }
         }
         catch (Exception e)
         {
             CLog.LogError(e.Message + "\n" + e.StackTrace);
         }
         if (m_cSender != null)
         {
             m_cSender.Dispose();
             m_cSender = null;
         }
         if (m_cReceiver != null)
         {
             m_cReceiver.Dispose();
             m_cReceiver = null;
         }
         m_cSocket      = null;
         m_cAsyncResult = null;
         base.DisConnect();
     }
 }
Exemple #30
0
 void Update()
 {
     for (int i = 0; i < m_arrChannel.Length; i++)
     {
         try
         {
             if (m_arrChannel[i] != null)
             {
                 m_arrChannel[i].OnUpdate();
             }
         }
         catch (Exception e)
         {
             CLog.LogError(e.Message + "\n" + e.StackTrace);
         }
     }
 }