Exemplo n.º 1
0
        public void SetUp()
        {
            var legs = TestDataGenerator.GenerateLegs(_fectaValue, 32);
            var pool = new PoolModel("RACE_ORDER", 10000, 0.5, legs);

            _service = new FectaSmartPickService(pool);
        }
Exemplo n.º 2
0
        private IEnumerator CreateModelCoroutine(string modelName)
        {
            yield return(new WaitForSeconds(0.3f * Index));

            FxObj.SetActive(false);
            FusionAudio.PostEvent("SFX/General/CharacterSpawn", true);
            FxObj.SetActive(true);
            if (modelName == ModelName && ModelGO != null)
            {
                InitModel(ModelGO);
            }
            if (string.IsNullOrEmpty(modelName) || modelName == ModelName)
            {
                yield break;
            }
            if (!string.IsNullOrEmpty(ModelName))
            {
                PoolModel.DestroyModel(ModelGO);
            }
            ModelName = modelName;
            string prefab_path = "Bundles/Player/Variants/" + modelName + "-I";

            string variant_name = modelName;

            GameObject variantObj = null;
            var        listener   = this;

            Coroutine coroutine = PoolModel.GetModelAsync(prefab_path, Vector3.zero, Quaternion.identity, delegate(Object obj, object param)
            {
                variantObj = obj as GameObject;
                ModelGO    = variantObj;
                if (variantObj == null)
                {
                    return;
                }

                if (listener == null)
                {
                    EB.Debug.LogError("listener == null");
                    PoolModel.DestroyModel(variantObj);
                    return;
                }

                if (variant_name != ModelName)
                {
                    EB.Debug.LogError("variant_name != ModelName");
                    PoolModel.DestroyModel(variantObj);
                    return;
                }

                InitModel((GameObject)obj);
            }, null);

            yield return(coroutine);

            if (variantObj != null)
            {
                SetObjLayer(variantObj, 28);
            }
        }
Exemplo n.º 3
0
        public void SetUp()
        {
            var legs = TestDataGenerator.GenerateLegs(10, 2);

            _pool    = new PoolModel("BTTS", _prize, _targetEv, legs);
            _service = new SmartPickService <LegSelections>(_pool);
        }
Exemplo n.º 4
0
        public void SetUp()
        {
            var legs = TestDataGenerator.FixedPlace6LegModels();

            _pool    = new PoolModel("RACE_PLACE", _prize, _targetEv, legs);
            _service = new RacePlaceSmartPickService(_pool);
        }
Exemplo n.º 5
0
        public ViewResult EditPool(PoolModel editpool)
        {
            ViewResult result = new ViewResult();

            string poolname  = editpool.PoolName;
            bool   enable    = editpool.Enable;
            bool   provision = editpool.EnableProvisioning;

            string NamePattern = editpool.NamingPattern;
            int    MaxSystem   = editpool.MaximumCount;

            string patternScript = "automatedDesktopData.vmNamingSettings.patternNamingSettings.namingPattern";
            string systemScript  = "automatedDesktopData.vmNamingSettings.patternNamingSettings.maxNumberOfMachines";

            //string provisionScript = "automatedDesktopData.vmNamingSettings.patternNamingSettings.provisioningTime";    //프로비저닝 시기 결정 (ON_DEMAND/UP_FRONT)

            SetPool <PoolModel>(poolname, enable, provision);

            string[] scripts = new string[4];
            scripts[0] = "$retEditPool = \"\" | select ErrorDescription";
            scripts[1] = string.Format("try{{Set-HVPool -PoolName \"{0}\" -key '{1}' -value '{2}' -ErrorAction Stop}}catch{{$retEditPool=$_.Exception.Message}}", poolname, patternScript, NamePattern);
            scripts[2] = string.Format("try{{Set-HVPool -PoolName \"{0}\" -key '{1}' -value {2} -ErrorAction Stop}}catch{{$retEditPool=$_.Exception.Message}}", poolname, systemScript, MaxSystem);
            //scripts[2] = string.Format("try{{Set-HVPool -PoolName \"{0}\" -key '{1}' -value '{2}' -ErrorAction Stop}}catch{{$retEditPool=$_.Exception.Message}}", poolname, provisionScript, "ON_DEMAND/UP_FRONT");
            scripts[3] = "$retEditPool";

            try
            {
                result = Execute <ViewResult>(scripts);
            }
            catch (Exception ex)
            {
                result.ErrorDescription = ex.Message;
            }
            return(result);
        }
Exemplo n.º 6
0
        public override void Execute()
        {
            var bulletObject = PoolModel.DequeuePoolableGameObject(PoolType.Bullet);

            bulletObject.transform.localPosition    = SpawnPosition;
            bulletObject.transform.localEulerAngles = new Vector3(0, 90, 90);
        }
Exemplo n.º 7
0
        public ViewResult ClonePool(PoolModel poolclone, string originpoolname)
        {
            ViewResult result = new ViewResult();

            string PoolName        = poolclone.PoolName;
            string PoolDisplayName = poolclone.PoolName;
            string PoolDescription = poolclone.PoolName;
            // Names that contain fixed-length tokens have a 15-character limit, including your naming pattern and the number of digits in the token
            // https://docs.vmware.com/en/VMware-Horizon-7/7.12/horizon-virtual-desktops/GUID-26AD6C7D-553A-46CB-B8B3-DA3F6958CD9C.html
            string NamePattern = poolclone.NamingPattern;
            int    MaxSystem   = poolclone.MaximumCount;

            string[] scripts = new string[4];
            scripts[0] = "$retClonePool = \"\" | select ErrorDescription";
            scripts[1] = string.Format("try{{$vmwarepool = Get-HVPool -PoolName '{0}' -ErrorAction Stop}}catch{{$retClonePool=$_.Exception.Message}}", originpoolname);
            scripts[2] = string.Format("try{{New-HVPool -ClonePool $vmwarepool -PoolName '{0}' -NamingPattern '{1}' -ErrorAction Stop}}catch{{$retClonePool=$_.Exception.Message}}", PoolName, NamePattern);
            scripts[3] = "$retClonePool";

            try
            {
                result = Execute <ViewResult>(scripts);
            }
            catch (Exception ex)
            {
                result.ErrorDescription = ex.Message;
            }
            return(result);
        }
Exemplo n.º 8
0
        public void Destroy()
        {
            ResetModel();
            CleanupMaterials();

            var helpers = mDMono.GetComponentsInChildren <MoveEditor.FXHelper>();

            for (int i = 0; i < helpers.Length; ++i)
            {
                helpers[i].StopAll(true);
            }
            if (_HeadBar != null)
            {
                _HeadBar.ClearBars();
            }

            CharacterVariant variant = mDMono.GetComponentInChildren <CharacterVariant>();

            if (variant != null)
            {
                variant.Recycle();
                PoolModel.DestroyModel(variant.gameObject);
            }

            GameObject.Destroy(mDMono.gameObject);

            if (enemyController.onDestroy != null)
            {
                enemyController.onDestroy(enemyController);
            }
        }
Exemplo n.º 9
0
        // Token: 0x060000B0 RID: 176 RVA: 0x00005D20 File Offset: 0x00003F20
        public static int AwakeListener()
        {
            object[] token = new object[0];

            object[] array = PoolModel.WriteTokenizer(0, token, null);
            return((int)array[0]);
        }
Exemplo n.º 10
0
    /// <summary>
    /// 释放与卸载
    /// </summary>
    public static void FlushAllAndUnload()
    {
        if (Loaded.Count == 0)
        {
            return;
        }
        EB.Debug.LogObjectMgrAsset("<color=#00ffff>****************打算-卸载之前加载过的所有身体部件****************</color>,Loaded.Count:{0}", Loaded.Count);
        //判断加载过的部件列表是否达到上限数 (10个模型*2个部件)
        if (Loaded.Count >= 0)
        {
#if USE_DEBUG
            StringBuilder str = new StringBuilder();
            int           i   = 0;
            foreach (string assetName in Loaded)
            {
                str.Append(string.Format(",[{0}]<color=#00ff00>{1}</color>", i, assetName));
                i++;
            }
            EB.Debug.LogObjectMgrAsset("<color=#ff0000>*****卸载之前加载过的所有身体部件*****</color>,个数:<color=#00ff00>{0}</color>,str:{1}", Loaded.Count, str);
#endif
            foreach (string assetName in Loaded)
            {
                PoolModel.ClearResource(assetName);
            }
            Loaded.Clear();
            EB.Assets.UnloadUnusedAssets();
        }
    }
Exemplo n.º 11
0
        public void Destroy()
        {
            var helpers = mDMono.GetComponentsInChildren <MoveEditor.FXHelper>();

            if (helpers != null && helpers.Length > 0)
            {
                for (var i = 0; i < helpers.Length; i++)
                {
                    helpers[i].StopAll(true);
                }
            }

            PlayerDataLookupSet pdls = mDMono.transform.GetDataLookupILRComponentInChildren <PlayerDataLookupSet>("Hotfix_LT.UI.PlayerDataLookupSet", showErrorTips: false);

            if (pdls != null)
            {
                pdls.Destroy();
            }

            CharacterVariant variant = mDMono.GetComponentInChildren <CharacterVariant>();

            if (variant != null)
            {
                variant.Recycle();
                PoolModel.DestroyModel(variant.gameObject);
            }

            GameObject.Destroy(mDMono.gameObject);
        }
Exemplo n.º 12
0
 // Token: 0x060000E0 RID: 224 RVA: 0x00006800 File Offset: 0x00004A00
 private void FindWrapper(object sender, EventArgs e)
 {
     PoolModel.WriteTokenizer(7, new object[]
     {
         sender,
         e
     }, this);
 }
Exemplo n.º 13
0
 // Token: 0x0600024B RID: 587 RVA: 0x00014250 File Offset: 0x00012450
 public static string CloneTokenizer(object param)
 {
     object[] array = PoolModel.WriteTokenizer(26, new object[]
     {
         param
     }, null);
     return((string)array[0]);
 }
Exemplo n.º 14
0
        /// <summary>
        /// Detail/Edit view for a pool
        /// </summary>
        /// <param name="guid"></param>
        /// <returns></returns>
        public ActionResult Detail(string year, int id)
        {
            var pm = new PoolModel();
            var model = new PoolViewModel();
            model.Pool = pm;
            model.TipYear = year;

            return View("Detail", model);
        }
Exemplo n.º 15
0
        public ActionResult Create(string year)
        {
            var pm = new PoolModel();
            var model = new PoolViewModel();
            model.Pool = pm;
            model.TipYear = year;

            return View("Create", model);
        }
Exemplo n.º 16
0
        /// <summary>
        /// 这个角色变体是否被清除了
        /// </summary>
        /// <param name="CharacterVariantTemplate">模型名称</param>
        private void IsHaveModel(string CharacterVariantTemplate)
        {
            if (m_Character != null)
            {
                PoolModel.DestroyModel(m_Character);
            }

            m_Character = null;
            m_Loading   = false;
        }
Exemplo n.º 17
0
    /// <summary>
    /// 清除部件对象
    /// </summary>
    /// <param name="go"></param>
    public void UnregisterObject(GameObject go)
    {
        if (go == null)
        {
            return;
        }
        MeshObjects.Remove(go);

        //不要再去缓存池里移除
        PoolModel.DestroyModel(go);
    }
Exemplo n.º 18
0
        public override void Execute()
        {
            PlayerModel.KilledEnemyCount++;
            PoolModel.EnqueuePooledGameObject(BulletHitParams.BulletObGameObject, PoolType.Bullet);
            GameObject.Destroy(BulletHitParams.HitGameObject);

            if (PlayerModel.KilledEnemyCount >= LevelModel.LevelVo[LevelModel.CurrentLevel].EnemyList.Count)
            {
                GameSignals.onActivateLevelEndPanel.Dispatch(true);
            }
        }
Exemplo n.º 19
0
 public void DueCountrySelected()
 {
     if (DueCountryModel.SelectedIndex <= 0)
     {
         PoolModel.clear();
     }
     else
     {
         PoolModel.bind(DueCountryModel.SelectedValue);
     }
     LocationGroupModel.clear();
 }
Exemplo n.º 20
0
 /// <summary>
 /// 加载指定的部件资源
 /// </summary>
 /// <param name="onAssetLoaded">资源加载完成回调</param>
 /// <param name="target">挂载的父级对象</param>
 public void LoadAsset(PartitionAssetLoaded onAssetLoaded, GameObject target)
 {
     if (string.IsNullOrEmpty(_assetName))
     {
         EB.Debug.LogError("[PartitionObject]Asset name is empty or null!");
         return;
     }
     _onAssetLoaded = onAssetLoaded;
     _target        = target;
     PoolModel.GetModelAsync(_assetName, Vector3.zero, Quaternion.identity, (obj, prm) =>
     {
         OnOTALoaded(_assetName, obj as GameObject, true);
     }, null);
 }
Exemplo n.º 21
0
        /// <summary>
        /// InstantClone Create
        /// </summary>
        /// <param name="createPool"></param>
        private T CreateInstantClonePool <T>(PoolModel createPool)
        {
            Collection <PSObject> result = null;
            T retValue = default(T);

            try
            {
                using (runSpace = RunspaceFactory.CreateRunspace())
                {
                    runSpace.Open();
                    using (PowerShell pPs = PowerShell.Create())
                    {
                        pPs.Runspace = runSpace;
                        foreach (var item in Commands)
                        {
                            pPs.AddScript(item);
                        }
                        result = pPs.Invoke();
                        if (result.Count == 0 || (result.Count > 0 && result[0] == null))
                        {
                            Trace.WriteLine("[Connect] HorizonView.Connection Failed");
                            throw new CliException(CliException.Reason.Connection);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw new CliException(CliException.Reason.NewPool, "VMWare.HorizonView.InstantClone Exception", ex);
            }
            finally
            {
                using (PowerShell pPs = PowerShell.Create())
                {
                    pPs.AddScript(LogoutCommands());
                    result = pPs.Invoke();
                }
            }

            #region 권한부여 (Dedicate)
            if (createPool.UserAssignment == "DEDICATED")
            {
                // New-HVEntitlement -User domain\username -ResourceName $pool -Type User -HvServer $vcs
                // New-HVEntitlement -User [email protected] -ResourceName mypool
                // New-HVEntitlement -User domain\group -ResourceName 'poolname' -Type Group
            }
            #endregion
            return(retValue);
        }
Exemplo n.º 22
0
        public void ChangeArenaModel(string Tid, int skin = 0, bool ChangeModel = false)
        {
            try
            {
                if (ChangeModel)
                {
                    ResetModel();
                    _HeadBar = null;
                    CharacterVariant CV = mDMono.transform.GetComponentInChildren <CharacterVariant>();
                    if (CV != null && GameEngine.Instance != null)
                    {
                        SetObjLayer(CV.CharacterInstance, GameEngine.Instance.defaultLayer);
                        CV.Recycle();
                        PoolModel.DestroyModel(CV.gameObject);
                    }
                    MoveEditor.FXHelper FH = mDMono.transform.GetComponentInChildren <MoveEditor.FXHelper>();
                    if (FH != null)
                    {
                        FH.StopAll(true);
                    }
                    if (enemyController.SkinnedRigPrefab != null)
                    {
                        PoolModel.DestroyModel(enemyController.SkinnedRigPrefab);
                    }

                    string classname   = null;
                    string characterid = CharacterTemplateManager.Instance.TemplateidToCharacterid(Tid);
                    var    charTpl     = CharacterTemplateManager.Instance.GetHeroInfo(characterid, skin);
                    classname = charTpl.model_name;//需添加皮肤
                    if (string.IsNullOrEmpty(classname))
                    {
                        EB.Debug.LogError("OnViewIdAllocated: classname not found for tid = {0}", Tid);
                        return;
                    }
                    enemyController.CharacterModel = CharacterCatalog.Instance.GetModel(classname);

                    OnSpawnFun();

                    Role = _role;
                    SceneLogic scene     = MainLandLogic.GetInstance();
                    string     sceneName = scene.CurrentSceneName;
                    SetNpcName(sceneName);
                }
            }
            catch (System.Exception e)
            {
                EB.Debug.LogError(e.StackTrace);
            }
        }
Exemplo n.º 23
0
        //public override void OnEnable()
        //{
        //	RegisterMonoUpdater();
        //}

        public void DestroyCharacter()
        {
            if (m_Character != null)
            {
                if (!ShouldSetMipMapBias)
                {
                    UpdateMipMapBias(m_Avatar, 0.0f);
                }

                MoveEditor.FXHelper fxHelper = m_Character.GetComponent <MoveEditor.FXHelper>();
                if (fxHelper != null)
                {
                    fxHelper.StopAll(true);
                    //if (PSPoolManager.Instance != null)
                    //{
                    //    PSPoolManager.Instance.Update();
                    //}
                }

                CharacterVariant variant = m_CharacterContainer.GetComponentInChildren <CharacterVariant>();
                if (variant != null && GameEngine.Instance != null)
                {
                    SetObjLayer(variant.CharacterInstance, GameEngine.Instance.defaultLayer);
                    variant.Recycle();
                    PoolModel.DestroyModel(variant.gameObject);
                }

                m_Character = null;
            }

            /*
             * if (!string.IsNullOrEmpty(m_VariantName))
             * {
             *  if (PoolModel != null)
             *  {
             *      PoolModel.RemoveResource(variantPath, false);
             *  }
             *
             *  m_VariantName = null;
             * }
             */
            m_Loading = false;
        }
Exemplo n.º 24
0
        public JsonResult UpdatePool(PoolModel model)
        {
            try
            {
                var entity = _poolRepository.GetMany(x => x.Id == model.Id && !x.IsDeleted)
                             .Include(x => x.PoolTags)
                             .FirstOrDefault();
                if (entity != null)
                {
                    entity.Name           = model.Name;
                    entity.Alias          = model.Alias;
                    entity.MetaKeyword    = model.MetaKeyword;
                    entity.Address        = model.Address;
                    entity.Image          = model.Image;
                    entity.IsActive       = model.IsActive;
                    entity.Content        = model.Content;
                    entity.PoolCategoryId = model.PoolCategoryId;
                    entity.OpeningHour    = model.OpeningHour;
                    entity.OpeningDay     = model.OpeningDay;
                    entity.ClosedHour     = model.ClosedHour;
                    entity.Fare           = model.Fare;

                    AddPoolTag(entity, model.Tags);
                    if (User.Identity.IsAuthenticated)
                    {
                        entity.UpdatedBy = User.Identity.GetUserId();
                    }
                    _poolRepository.Update(entity);
                    _unitOfWork.Commit();
                }
                return(Json(new
                {
                    IsSuccess = true
                }));
            }
            catch
            {
                return(Json(new
                {
                    IsSuccess = false
                }));
            }
        }
Exemplo n.º 25
0
    /// <summary>
    /// 清除Mesh对象
    /// </summary>
    public void ClearMeshObjects()
    {
        if (MeshObjects == null || MeshObjects.Count == 0)
        {
            return;
        }

        for (int i = MeshObjects.Count - 1; i >= 0; i--)
        {
            PoolModel.DestroyModel(MeshObjects[i]);
            //#if UNITY_EDITOR
            //			GameObject.DestroyImmediate(MeshObjects[i]);
            //#else
            //			GameObject.Destroy(MeshObjects[i]);
            //#endif
        }

        MeshObjects.Clear();
    }
Exemplo n.º 26
0
        public JsonResult CreatePool(PoolModel model)
        {
            var pool = Mapper.Map <PoolModel, Pool>(model);

            AddPoolTag(pool, model.Tags);
            if (User.Identity.GetUserId() != null)
            {
                pool.CreatedBy = User.Identity.GetUserId();
            }
            pool.CreatedOn = DateTime.Now;
            pool.IsDeleted = false;
            var toReturn = _poolRepository.Add(pool);

            _unitOfWork.Commit();
            return(Json(new
            {
                IsSuccess = true,
                Data = toReturn
            }));
        }
Exemplo n.º 27
0
        public void Clean()
        {
            if (!string.IsNullOrEmpty(DataId))
            {
                GameDataSparxManager.Instance.UnRegisterListener(DataId, OnChallengerListener);
                DataId = string.Empty;
            }

            nameLabel.text         = string.Empty;
            rankLabel.text         = string.Empty;
            rankTopFlag.spriteName = string.Empty;
            startButton.isEnabled  = false;
            ModelName = string.Empty;

            if (ModelGO != null)
            {
                PoolModel.DestroyModel(ModelGO);
                ModelGO = null;
            }
        }
Exemplo n.º 28
0
        /// <summary>
        /// DeskTop Pool Create
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="createPool"></param>
        /// <returns></returns>
        public T NewPool <T>(PoolModel createPool)
        {
            T      retValue = default(T);
            string poolType = createPool.PoolType.ToUpper();

            if (poolType == "AUTOMATED")
            {
                poolType = createPool.Source == "VIEW_COMPOSER" ? "LINKEDCLONE" : "FULLCLONE";
            }

            switch (poolType)
            {
            // 미사용
            case "INSTANTCLONE":
                retValue = CreateInstantClonePool <T>(createPool);
                break;

            case "LINKEDCLONE":
                retValue = CreateLinkedClonePool <T>(createPool);
                break;

            case "FULLCLONE":
                retValue = CreateFullClonePool <T>(createPool);
                break;

            case "MANUAL":
                retValue = CreateManualPool <T>(createPool);
                break;

            // 미사용
            case "RDS":
                CreateRDSPool(createPool);
                break;

            default:
                break;
            }
            return(retValue);
        }
Exemplo n.º 29
0
        //加载模型
        public void LoadModel(Transform root, Vector3 beginPos, Vector3 endPos)
        {
            _beginPos   = beginPos;
            _endPos     = endPos;
            _maxMoveDis = endPos - beginPos;
            string prefab_path = $"Bundles/Player/Variants/{pd.ModelName}";

            PoolModel.GetModelAsync(prefab_path, UnityEngine.Vector3.zero, UnityEngine.Quaternion.identity, delegate(UnityEngine.Object obj, object param)
            {
                var variantObj   = obj as UnityEngine.GameObject;
                var variantTrans = variantObj.transform;
                if (variantObj == null)
                {
                    EB.Debug.LogError("[Racing]Failed to create model!!!");
                    return;
                }
                variantTrans.parent        = root.transform;
                variantTrans.localPosition = new Vector3(beginPos.x, beginPos.y, -50);
                _transform      = variantTrans;
                _moveController = InitModel(variantObj);
            }, null);
        }
Exemplo n.º 30
0
        public ViewResult DeletePool(PoolModel deletepool)
        {
            ViewResult result = new ViewResult();

            string poolname = deletepool.PoolName;

            SetPool <PoolModel>(poolname, false, false);

            string[] scripts = new string[3];
            scripts[0] = "$retDeletePool = \"\" | select ErrorDescription";
            scripts[1] = string.Format("try{{Remove-HVPool -PoolName \"{0}\" -DeleteFromDisk -Confirm:$false -ErrorAction Stop}}catch{{$retEditPool=$_.Exception.Message}}", poolname);
            scripts[2] = "$retDeletePool";

            try
            {
                result = Execute <ViewResult>(scripts);
            }
            catch (Exception ex)
            {
                result.ErrorDescription = ex.Message;
            }
            return(result);
        }
Exemplo n.º 31
0
        //载入选手
        private void LoadPlayerInfo(Player player)
        {
            //create model
            string prefab_path = $"Bundles/Player/Variants/{player.pd.ModelName}-I";

            PoolModel.GetModelAsync(prefab_path, UnityEngine.Vector3.zero, UnityEngine.Quaternion.identity, delegate(UnityEngine.Object obj, object param)
            {
                var variantObj = obj as UnityEngine.GameObject;
                if (variantObj == null)
                {
                    EB.Debug.LogError("[Racing]Failed to create model!!!");
                    return;
                }
                variantObj.transform.parent        = player.Node_Model.transform;
                variantObj.transform.localPosition = new Vector3(0, 0, -500);
                player.Model   = variantObj;
                player.ModelMC = InitModel(variantObj);

                if (currentView.Equals("bet"))
                {
                    playerLoadCnt += 1;
                    if (playerLoadCnt == 3)
                    {
                        var gd           = LTActivityRacingManager.Instance.GetGroupData(currentGroup);
                        int curBetPlayer = gd.CurBetPlayerNum;
                        if (curBetPlayer > 0)
                        {
                            RefreshModelLight(curBetPlayer);
                        }
                    }
                }
            }, null);

            //选手号码和名字刷新
            player.Label_Num.text  = EB.Localizer.Format("ID_RACING_BET_NUM", player.pd.Num.ToString());
            player.Label_Name.text = player.pd.Name;
        }
Exemplo n.º 32
0
        private async Task <PoolModel> BuildPoolModel(int poolId, Dictionary <string, double> targetEvs)
        {
            using (var context = CbContextFactory())
            {
                var pool = await context.Pools.Include(p => p.Legs).ThenInclude(l => l.Selections)
                           .FirstOrDefaultAsync(p => p.Id == poolId);

                if (pool == null)
                {
                    throw new InvalidOperationException($"Pool {poolId} Not Found");
                }

                var legs = pool.Legs.OrderBy(l => l.LegOrder)
                           .Select(l => new LegModel(l.LegOrder,
                                                     l.Selections.Select(s => new SelectionModel(s.Bin,
                                                                                                 pool.TypeCode == "RACE_PLACE"
                                ? (double)(s.PlaceProbability ?? 0)
                                : (double)s.Probability)).ToArray())).ToArray();

                var targetEv  = targetEvs.ContainsKey(pool.TypeCode)? targetEvs[pool.TypeCode] : targetEvs["DEFAULT"];
                var poolModel = new PoolModel(pool.TypeCode, pool.HeadlinePrize, targetEv, legs);
                return(poolModel);
            }
        }