Beispiel #1
0
    IEnumerator PrepareRemote(string path, int count)
    {
        OutResult <List <GameObject> > result = new OutResult <List <GameObject> >();

        yield return(StartCoroutine(Service.bundle.Instantiate(path, count, result)));

        for (int i = 0; i < result.value.Count; i++)
        {
            GameObject itemObj = result.value[i];
            if (itemObj == null)
            {
                continue;
            }

            GoItem item = itemObj.GetComponent <GoItem>();
            if (item == null)
            {
                logger.LogError("Doesn't have GoItem:" + path);
            }

            MatchParent(item);
            item.transform.localPosition = Vector3.up * 9999;
            itemObj.SetActive(true);
            item.resourcePath = path;
            item.Prepare();
            Return(item, prepareTime);
        }
    }
Beispiel #2
0
    IEnumerator MakeRemote(string path, OutResult <GameObject> result)
    {
#if !UNITY_EDITOR
        if (Service.bundle.IsRemoteResource(path) == false)
        {
            logger.LogError("It is not a remote resource:" + path);
            yield break;
        }
#endif

        yield return(StartCoroutine(Service.bundle.Instantiate(path, result)));

        if (result.value == null)
        {
            yield break;
        }

        GameObject itemObj = result.value;
        GoItem     item    = itemObj.GetComponent <GoItem>();
        if (item == null)
        {
            logger.LogError("Doesn't have GoItem:" + path);
            yield break;
        }
        item.resourcePath = path;
    }
Beispiel #3
0
        private static void HKCameraCltr_HardTriggerEvent(object sender, HObject e)
        {
            string  camName = (string)sender;
            HObject inImage = e;

            SoftwareOnceEvent?.Invoke(null, new OutImage(camName, inImage));
            foreach (var testItem in UseTestItems)
            {
                if (testItem.camName == camName)
                {
                    testItem.Find(inImage);
                    testItem.Show(inImage, out HObject resultImage);
                    OutResult outResult = new OutResult()
                    {
                        TestItemName  = testItem.name,
                        CamName       = testItem.camName,
                        IsOK          = testItem.isOK,
                        ResultMessage = testItem.outMessage,
                        OriginalImage = new OutImage(testItem.camName, inImage),
                        EffectImage   = new OutImage(testItem.camName, resultImage)
                    };
                    DetectionOnceEvent?.Invoke(null, outResult);
                }
            }
            inImage.Dispose();
        }
Beispiel #4
0
    public IEnumerator GetRemote <T>(string path, GameObject parent, OutResult <T> result) where T : GoItem
    {
        if (storedObjects.ContainsKey(path))
        {
            Stack      stack  = storedObjects[path];
            GameObject stored = PopGameObjectFromStack(stack);
            if (stored != null)
            {
                SetReady(stored, parent);
                result.value = stored.GetComponent <T>();
                yield break;
            }
        }

        OutResult <GameObject> res = new OutResult <GameObject>();

        yield return(StartCoroutine(MakeRemote(path, res)));

        GameObject newly = res.value;

        if (newly == null)
        {
            yield break;
        }

        SetReady(newly, parent);
        result.value = newly.GetComponent <T>();
    }
Beispiel #5
0
        private static void runCheck(String file)
        {
            Console.WriteLine("File " + Path.GetFileName(file) + " come. Start work");
            // try parse file
            Thread.Sleep(1000);
            try
            {
                parseJSON(file);
                Console.Write("==> Try parse compile... ");
                String compileStatus = compileCode(param);

                string    resultFolder = globalConfig["paths"]["results"];
                OutResult outResult;
                if (compileStatus == "ok")
                {
                    Console.WriteLine("DONE.");

                    Console.Write("==> Run tests...");
                    outResult = runTests(param);
                    Console.WriteLine("DONE.");
                }
                else
                {
                    Console.WriteLine("error: " + compileStatus);
                    outResult = new OutResult()
                    {
                        checkId = param.checkId,
                        isError = true,
                        error   = compileStatus
                    };
                }

                Console.Write("==> Write data to result.txt ... ");

                writeResult(param.checkId, outResult);

                Console.WriteLine("DONE.");
            }
            catch (Exception ex)
            {
                Console.Write("==> Write data to result.txt ... ");

                OutResult outResult = new OutResult();
                outResult.checkId   = param.checkId;
                outResult.isError   = true;
                outResult.parse_dec = param.parseDec;
                outResult.error     = ex.Message;
                outResult.results   = null;

                writeResult(param.checkId, outResult);

                Console.Write("Can't read file " + file + ": " + ex.Message);
            }

            Console.WriteLine("CheckDone");
            // rename file
            File.Move(file, file.Substring(0, file.Length - 3) + "old");
            Console.WriteLine("####### Wait next #########");
        }
Beispiel #6
0
        /// <summary>
        /// 基类获取返回数据对象
        /// </summary>
        /// <returns></returns>
        protected OutResult ReturnObj()
        {
            OutResult outJson = new OutResult();

            outJson.data = Data;
            outJson.code = (int)Code;
            outJson.msg  = Code.GetDesc() + (string.IsNullOrEmpty(ExMsg) ? "" : ExMsg);
            return(outJson);
        }
Beispiel #7
0
        //错误
        public JsonResult Result_Error(string msg = "")
        {
            OutResult outJson = new OutResult();

            outJson.data = null;
            outJson.code = (int)ResultCode.UnknowError;
            outJson.msg  = msg;

            return(this.ObjToJson(outJson));
        }
Beispiel #8
0
        //成功
        public JsonResult Result_Ok(object data, string msg = "请求成功")
        {
            OutResult outJson = new OutResult();

            outJson.data = data;
            outJson.code = (int)ResultCode.Success;
            outJson.msg  = msg;

            return(this.ObjToJson(outJson));
        }
Beispiel #9
0
        public override void OnActionExecuted(HttpActionExecutedContext context)
        {
            // 若发生例外则不在这边处理
            if (context.Exception != null)
            {
                return;
            }

            base.OnActionExecuted(context);

            OutResult result = new OutResult();

            if (context.Response.IsSuccessStatusCode)
            {
                result.code = OutCode.成功;
            }
            else
            {
                result.code = OutCode.失败;
            }
            // 取得由 API 返回的状态代码
            //result.Status = actionExecutedContext.ActionContext.Response.StatusCode;
            // 取得由 API 返回的资料

            object data       = null;
            bool   isStandard = true;

            if (context.ActionContext.Response.Content != null)
            {
                data = context.ActionContext.Response.Content.ReadAsAsync <object>().Result;
                if (data != null && data is OutResult)
                {
                    var tmp = data as OutResult;
                    result = tmp;
                }
                else
                {
                    if (context.ActionContext.Response.StatusCode == System.Net.HttpStatusCode.BadRequest)
                    {
                        result.msg = "请求无效";
                    }
                    else
                    {
                        //result.data = data;
                        result     = null;
                        isStandard = false;
                    }
                }
            }


            // 重新封装回传格式
            context.Response = context.Request.CreateResponse(System.Net.HttpStatusCode.OK, isStandard ? result : data);
        }
Beispiel #10
0
    IEnumerator MakeRemoteStuff()
    {
        // load remote scene
        yield return Service.Run(Service.bundle.LoadLevelAdditiveAsync("BootStage1"));

        // load remote prefabs
        var cubeOut = new OutResult<BootCubePlayer>();
        yield return Service.Run(Service.goPooler.GetRemote<BootCubePlayer>("Prefabs/Cube", null, cubeOut));
        BootCubePlayer cube = cubeOut.value;
        cube.transform.localPosition = new Vector3(0, 3, 0);
    }
Beispiel #11
0
        public async Task <OutResult> DeleteApplication(int id)
        {
            var app = await GetById(id);

            if (!app.Any())
            {
                return(OutResult.Error_TryingToDeleteNull());
            }

            await _applicationRepository.Delete(app);

            return(OutResult.Success_Deleted());
        }
Beispiel #12
0
        private static void writeResult(int checkId, OutResult outResult)
        {
            string resultFolder = globalConfig["paths"]["results"];

            if (checkId >= 0 && !File.Exists(resultFolder + $@"result_{checkId}.txt"))
            {
                using (FileStream fs = File.Create(resultFolder + $@"result_{checkId}.txt"))
                {
                    Byte[] input = new UTF8Encoding(true).GetBytes(JsonConvert.SerializeObject(outResult));
                    fs.Write(input, 0, input.Length);
                }
            }
        }
Beispiel #13
0
        /// <summary>
        /// 获取Token信息
        /// </summary>
        /// <param name="inToken">Token入参</param>
        /// <returns></returns>
        public async Task <JsonResult> Index(InToken inToken)
        {
            var dic = new Dictionary <string, string>();

            dic.Add("201609021530300235", "0987654321");
            var result   = new OutResult();
            var dateTime = DateTime.Now;

            if (
                !DateTime.TryParseExact(inToken.SignTime, "yyyyMMddHHmmss",
                                        System.Globalization.CultureInfo.InvariantCulture,
                                        System.Globalization.DateTimeStyles.None, out dateTime))
            {
                result.code = (int)ResultCode.ParameterError;
                result.msg  = "签名时间不正确";
                return(Json(result));
            }

            var nowTime = DateTime.Now;

            if (dateTime > nowTime.AddMinutes(5) || dateTime < nowTime.AddMinutes(-5))
            {
                result.code = (int)ResultCode.SignTimeError;
                result.msg  = "签名时间与服务器时间相差5分钟";
                return(Json(result));
            }

            var sign = EncryHelper.MD5(inToken.AppId + inToken.SignTime + inToken.Random + dic[inToken.AppId]);

            if (sign != inToken.SignCode)
            {
                result.code = (int)ResultCode.SignError;
                result.msg  = "签名错误";
                return(Json(result));
            }

            //生成token
            var token = Guid.NewGuid().ToString().Replace("-", "");

            _logger.LogDebug("token生成:" + token + " appid:" + inToken.AppId);
            //将token存入缓存
            RedisHelper.SetToken(token, inToken.AppId, TimeSpan.FromMinutes(300));

            _logger.LogDebug("token存入Redis:" + token + " appid:" + inToken.AppId);

            return
                (Json(new OutResult
            {
                data = token
            }));
        }
    IEnumerator MakeRemoteStuff()
    {
        // load remote scene
        yield return(Service.Run(Service.bundle.LoadLevelAdditiveAsync("BootStage1")));

        // load remote prefabs
        var cubeOut = new OutResult <BootCubePlayer>();

        yield return(Service.Run(Service.goPooler.GetRemote <BootCubePlayer>("Prefabs/Cube", null, cubeOut)));

        BootCubePlayer cube = cubeOut.value;

        cube.transform.localPosition = new Vector3(0, 3, 0);
    }
        public override void Execute()
        {
            if (ArgsCount() == 0)
            {
                Print("\"" + cvar.name + "\" is:\"" + cvar.value + "\" default:\"" + cvar.defaultValue + "\"");
                return;
            }

            if (ArgsCount() != 1)
            {
                Print("usage ");
                return;
            }

            if (cvar.IsFloat())
            {
                OutResult result = OutResult.instance;

                float value = FloatArg(0, result);
                if (result.succeed)
                {
                    SetValue(value);
                }
                else
                {
                    Print("Can't set float value");
                }
            }
            else if (cvar.IsInt())
            {
                OutResult result = OutResult.instance;

                int value = IntArg(0, result);
                if (result.succeed)
                {
                    SetValue(value);
                }
                else
                {
                    Print("Can't set int value");
                }
            }
            else
            {
                String value = StrArg(0);
                SetValue(value);
            }
        }
        public async Task <OutResult> AddPermissionToGroup(int groupId, int permissionId)
        {
            var group = await GetById(groupId);

            if (!group.Any())
            {
                return(OutResult.Failed("Group not found"));
            }
            var permission = _permissionManager.Roles.Where(x => x.Id == permissionId);

            if (!permission.Any())
            {
                return(OutResult.Failed("Permission not found"));
            }

            var groupToAdd      = group.First();
            var permissionToAdd = permission.First();

            var groupPermission = new GroupPermission()
            {
                Group        = groupToAdd,
                Permission   = permissionToAdd,
                GroupId      = groupId,
                PermissionId = permissionId
            };

            if (groupToAdd.GroupPermissions.Contains(groupPermission))
            {
                return(OutResult.Failed("Group Already have Permission"));
            }


            var permissionResult = await _groupPermissionRepository.Insert(groupPermission);

            var groupUsers = groupToAdd.UsersInGroup.Select(x => x.User);

            foreach (var user in groupUsers)
            {
                if (!await _applicationUserManager.IsInRoleAsync(user, permissionToAdd.Name))
                {
                    await _applicationUserManager.AddToRoleAsync(user, permissionToAdd.Name);
                }
            }
            return(OutResult.Success_Updated());
        }
Beispiel #17
0
        public async Task <OutResult> RemovePermission(string name)
        {
            var permissionExists = await _permissionManager.FindByNameAsync(name);

            if (permissionExists == null)
            {
                return(OutResult.Failed("Permission not Exists"));
            }

            var groupWithPermissions = permissionExists.GroupPermissions.Select(x => x.Group);

            foreach (var group in groupWithPermissions)
            {
                await _groupService.RemovePermissionFromGroup(group.Id, permissionExists.Id);
            }

            return(OutResult.Success_Deleted());
        }
Beispiel #18
0
        public async Task <OutResult> AddPermission(string name, string description)
        {
            var permissionExists = await _permissionManager.FindByNameAsync(name);

            if (permissionExists != null)
            {
                return(OutResult.Error_AlreadyExists());
            }
            var newPermission = new AppPermission()
            {
                Name        = name,
                Description = description,
                CreatedAt   = DateTime.Now,
                UpdatedAt   = DateTime.Now
            };
            var result = await _permissionManager.CreateAsync(newPermission);

            return(result.Succeeded ? OutResult.Success_Created() : OutResult.Failed("Failed to add Permission"));
        }
Beispiel #19
0
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            if (!int.TryParse(InputCount.Text?.Trim(), out int count))
            {
                count = 1;
            }
            if (count <= 0)
            {
                count = 1;
            }
            StringBuilder sb = new StringBuilder();

            for (int i = 0; i < count; i++)
            {
                var nid = Id32.NewId();
                sb.Append(nid).AppendLine();
            }
            OutResult.Clear();
            OutResult.AppendText(sb.ToString());
        }
Beispiel #20
0
        public virtual async Task <OutResult> Update(T entity)
        {
            try
            {
                if (entity == null)
                {
                    return(OutResult.Error_TryingToUpdateNull());
                }
                AddUpdateEntityWithDateTime(entity);
                this.Entities.Update(entity);
                await this._context.SaveChangesAsync();
            }
            catch (Exception dbEx)
            {
                var error = $"Failed while updating  " + typeof(T).FullName + "::  " + GetFullErrorText(dbEx);
                return(new OutResult(error, dbEx.ToString(), false));
            }

            return(OutResult.Success_Updated());
        }
Beispiel #21
0
        public virtual async Task <OutResult> Delete(IEnumerable <T> entities)
        {
            try
            {
                if (entities == null)
                {
                    return(OutResult.Error_TryingToDeleteNull());
                }

                foreach (var entity in entities)
                {
                    this.Entities.Remove(entity);
                }

                await this._context.SaveChangesAsync();
            }
            catch (Exception dbEx)
            {
                var error = $"Failed while Deleting  " + typeof(T).FullName + "::  " + GetFullErrorText(dbEx);
                return(new OutResult(error, dbEx.ToString(), false));
            }

            return(OutResult.Success_Deleted());
        }
Beispiel #22
0
        public virtual async Task <OutResult> Insert(IEnumerable <T> entities)
        {
            try
            {
                if (entities == null)
                {
                    return(OutResult.Error_TryingToInsertNull());
                }

                AddInsertEntityWithDateTime(entities);
                foreach (var entity in entities)
                {
                    await this.Entities.AddAsync(entity);
                }

                await this._context.SaveChangesAsync();
            }
            catch (Exception dbEx)
            {
                var error = $"Failed while inserting " + typeof(T).FullName + "::  " + GetFullErrorText(dbEx);
                return(new OutResult(error, dbEx.ToString(), false));
            }
            return(OutResult.Success_Created());
        }
Beispiel #23
0
 /// <summary>
 /// 返回结果扩展
 /// </summary>
 /// <param name="controller"></param>
 /// <param name="outResult"></param>
 /// <returns></returns>
 public static JsonResult ReturnJsonResult(this Controller controller, OutResult outResult)
 {
     return(controller.Json(outResult));
 }
Beispiel #24
0
        /// <summary>
        /// 触发检测,更具当前切换的型号模板进行拍照识别
        /// 该方法会开辟新线程
        /// 该方法不会返回识别结果,识别结果需要在调用WaitDetectionResult获取
        /// 同一时刻只能有一个TriggerDetection在运行
        /// </summary>
        /// <returns></returns>
        public static bool TriggerDetection()
        {
            if (!MyRun.havInit)
            {
                StrErrorMsg = "视觉模块未初始化";
                return(false);
            }
            if (DetectionThread != null && DetectionThread.IsAlive)
            {
                StrErrorMsg = "上一次拍照识别并未结束";
                return(false);
            }
            DetectionThread = new Thread(() =>
            {
                //防止之前暂停的信号影响到这次检测
                stopDetectionSignal.Reset();
                OutResults.Clear();

                ConcurrentDictionary <string, HObject> camImages    = new ConcurrentDictionary <string, HObject>();
                ConcurrentDictionary <string, HObject> matchImages  = new ConcurrentDictionary <string, HObject>();
                ConcurrentDictionary <string, HTuple> matchHomMat2D = new ConcurrentDictionary <string, HTuple>();

                bool hav = true;
                while (true)
                {
                    Parallel.ForEach(UseCamsName.ToArray(), camName =>
                    {
                        if (MyRun.TriggerCamera(camName, out HObject camImage))
                        {
                            if (camImage != null)
                            {
                                //待升级:这里添加对图片质量的判断,如果图片模糊,撕裂则将图片丢弃

                                camImages.AddOrUpdate(camName, camImage, (k, v) => v = camImage);
                            }
                        }
                        else
                        {
                            StrErrorMsg = MyRun.StrErrorMsg;
                        }
                    });

                    //待升级:这里添加对产品是否到位的判断,通过特征检测的方式实现,不符合要求的则将图片丢弃

                    //待升级:这里添加模板匹配矫正图片的功能,检测项检测时使用的是矫正后的图片
                    //要将矫正的变换参数保存,界面显示的需要是把ROI区域等检测效果进行矫正的图片

                    Parallel.ForEach(UseMatchingFun.ToArray(), matchingFun =>
                    {
                        if (!matchingFun.matching.Name.Equals("无模板定位") && camImages.TryGetValue(matchingFun.matching.CamName, out HObject camImage))
                        {
                            int nRet = matchingFun.Find(camImage, out HObject matchImage);

                            if (nRet == 0)
                            {
                                matchImages.AddOrUpdate(matchingFun.matching.Name, matchImage, (k, v) => v             = matchImage);
                                matchHomMat2D.AddOrUpdate(matchingFun.matching.Name, matchingFun.homMat2D, (k, v) => v = matchingFun.homMat2D);
                            }

                            SoftwareOnceEvent?.Invoke(null, new OutImage(matchingFun.matching.CamName, camImage));
                        }
                    });


                    Parallel.ForEach(UseTestItems.ToArray(), testItem =>
                    {
                        if (testItem.hav)
                        {
                            return;
                        }
                        HObject inImage = null;
                        if (testItem.matchName.Equals("无模板定位"))
                        {
                            if (camImages.TryGetValue(testItem.camName, out inImage))
                            {
                                testItem.Find(inImage);
                                testItem.Show(inImage, out HObject resultImage);
                                testItem.hav        = true;
                                OutResult outResult = new OutResult()
                                {
                                    TestItemName  = testItem.name,
                                    CamName       = testItem.camName,
                                    IsOK          = testItem.isOK,
                                    ResultMessage = testItem.outMessage,
                                    OriginalImage = new OutImage(testItem.camName, inImage),
                                    EffectImage   = new OutImage(testItem.camName, resultImage)
                                };
                                DetectionOnceEvent?.Invoke(null, outResult);
                                OutResults.Add(outResult);
                            }
                        }
                        else
                        {
                            if (matchImages.TryGetValue(testItem.matchName, out inImage))
                            {
                                testItem.Find(inImage);
                                camImages.TryGetValue(testItem.camName, out inImage);
                                testItem.Show(inImage, matchHomMat2D[testItem.matchName], out HObject resultImage);
                                testItem.hav        = true;
                                OutResult outResult = new OutResult()
                                {
                                    TestItemName  = testItem.name,
                                    CamName       = testItem.camName,
                                    IsOK          = testItem.isOK,
                                    ResultMessage = testItem.outMessage,
                                    OriginalImage = new OutImage(testItem.camName, inImage),
                                    EffectImage   = new OutImage(testItem.camName, resultImage)
                                };
                                DetectionOnceEvent?.Invoke(null, outResult);
                                OutResults.Add(outResult);
                            }
                        }
                    });

                    foreach (var camImage in camImages.Values)
                    {
                        camImage.Dispose();
                    }
                    hav = true;
                    foreach (var testItem in UseTestItems.ToArray())
                    {
                        hav &= testItem.hav;
                    }
                    if (hav)
                    {
                        foreach (var testItem in UseTestItems.ToArray())
                        {
                            testItem.hav = false;
                        }
                        break;
                    }
                    if (stopDetectionSignal.WaitOne(20))
                    {
                        break;
                    }
                    Thread.Sleep(20);
                }
            })
            {
                IsBackground = true
            };
            DetectionThread.Start();

            return(true);
        }
Beispiel #25
0
        /// <summary>
        /// 触发检测,更具当前切换的型号模板进行拍照识别
        /// 阻塞线程直到拍照识别结束,返回TriggerDetection的结果
        /// 同一时刻只能有一个TriggerDetection在运行
        /// </summary>
        /// <param name="outResult"></param>
        /// <returns></returns>
        public static bool TriggerDetection(out List <OutResult> outResults)
        {
            outResults = null;
            if (!MyRun.havInit)
            {
                StrErrorMsg = "视觉模块未初始化";
                return(false);
            }
            if (DetectionThread != null && DetectionThread.IsAlive)
            {
                StrErrorMsg = "上一次拍照识别并未结束";
                return(false);
            }

            OutResults.Clear();

            ConcurrentDictionary <string, HObject> camImages = new ConcurrentDictionary <string, HObject>();
            bool hav = true;

            while (true)
            {
                Parallel.ForEach(UseCamsName.ToArray(), camName =>
                {
                    if (MyRun.TriggerCamera(camName, out HObject camImage))
                    {
                        if (camImage != null)
                        {
                            //待升级:这里添加对图片质量的判断,如果图片模糊,撕裂则将图片丢弃

                            camImages.AddOrUpdate(camName, camImage, (k, v) => v = camImage);
                        }
                    }
                    else
                    {
                        StrErrorMsg = MyRun.StrErrorMsg;
                    }
                });

                //待升级:这里添加对产品是否到位的判断,通过特征检测的方式实现,不符合要求的则将图片丢弃

                //待升级:这里添加模板匹配矫正图片的功能,检测项检测时使用的是矫正后的图片,
                //要将矫正的变换参数保存,界面显示的需要是把ROI区域等检测效果进行矫正的图片


                Parallel.ForEach(UseTestItems.ToArray(), testItem =>
                {
                    if (camImages.TryGetValue(testItem.camName, out HObject camImage))
                    {
                        testItem.Find(camImage);
                        testItem.Show(camImage, out HObject resultImage);
                        testItem.hav        = true;
                        OutResult outResult = new OutResult()
                        {
                            TestItemName  = testItem.name,
                            CamName       = testItem.camName,
                            IsOK          = testItem.isOK,
                            ResultMessage = testItem.outMessage,
                            OriginalImage = new OutImage(testItem.camName, camImage),
                            EffectImage   = new OutImage(testItem.camName, resultImage)
                        };
                        DetectionOnceEvent?.Invoke(null, outResult);
                        OutResults.Add(outResult);
                    }
                });

                foreach (var camImage in camImages.Values)
                {
                    camImage.Dispose();
                }
                hav = true;
                foreach (var testItem in UseTestItems.ToArray())
                {
                    hav &= testItem.hav;
                }
                if (hav)
                {
                    foreach (var testItem in UseTestItems.ToArray())
                    {
                        testItem.hav = false;
                    }
                    break;
                }
                if (stopDetectionSignal.WaitOne(20))
                {
                    break;
                }
                Thread.Sleep(20);
            }

            outResults = OutResults;
            return(true);
        }
Beispiel #26
0
    public IEnumerator Instantiate(string path, int count, OutResult <List <GameObject> > result)
    {
        string name  = path;
        int    index = name.LastIndexOf("/");

        if (index > 0)
        {
            name = name.Substring(index + 1);
        }

#if UNITY_EDITOR && BOOT_BUNDLE_EDIT
        string     realPath = "Assets/Resources2Pack/" + path + ".prefab";
        GameObject obj      = UnityEditor.AssetDatabase.LoadAssetAtPath <GameObject>(realPath);
        if (obj == null)
        {
            logger.LogError("Can not load:" + realPath);
            yield break;
        }

        result.value = new List <GameObject>();
        for (int i = 0; i < count; i++)
        {
            GameObject item = GameObject.Instantiate(obj) as GameObject;
            result.value.Add(item);
        }
        yield break;
#endif

        if (remoteResources.ContainsKey(name) == false)
        {
            logger.LogError("It's not a remote resource: " + path);
            yield break;
        }

        while (nowLoading.Contains(path) == true)
        {
            yield return(new WaitForEndOfFrame());
        }

        nowLoading.Add(path);
        uint   crc = remoteResources[name];
        string url = cdnResources + name + ".unity3d";
        using (WWW www = WWW.LoadFromCacheOrDownload(url, Version.remoteBundleVersion, crc)) {
            yield return(www);

            if (www.error != null)
            {
                logger.LogError(www.error);
                nowLoading.Remove(path);
                yield break;
            }

            AssetBundle bundle = www.assetBundle;
            bundle.LoadAllAssets();

            GameObject res = bundle.LoadAsset(name, typeof(GameObject)) as GameObject;
            if (res == null)
            {
                nowLoading.Remove(path);
                yield break;
            }

            result.value = new List <GameObject>();
            for (int i = 0; i < count; i++)
            {
                GameObject item = GameObject.Instantiate(res) as GameObject;
                result.value.Add(item);
            }

            bundle.Unload(false);
        }
        nowLoading.Remove(path);
    }
Beispiel #27
0
    public IEnumerator Instantiate(string path, OutResult <GameObject> result)
    {
        string name  = path;
        int    index = name.LastIndexOf("/");

        if (index > 0)
        {
            name = name.Substring(index + 1);
        }

#if UNITY_EDITOR && BOOT_BUNDLE_EDIT
        string realPath = "Assets/Resources2Pack/" + path + ".prefab";
        result.value = GameObject.Instantiate(UnityEditor.AssetDatabase.LoadAssetAtPath <GameObject>(realPath)) as GameObject;
        yield break;
#endif
        if (remoteResources.ContainsKey(name) == false)
        {
            logger.LogError("It's not a remote resource: " + path);
            yield break;
        }

        float startTime = Time.realtimeSinceStartup;
        while (nowLoading.Contains(path) == true)
        {
            yield return(new WaitForEndOfFrame());

            float pastTime = Time.realtimeSinceStartup - startTime;
            if (pastTime > 3f)
            {
                break;
            }
        }

        if (nowLoading.Contains(path) == false)
        {
            nowLoading.Add(path);
        }

        uint   crc = remoteResources[name];
        string url = cdnResources + name + ".unity3d";
        using (WWW www = WWW.LoadFromCacheOrDownload(url, Version.remoteBundleVersion, crc)) {
            yield return(www);

            if (www.error != null)
            {
                logger.LogError(www.error + ": " + name);
                nowLoading.Remove(path);
                yield break;
            }

            AssetBundle bundle = www.assetBundle;
            bundle.LoadAllAssets();
            GameObject obj = bundle.LoadAsset(name, typeof(GameObject)) as GameObject;
            if (obj == null)
            {
                nowLoading.Remove(path);
                yield break;
            }
            result.value = GameObject.Instantiate(obj) as GameObject;
            bundle.Unload(false);
        }

        nowLoading.Remove(path);
    }
        protected float FloatArg(int index, OutResult result)
        {
            String str = StrArg(index);

            return(StringUtils.ParseFloat(str, result));
        }
        protected int IntArg(int index, OutResult result)
        {
            String str = StrArg(index);

            return(StringUtils.ParseInt(str, result));
        }
Beispiel #30
0
 /// <summary>
 /// 接口返回值扩展
 /// </summary>
 /// <param name="controller"></param>
 /// <param name="result"></param>
 /// <returns></returns>
 public static JsonResult ObjToJson(this Controller controller, OutResult result)
 {
     return(controller.Json(result));
 }