Beispiel #1
0
 public ResourceLicense(Agency agency, SystemResource resource)
 {
     Agency      = agency;
     AgencyId    = agency.Id;
     Resource    = resource;
     ResourceId  = resource.Id;
     LicenseDate = DateTime.Now;
 }
Beispiel #2
0
        static void Main(string[] args)
        {
            using (TikSession session = new TikSession(TikConnectorType.Api))
            {
                session.Open(HOST, USER, PASS);

                SystemResource resource = SystemResource.LoadInstance();
                Console.WriteLine("Mikrotik version: {0}", resource.Version);
            }
            Console.ReadLine();
        }
Beispiel #3
0
        /// <summary>
        /// Constructs for the given lower layer.
        /// </summary>
        /// <param name="address">The address of this device.</param>
        /// <param name="connectionType">The type of the connection in use (required in case we have to re-open).</param>
        /// <param name="tikConnection">The lower layer connection for talking to this device.</param>
        /// <param name="options">The options to use.</param>
        /// <param name="sysIdent">The system ident (to create SystemData from).</param>
        /// /// <param name="sysResource">The system resource info (to create SystemData from).</param>
        /// <param name="sysRouterboard">The system routerboard info (to create SystemData from).</param>
        public MikrotikApiDeviceHandler(IpAddress address, TikConnectionType connectionType, ITikConnection tikConnection, IQuerierOptions options, SystemIdentity sysIdent, SystemResource sysResource, SystemRouterboard sysRouterboard)
        {
            if ((options.AllowedApis & this.SupportedApi) == 0)
            {
                throw new ArgumentOutOfRangeException(nameof(options), $"This device handler doesn't support any of the APIs allowed by the IQuerierOptions (allowed: {options.AllowedApis}, supported {this.SupportedApi}).");
            }

            this.sysRouterboard = sysRouterboard ?? throw new ArgumentNullException(nameof(sysRouterboard), "sysRouterboard is null when creating a MikrotikApiDeviceHandler");
            this.sysResource    = sysResource ?? throw new ArgumentNullException(nameof(sysResource), "sysResource is null when creating a MikrotikApiDeviceHandler");
            this.sysIdent       = sysIdent ?? throw new ArgumentNullException(nameof(sysIdent), "sysIdent is null when creating a MikrotikApiDeviceHandler");

            this.Address                = address ?? throw new ArgumentNullException(nameof(address), "address is null when creating a MikrotikApiDeviceHandler");
            this.TikConnection          = tikConnection ?? throw new ArgumentNullException(nameof(tikConnection), "tikConnection is null when creating a MikrotikApiDeviceHandler");
            this.DetectedConnectionType = connectionType;
            this.Options                = options ?? throw new ArgumentNullException(nameof(options), "options are null when creating a MikrotikApiDeviceHandler");
        }
Beispiel #4
0
        public static void UpdateResources(Institute institute, Computer computer, List <SystemResource> systemResources, List <SystemSoftware> systemSoftwares)
        {
            SystemResource knowledge = systemResources[Resource.KNOWLEDGE];
            SystemResource ingenyous = systemResources[Resource.INGENYOUS];
            SystemResource coffee    = systemResources[Resource.COFFEE];
            SystemResource stress    = systemResources[Resource.STRESS];

            //cálculo estrés
            int knowledgeStress = int.Parse(knowledge.Sleep.Split(',')[computer.Resource.KnowledgeLevel]);
            int ingenyousStress = int.Parse(ingenyous.Sleep.Split(',')[computer.Resource.IngenyousLevel]);
            int coffeStress     = int.Parse(coffee.Sleep.Split(',')[computer.Resource.CoffeeLevel]);
            int currentStress   = int.Parse(stress.Increment.Split(',')[computer.Resource.StressLevel]);
            int finalStress     = currentStress - knowledgeStress - ingenyousStress - coffeStress;

            //almacenamiento
            SystemSoftware mySql       = systemSoftwares[Software.MYSQL];
            int            maxResource = int.Parse(mySql.Action1.Split(',')[computer.Software.MySqlVersion]);

            //modificador por estrés
            double modStress = 1 * institute.RateCost;

            if (finalStress < 0)
            {
                modStress = 0.5 * institute.RateCost;
            }

            //conocimiento
            if (computer.Resource.Knowledge < maxResource)
            {
                computer.Resource.Knowledge += double.Parse(knowledge.Increment.Split(',')[computer.Resource.KnowledgeLevel]) * modStress / MINUT;
            }

            //ingenio
            if (computer.Resource.Ingenyous < maxResource)
            {
                computer.Resource.Ingenyous += double.Parse(ingenyous.Increment.Split(',')[computer.Resource.IngenyousLevel]) * modStress / MINUT;
            }

            //café
            if (computer.Resource.Coffee < maxResource)
            {
                computer.Resource.Coffee += double.Parse(coffee.Increment.Split(',')[computer.Resource.CoffeeLevel]) * modStress / MINUT;
            }

            //sleep
            computer.Resource.Stress = finalStress;
        }
Beispiel #5
0
        public async Task <ApiResult> ListByEntity(int[] entitys, SystemResource sr)
        {
            ApiResult ret = new ApiResult();

            try
            {
                List <UploadFile> ufs = await _uploadFileRepo.ListByEntity(entitys, sr);

                ret.data = ufs;
                return(ret);
            }
            catch (Exception ex)
            {
                ret.code = Code.Failure;
                ret.msg  = ex.Message;
                return(ret);
            }
        }
Beispiel #6
0
        public async Task <ApiResult> ListByEntity(int[] entitys, SystemResource sr, UploadShowType ust)
        {
            ApiResult ret = new ApiResult();

            try
            {
                List <object>     objs = new List <object>();
                List <UploadFile> ufs  = await _uploadFileRepo.ListByEntity(entitys, sr);

                if (ufs != null && ufs.Count() > 0)
                {
                    IEnumerable <IGrouping <int, UploadFile> > groupAction = ufs.GroupBy(a => a.Entity);
                    foreach (IGrouping <int, UploadFile> group in groupAction)
                    {
                        if (ust == UploadShowType.Cascader)
                        {
                            objs.Add(new {
                                Entity      = group.Key,
                                UploadFiles = JsonConvert.SerializeObject(UploadFileHelper.CascaderShow(group.ToList()))
                            });
                        }
                        else if (ust == UploadShowType.List)
                        {
                            objs.Add(new
                            {
                                Entity      = group.Key,
                                UploadFiles = JsonConvert.SerializeObject(UploadFileHelper.ListShow(group.ToList()))
                            });
                        }
                    }
                }
                ret.data = objs;
                return(ret);
            }
            catch (Exception ex)
            {
                ret.code = Code.Failure;
                ret.msg  = ex.Message;
                return(ret);
            }
        }
Beispiel #7
0
 public async Task <List <UploadFile> > ListByEntity(int[] ids, SystemResource systemResource)
 {
     return(await WithConnection(async c =>
     {
         var result = await c.QueryAsync <UploadFile>(
             "SELECT uf.id ID,uf.file_name FileName,uf.file_path FilePath,ufr.type,dt.name as TypeName,dt1.name as SystemResourceName," +
             "ufr.system_resource,ufr.entity_id FROM upload_file uf " +
             "left join upload_file_relation ufr on ufr.file_id=uf.id " +
             "left join dictionary_tree dt on ufr.type=dt.id " +
             "left join dictionary_tree dt1 on ufr.system_resource=dt1.id " +
             "WHERE ufr.system_resource=@systemResource and ufr.entity_id in @ids",
             new { systemResource = (int)systemResource, ids });
         if (result != null && result.Count() > 0)
         {
             return result.ToList();
         }
         else
         {
             return null;
         }
     }));
 }
Beispiel #8
0
        public async Task UpdateAsyncTest()
        {
            IServiceCollection services = new ServiceCollection();

            services.AddAuthorizationExtension();
            services.AddScoped <ISystemResourceStore <SystemResource> >(sp =>
            {
                var mockResourceStore = new Mock <ISystemResourceStore <SystemResource> >();
                mockResourceStore.Setup(s => s.UpdateAsync(It.IsAny <SystemResource>(), It.IsAny <CancellationToken>()))
                .Returns((SystemResource resource, CancellationToken _) => Task.FromResult(resource));
                SystemResource[] resources = new SystemResource[] {
                    new SystemResource()
                    {
                        Id = "/Account/Index", Name = "Index", ResourceType = ResourceType.Api, PermissionId = "permission0"
                    },
                    new SystemResource()
                    {
                        Id = "/Account/Create", Name = "Create", ResourceType = ResourceType.Api, PermissionId = "permission1"
                    },
                };
                mockResourceStore.Setup(s => s.FindByIdAsync(It.IsIn("/Account/Index", "/Account/Create", "null"), It.IsAny <CancellationToken>()))
                .Returns((string id, CancellationToken _) => Task.FromResult(resources.FirstOrDefault(r => r.Id == id)));
                return(mockResourceStore.Object);
            });

            services.AddScoped <ISystemPermissionStore <SystemPermission> >(sp =>
                                                                            new Mock <ISystemPermissionStore <SystemPermission> >().Object);

            var mockPermissionMonitor = new Mock <IPermissionMonitor>();

            services.AddScoped <IPermissionMonitor>(sp =>
            {
                mockPermissionMonitor.Setup(p => p.OnResourceChangedAsync(It.IsAny <string>()));
                return(mockPermissionMonitor.Object);
            });
            IServiceProvider serviceProvider = services.BuildServiceProvider();

            using IServiceScope serviceScope = serviceProvider.CreateScope();
            ISystemResourceService <SystemResource> systemResourceService =
                serviceScope.ServiceProvider.GetRequiredService <ISystemResourceService <SystemResource> >();

            await systemResourceService.UpdateAsync(new SystemResource()
            {
                Id = "/Account/Index", Name = "首页", ResourceType = ResourceType.Api, PermissionId = "permission0"
            }, CancellationToken.None);

            mockPermissionMonitor.Verify(p => p.OnResourceChangedAsync("/Account/Index"), Times.Never(), "未改动相关属性,触发调用了OnResourceChangedAsync(\"/Account/Index\")");

            await systemResourceService.UpdateAsync(new SystemResource()
            {
                Id = "/Account/Create", Name = "首页", ResourceType = ResourceType.Api, PermissionId = "permission3"
            }, CancellationToken.None);

            mockPermissionMonitor.Verify(p => p.OnResourceChangedAsync("/Account/Create"), Times.AtLeastOnce(), "改动相关属性,未触发调用了OnResourceChangedAsync(\"/Account/Create\")");

            Task task = systemResourceService.UpdateAsync(new SystemResource()
            {
                Id = "null", Name = "首页", ResourceType = ResourceType.Api, PermissionId = "permission1"
            }, CancellationToken.None);
            await ShouldThrowAsyncExtensions.ShouldThrowAsync <Exception>(task);
        }
Beispiel #9
0
 /// <summary>
 /// Queries the system data via API.<br/>
 /// This implicitly checks whether the connection is open and authentication was successful.
 /// </summary>
 private void QuerySystemData()
 {
     this.sysResource    = this.tikConnection.LoadSingle <SystemResource>();
     this.sysRouterboard = this.tikConnection.LoadSingle <SystemRouterboard>();
     this.sysIdent       = this.tikConnection.LoadSingle <SystemIdentity>();
 }
        public JsonResult GetResources()
        {
            SystemResource resources = new SystemResource();

            return(new JsonResult(resources));
        }
Beispiel #11
0
        public BuildOrder CreateBuildOrder(int instituteId, int computerId, int buildId)
        {
            Computer  computer  = repository.GetComputer(computerId).Result;
            Institute institute = repository.GetInstitute(instituteId).Result;

            int milliToFinish = 60000 / (int)institute.RateTime;
            int building      = buildId % 20;

            int buildLevel = calculateBuildLevel(computer, buildId);

            int needKnowledge = 0;
            int needIngenyous = 0;
            int needCoffee    = 0;
            int needBuild     = 0;

            switch (buildId / 20)
            {
            case 0:
                SystemResource sysResource = repository.GetSystemResources().Result[building - 1];

                needKnowledge = int.Parse(sysResource.NeedKnowledge.Split(',')[buildLevel]);
                needIngenyous = int.Parse(sysResource.NeedIngenyous.Split(',')[buildLevel]);

                //se comprueba si hay suficientes recursos
                if (computer.Resource.Knowledge < needKnowledge || computer.Resource.Ingenyous < needIngenyous)
                {
                    return(null);
                }

                //se comprueba que no hay otra orden
                foreach (BuildOrder b in repository.GetBuildOrders(computerId).Result)
                {
                    if (b.BuildId < 40)
                    {
                        return(null);
                    }
                }

                //se comprueba que no hayas llegado al límite
                if (building == 1 && computer.Resource.KnowledgeLevel >= sysResource.LastVersion)
                {
                    return(null);
                }
                else if (building == 2 && computer.Resource.IngenyousLevel >= sysResource.LastVersion)
                {
                    return(null);
                }
                else if (building == 3 && computer.Resource.CoffeeLevel >= sysResource.LastVersion)
                {
                    return(null);
                }
                else if (building == 4 && computer.Resource.StressLevel >= sysResource.LastVersion)
                {
                    return(null);
                }

                milliToFinish *= int.Parse(sysResource.Time.Split(',')[buildLevel]);

                repository.NotAsyncUpdateResource(computer.Resource);
                break;

            case 1:
                SystemSoftware sysSoftware = repository.GetSystemSoftwares().Result[building - 1];

                needKnowledge = int.Parse(sysSoftware.NeedKnowledge.Split(',')[buildLevel]);
                needIngenyous = int.Parse(sysSoftware.NeedIngenyous.Split(',')[buildLevel]);
                needCoffee    = int.Parse(sysSoftware.NeedCoffee.Split(',')[buildLevel]);

                //se comprueba si hay suficientes recursos
                if (computer.Resource.Knowledge < needKnowledge || computer.Resource.Ingenyous < needIngenyous || computer.Resource.Coffee < needCoffee)
                {
                    return(null);
                }

                //se comprueba que no hay otra orden
                foreach (BuildOrder b in repository.GetBuildOrders(computerId).Result)
                {
                    if (b.BuildId < 40)
                    {
                        return(null);
                    }
                }

                //se comprueba que no hayas llegado al límite
                if (building == 1 && computer.Software.GeditVersion >= sysSoftware.LastVersion)
                {
                    return(null);
                }
                else if (building == 2 && computer.Software.MySqlVersion >= sysSoftware.LastVersion)
                {
                    return(null);
                }
                else if (building == 3 && computer.Software.GitHubVersion >= sysSoftware.LastVersion)
                {
                    return(null);
                }
                else if (building == 4 && computer.Software.StackOverFlowVersion >= sysSoftware.LastVersion)
                {
                    return(null);
                }
                else if (building == 5 && computer.Software.PostManVersion >= sysSoftware.LastVersion)
                {
                    return(null);
                }
                else if (building == 6 && computer.Software.VirtualMachineVersion >= sysSoftware.LastVersion)
                {
                    return(null);
                }

                milliToFinish *= int.Parse(sysSoftware.Time.Split(',')[buildLevel]);

                break;

            case 2:
                SystemTalent sysTalent = repository.GetSystemTalents().Result[building - 1];

                needKnowledge = int.Parse(sysTalent.NeedKnowledge.Split(',')[buildLevel]);
                needIngenyous = int.Parse(sysTalent.NeedIngenyous.Split(',')[buildLevel]);
                needCoffee    = int.Parse(sysTalent.NeedCoffee.Split(',')[buildLevel]);
                needBuild     = int.Parse(sysTalent.NeedBuild.Split(',')[buildLevel]);

                //se comprueba si hay suficientes recursos
                if (computer.Resource.Knowledge < needKnowledge || computer.Resource.Ingenyous < needIngenyous || computer.Resource.Coffee < needCoffee || computer.Software.StackOverFlowVersion < needBuild)
                {
                    return(null);
                }

                //se comprueba que no haya otra orden
                foreach (BuildOrder b in repository.GetBuildOrders(computerId).Result)
                {
                    if (b.BuildId >= 40 && b.BuildId < 60)
                    {
                        return(null);
                    }
                }

                //se comprueba que no hayas llegado al límite
                if (building == 1 && computer.Talent.RefactorLevel >= sysTalent.LastVersion)
                {
                    return(null);
                }
                else if (building == 2 && computer.Talent.InheritanceLevel >= sysTalent.LastVersion)
                {
                    return(null);
                }
                else if (building == 3 && computer.Talent.InjectionLevel >= sysTalent.LastVersion)
                {
                    return(null);
                }
                else if (building == 4 && computer.Talent.UdpLevel >= sysTalent.LastVersion)
                {
                    return(null);
                }
                else if (building == 5 && computer.Talent.TcpIpLevel >= sysTalent.LastVersion)
                {
                    return(null);
                }
                else if (building == 6 && computer.Talent.SftpLevel >= sysTalent.LastVersion)
                {
                    return(null);
                }
                else if (building == 7 && computer.Talent.EcbLevel >= sysTalent.LastVersion)
                {
                    return(null);
                }
                else if (building == 8 && computer.Talent.RsaLevel >= sysTalent.LastVersion)
                {
                    return(null);
                }
                else if (building == 9 && computer.Talent.SslLevel >= sysTalent.LastVersion)
                {
                    return(null);
                }

                milliToFinish *= int.Parse(sysTalent.Time.Split(',')[buildLevel]);

                break;

            case 3:
                SystemScript sysScript = repository.GetSystemScripts().Result[building - 1];

                needKnowledge = sysScript.NeedKnowledge;
                needIngenyous = sysScript.NeedIngenyous;
                needCoffee    = sysScript.NeedCoffee;

                //se comprueba si hay suficientes recursos
                if (computer.Resource.Knowledge < needKnowledge || computer.Resource.Ingenyous < needIngenyous || computer.Resource.Coffee < needCoffee)
                {
                    return(null);
                }

                //se comprueba que no haya otra orden
                foreach (BuildOrder b in repository.GetBuildOrders(computerId).Result)
                {
                    if (b.BuildId >= 60)
                    {
                        return(null);
                    }
                }

                //TODO: se comprueba que no hayas llegado al límite

                milliToFinish *= sysScript.Time;

                break;
            }

            //consumo de recursos
            computer.Resource.Knowledge -= needKnowledge;
            computer.Resource.Ingenyous -= needIngenyous;
            computer.Resource.Coffee    -= needCoffee;

            repository.NotAsyncUpdateResource(computer.Resource);

            BuildOrder buildOrder = new BuildOrder(computerId, milliToFinish, buildId);

            return(repository.SaveBuildOrder(buildOrder).Result);
        }
Beispiel #12
0
        public ActionResult ListByEntity2(string entitys, SystemResource sr)
        {
            var ret = _uploadService.ListByEntity(entitys.Split(',').Select(a => Convert.ToInt32(a)).ToArray(), sr);

            return(Ok(ret.Result));
        }