예제 #1
0
        /// <summary>
        /// Get_Cost
        /// </summary>
        /// <param name="hours"></param>
        /// <param name="cpuCount"></param>
        /// <param name="price"></param>
        /// <returns>List of response object</returns>

        public List <ResponseObject> Get_cost(long hours, long cpuCount, float price)
        {
            List <ResponseObject> responseObjects = new List <ResponseObject>();
            DataRepositary        repositaryData  = new DataRepositary();

            if (hours == 0)
            {
                return(ServerWithNoHours(cpuCount, price, responseObjects, serverTypes, repositaryData, 1));
            }
            if (price == 0)
            {
                return(ServerWithNoPrice(cpuCount, hours, responseObjects, serverTypes, repositaryData));
            }
            else
            {
                return(ServerWithNoHours(cpuCount, price, responseObjects, serverTypes, repositaryData, hours));
            }
        }
예제 #2
0
        /// <summary>
        /// ServerWithNoPrice
        /// </summary>
        /// <param name="cpuCount"></param>
        /// <param name="hours"></param>
        /// <param name="responseObjects"></param>
        /// <param name="serverTypes"></param>
        /// <param name="repositaryData"></param>
        /// <returns>reurn responseobjects</returns>
        public List <ResponseObject> ServerWithNoPrice(long cpuCount, long hours, List <ResponseObject> responseObjects, Dictionary <ServerListEnum, int> serverTypes, DataRepositary repositaryData)
        {
            Dictionary <string, List <(string, int)> > locServerList = new Dictionary <string, List <(string, int)> >();
            long tempCount = cpuCount;

            foreach (var loc in repositaryData.ServerDetails.Keys)
            {
                cpuCount = tempCount;
                float price = 0;
                List <(string, int)> serverCountList = new List <(string, int)>();
                while (cpuCount > 0)
                {
                    if (cpuCount >= 32 && repositaryData.ServerDetails[loc].X10Large > 0)
                    {
                        if (serverCountList.Exists((server) => server.Item1 == "x10large"))
                        {
                            var updateServer = serverCountList.Find((x) => x.Item1 == "x10large");
                            updateServer.Item2 += 1;
                            serverCountList.RemoveAll((x) => x.Item1 == "x10large");
                            serverCountList.Add(updateServer);
                        }
                        else
                        {
                            serverCountList.Add(("x10large", 1));
                        }
                        cpuCount -= serverTypes[ServerListEnum.x10large];
                        price    += (hours * repositaryData.ServerDetails[loc].X10Large);
                    }
                    else if (cpuCount >= 16 && repositaryData.ServerDetails[loc].X8Large > 0)
                    {
                        if (serverCountList.Exists((server) => server.Item1 == "x8large"))
                        {
                            var updateServer = serverCountList.Find((x) => x.Item1 == "x8large");
                            updateServer.Item2 += 1;
                            serverCountList.RemoveAll((x) => x.Item1 == "x8large");
                            serverCountList.Add(updateServer);
                        }
                        else
                        {
                            serverCountList.Add(("x8large", 1));
                        }
                        cpuCount -= serverTypes[ServerListEnum.x8large];
                        price    += (hours * repositaryData.ServerDetails[loc].X8Large);
                    }
                    else if (cpuCount >= 8 && repositaryData.ServerDetails[loc].X4Large > 0)
                    {
                        if (serverCountList.Exists((server) => server.Item1 == "x4large"))
                        {
                            var updateServer = serverCountList.Find((x) => x.Item1 == "x4large");
                            updateServer.Item2 += 1;
                            serverCountList.RemoveAll((x) => x.Item1 == "x4large");
                            serverCountList.Add(updateServer);
                        }
                        else
                        {
                            serverCountList.Add(("x4large", 1));
                        }
                        cpuCount -= serverTypes[ServerListEnum.x4large];
                        price    += (hours * repositaryData.ServerDetails[loc].X4Large);
                    }
                    else if (cpuCount >= 4 && repositaryData.ServerDetails[loc].X2Large > 0)
                    {
                        if (serverCountList.Exists((server) => server.Item1 == "x2large"))
                        {
                            var updateServer = serverCountList.Find((x) => x.Item1 == "x2large");
                            updateServer.Item2 += 1;
                            serverCountList.RemoveAll((x) => x.Item1 == "x2large");
                            serverCountList.Add(updateServer);
                        }
                        else
                        {
                            serverCountList.Add(("x2large", 1));
                        }
                        cpuCount -= serverTypes[ServerListEnum.x2large];
                        price    += (hours * repositaryData.ServerDetails[loc].X2Large);
                    }
                    else if (cpuCount >= 2 && repositaryData.ServerDetails[loc].XLarge > 0)
                    {
                        if (serverCountList.Exists((server) => server.Item1 == "xlarge"))
                        {
                            var updateServer = serverCountList.Find((x) => x.Item1 == "xlarge");
                            updateServer.Item2 += 1;
                            serverCountList.RemoveAll((x) => x.Item1 == "xlarge");
                            serverCountList.Add(updateServer);
                        }
                        else
                        {
                            serverCountList.Add(("xlarge", 1));
                        }
                        cpuCount -= serverTypes[ServerListEnum.xlarge];
                        price    += (hours * repositaryData.ServerDetails[loc].XLarge);
                    }
                    else if (cpuCount >= 1 && repositaryData.ServerDetails[loc].Large > 0)
                    {
                        if (serverCountList.Exists((server) => server.Item1 == "large"))
                        {
                            var updateServer = serverCountList.Find((x) => x.Item1 == "large");
                            updateServer.Item2 += 1;
                            serverCountList.RemoveAll((x) => x.Item1 == "large");
                            serverCountList.Add(updateServer);
                        }
                        else
                        {
                            serverCountList.Add(("large", 1));
                        }
                        cpuCount -= serverTypes[ServerListEnum.large];
                        price    += repositaryData.ServerDetails[loc].Large;
                    }
                    else
                    {
                        break;
                    }
                }
                responseObjects.Add(new ResponseObject()
                {
                    Server = serverCountList, Region = loc, Price = price
                });
            }
            return(responseObjects);
        }