예제 #1
0
        /// <summary>
        /// 注册组件
        /// </summary>
        /// <param name="baseApi"></param>
        private static void RegisterComponent(IBaseApi baseApi)
        {
            SLogger.Info(nameof(OpenFx), "Registering componnets");
            //最基础的组件
            Lake.RegisterSingleton <IBaseApi>(baseApi);
            Lake.RegisterSingleton <ILake>(Lake);
            SLogger.Info(nameof(OpenFx), "Base components are registered");

            //管理层面的组件
            Lake.RegisterSingleton <ILibsManager, DreamLibManager>();
            Lake.RegisterSingleton <IExtensionTaskManager, ExtensionTaskManagerV2>();
            SLogger.Info(nameof(OpenFx), "Management components are registered");

            //API层面的组件
            Lake.RegisterSingleton <IMd5, Md5Impl>();
            Lake.RegisterSingleton <ISoundService, SoundImpl>();
            Lake.RegisterSingleton <IEmbeddedFileManager, EmbeddedFileManagerImpl>();
            Lake.RegisterSingleton <IOperatingSystemAPI, OSImpl>();
            Lake.RegisterSingleton <IUx, UxImpl>();
            Lake.RegisterSingleton <IResourcesManager, ResManagerImpl>();
            Lake.RegisterSingleton <IAppManager, AppManagerImpl>();
            Lake.RegisterSingleton <IDeviceManager, DeviceManager>();
            Lake.RegisterSingleton <ICompApi, CompImpl>();
            Lake.RegisterSingleton <INotificationManager, NotificationManager>();
            Lake.RegisterSingleton <IXCardsManager, XCardsManager>();
            Lake.RegisterSingleton <IStorageManager, StorageManager>();
            Lake.RegisterSingleton <IOpenFxManager, OpenFxManagerImpl>();
            SLogger.Info(nameof(OpenFx), "Open API components are registered");

            //一些特殊的实时构建组件
            Lake.Register <ICommandExecutor, HestExecutor>();
            Lake.Register <IDevice>(() => Lake.Get <IBaseApi>().SelectedDevice);
            Lake.Register <ILeafUI>(() => Lake.Get <IBaseApi>().NewLeafUI());
        }
예제 #2
0
        public void EntryPoint(IDevice device, ILeafUI ui, IStorageManager storageManager,
                               IAppManager app, ICommandExecutor executor)
        {
            using (ui)
            {
                //初始化LeafUI并展示
                ui.Title = this.GetName();
                ui.Icon  = this.GetIconBytes();
                executor.OutputReceived += (s, e) =>
                {
                    ui.WriteOutput(e.Text);
                    SLogger <EScreenShoter> .Info(e.Text);
                };
                ui.Closing += (s, e) =>
                {
                    executor.Dispose();
                    return(true);
                };

                ui.Show();

                var screencap = new ScreenCap(device, executor, storageManager.CacheDirectory.FullName);
                var file      = screencap.Cap();

                ui.WriteLine(file.FullName);
                ShowOnUI(app, file.FullName);
                //显示出来了,进度窗也没啥用了,直接关闭
                //ui.Finish();
                ui.Shutdown();
            }
        }
예제 #3
0
        public void Inject()
        {
            var injectables = GetInjectables(instance.GetType());

            foreach (var injectable in injectables)
            {
                try
                {
                    object?value = GetValue(injectable.Attr.Id, injectable.ValueType !);
#pragma warning disable CS8604 // 可能的 null 引用参数。
                    injectable.Set(instance, value);
#pragma warning restore CS8604 // 可能的 null 引用参数。
                }
                catch (IdNotFoundException)
                {
                    SLogger <DependenciesInjector> .Info($"Can not found component: {(injectable.Attr.Id ?? injectable.ValueType?.Name)}. Injecting of {instance.GetType().FullName}.{injectable.Name} is skipped");
                }
                catch (TypeNotFoundException)
                {
                    SLogger <DependenciesInjector> .Info($"Can not found component: {(injectable.Attr.Id ?? injectable.ValueType?.Name)}. Injecting of {instance.GetType().FullName}.{injectable.Name} is skipped");
                }
                catch (Exception e)
                {
                    SLogger <DependenciesInjector>
                    .Warn($"Can't inject proerty:{instance.GetType().FullName}.{injectable.Name}", e);
                }
            }
        }
예제 #4
0
        public void Do()
        {
            List <Type> componentsResult = new List <Type>();

            foreach (var assembly in assemblies)
            {
                var components = from type in assembly.GetTypes()
                                 where type.FullName?.StartsWith(prefix) ?? false
                                 where type.GetCustomAttribute <ComponentAttribute>() != null
                                 select type;
                componentsResult.AddRange(components);
            }

            SLogger <ClassComponentsLoader> .Info($"Found {componentsResult.Count()} class component");

            componentsResult.ForEach(t =>
            {
                try
                {
                    ClassComponentRegister.Register(target, t);
                }
                catch (Exception e)
                {
                    SLogger <ClassComponentsLoader> .Exception(e);
                }
            });
        }
예제 #5
0
        protected override void InnerExcute(IJobExecutionContext context)
        {
            try
            {
                SLogger.Info(string.Format("{0}: Starting Push question to QnA job", JobFriendlyName));

                var lastRunTime = SystemReader.GetLastPushQnAJobRunTime();

                var lstQuestion = _qnaService.GetQnAByDate(lastRunTime);

                // call stand alone to execute QnA
                var data = new PushLatestQnA {
                    ListQuestionAndAnswers = lstQuestion.ToList()
                };

                ApiHelper.PostAsyncNoEncrypt(WebApiConstant.XoomPushQuestionStandAloneEndPoint, data).GetAwaiter().GetResult();

                SLogger.Info(string.Format("{0} : - End Push question to QnA job", JobFriendlyName));

                SystemReader.SetLastPushQnAJobRunTime(DateTime.Now);
            }
            catch (Exception ex)
            {
                SLogger.Error(string.Format("{0}: InnerExcute. Push question to QnA job", JobFriendlyName), ex);
            }
        }
        public void Execute(IJobExecutionContext context)
        {
            JobFriendlyName = string.IsNullOrWhiteSpace(JobFriendlyName) ? Guid.NewGuid().ToString() : JobFriendlyName;

            ConfigurationManager.RefreshSection("appSettings");
            try
            {
                SLogger.Info(string.Format("Job {0} starts executing at {1}. Currently logged in as {2}.", JobFriendlyName, DateTime.Now, SystemReader.GetWindowsUsername()));

                //Check if the job is marked as disabled in the config
                if (!string.IsNullOrWhiteSpace(ConfigReader.DisableJobsByFriendlyName) && ConfigReader.DisableJobsByFriendlyName.Split(';').Any(j => j.Trim().Equals(JobFriendlyName, StringComparison.InvariantCultureIgnoreCase)))
                {
                    SLogger.Info(string.Format("Job {0} has been marked as disabled in the config file, therefore it does not execute this time.", JobFriendlyName));
                }
                else
                {
                    SLogger.Info(string.Format("Job {0} is executing...", JobFriendlyName));
                    InnerExcute(context);
                }
                SLogger.Info(string.Format("Job {0} finishes executing at {1}. Currently logged in as {2}.", JobFriendlyName, DateTime.Now, SystemReader.GetWindowsUsername()));
            }
            catch (Exception ex)
            {
                SLogger.Error(ex);
                SLogger.Info(string.Format("Job {0} stops executing at {1} due to internal errors. Currently logged in as {2}.", JobFriendlyName, DateTime.Now, SystemReader.GetWindowsUsername()));
            }
        }
예제 #7
0
        private IEnumerable <ILibrarian> GetLibManagers(IEnumerable <Assembly> assemblies)
        {
            var result = new List <ILibrarian>();

            foreach (var assembly in assemblies)
            {
                try
                {
                    var libManagerTypes = (from type in assembly.GetTypes()
                                           where typeof(ILibrarian).IsAssignableFrom(type)
                                           select type);

                    if (libManagerTypes.Any())
                    {
                        result.Add(BuildLibrarian(libManagerTypes.First()));
                    }
                    else
                    {
                        result.Add(BuildLibrarian(assembly));
                    }
                }
                catch (Exception e)
                {
                    SLogger <DreamLibManager> .Warn($"Can not create the instance of {assembly.GetName().Name}'s librarian", e);
                }
            }
            SLogger <DreamLibManager> .Info($"There are {result.Count()} librarians");

            foreach (var lib in result)
            {
                SLogger <DreamLibManager> .Info($"{lib.Name}");
            }
            return(result);
        }
예제 #8
0
        private IEnumerable <Assembly> GetAssemblies(IEnumerable <FileInfo> files)
        {
            var result = new List <Assembly>();

            foreach (var file in files)
            {
                try
                {
                    if (file.Extension == PATTERN_OEXT.Substring(1))
                    {
                        SLogger <DreamLibManager> .Info($"{file} is an aoext");

                        result.Add(Assembly.LoadFile(file.FullName));
                    }
                    else
                    {
                        result.Add(Assembly.Load(File.ReadAllBytes(file.FullName)));
                    }
                }
                catch (Exception e)
                {
                    SLogger <DreamLibManager> .Warn($"can not load extension: {file.Name}", e);
                }
            }
            SLogger <DreamLibManager> .Debug($"There are {result.Count()} assemblies");

            return(result);
        }
예제 #9
0
        private bool TryGetInputEndPoint(ILeafUI ui, IClassTextManager texts, out IPEndPoint endPoint)
        {
            Task <object> dialogTask = ui.ShowDialogById("inputIpEndPoint");

            dialogTask.Wait();
            while (dialogTask.Result != null)
            {
                dynamic result = dialogTask.Result;
                SLogger <ENetDeviceConnecter> .Info(result.Result);

                if (result.IsInputRight == false)
                {
                    ui.ShowMessage(texts["PleaseInputRightIP"]);
                    dialogTask = ui.ShowDialogById("inputIpEndPoint");
                    dialogTask.Wait();
                }
                else
                {
                    endPoint = (IPEndPoint)result.Result;
                    return(true);
                }
            }
            endPoint = null;
            return(false);
        }
예제 #10
0
 public static async Task Writing(int taskId, int maxTime)
 {
     await Task.Run(() =>
     {
         for (int i = 0; i < maxTime; i++)
         {
             SLogger <LoggerTest> .Info($"{taskId}/{i}");
         }
     });
 }
예제 #11
0
        protected override Result ParseJson(string json)
        {
            Result result = base.ParseJson(json);

            byte[] imgData = webClient.DownloadData(result.Link);
            SLogger.Info(this, "Converting");
            result.ImageMemoryStream = new MemoryStream(imgData);
            SLogger.Info(this, "Converted");
            return(result);
        }
예제 #12
0
 public static void Init()
 {
     SLogger.Info("OFM", "Open Fx loading");
     SLogger.Info("OFM", "Injecting API");
     FxLoader.LoadBase(new AutumnBox_GUI_Calller());
     SLogger.Info("OFM", "Injected API");
     SLogger.Info("OFM", "Loading extensions");
     FxLoader.LoadExtensions();
     SLogger.Info("OFM", "Loaded extensions");
 }
예제 #13
0
 public void Initialize()
 {
     Librarians = ReloadLibs(Check(GetLibManagers(GetAssemblies(GetFiles()))));
     Librarians.All((lib) =>
     {
         SLogger <DreamLibManager> .Info($"Calling ready method: {lib.Name}");
         SafeReady(lib);
         return(true);
     });
 }
예제 #14
0
 public static void Init()
 {
     SLogger.Info(TAG, "OpenFx loading");
     SLogger.Info(TAG, "Init OpenFx env");
     OpenFxLoader.InitEnv(GUIApiManager.BaseApiInstance);
     SLogger.Info(TAG, "OpenFx env inited");
     SLogger.Info(TAG, "Load extensions");
     OpenFxLoader.LoadExtensions();
     SLogger.Info(TAG, $"There are {OpenFxLoader.LibsManager.Librarians.Count()} librarians and {OpenFxLoader.LibsManager.Wrappers().Count()} wrappers");
     SLogger.Info(TAG, "Loaded extensions");
 }
예제 #15
0
        /// <summary>
        /// 异步Get请求
        /// </summary>
        /// <param name="url"></param>
        /// <param name="callBack"></param>
        /// <param name="timeout"></param>
        /// <returns></returns>
        public static async Task GetAsync(string url, HttpResponseHandler callBack = null,
                                          double?timeout = null)
        {
            url = NetHelper.FormatRequestUrl(url);

            HttpResponse responseMsg = null;

            // 单机测试,使用FakeData生成随机测试数据模拟网络访问
            if (AppRunConfigs.Instance.IsSingleTestMode)
            {
                var genTypes = callBack.Method.GetGenericArguments();
                SAssert.MustTrue(genTypes.Length == 1, string.Format("非法的泛型回调在PostAsync {0}", genTypes));
                callBack?.Invoke(ClientFakeDataHelper.Instance.CreateFakeDataNetResponse(genTypes[0]), null);
                return;
            }

            SLogger.Info($"Start Get AsyncRequest\nUrl:{url}\n");

            try
            {
                //SetNetDALTimeout(timeout);

                var httpResponse = await s_asyncWebClient.GetAsync(url, HttpCompletionOption.ResponseContentRead);

                string responseContent = null;

                if (httpResponse.IsSuccessStatusCode)
                {
                    var resultStr = await httpResponse.Content.ReadAsStringAsync();

                    responseContent = resultStr;
                }

                responseMsg = new HttpResponse(responseContent, httpResponse.StatusCode);
            }
            catch (HttpRequestException ex)
            {
                //responseMsg = new HttpResponse(ex.ToString(), HttpStatusCode.ExpectationFailed);
                responseMsg             = new HttpResponse("网络请求异常", HttpStatusCode.ExpectationFailed);
                responseMsg.ResponseMsg = ex.ToString();
            }
            catch (Exception ex)
            {
                //responseMsg = new HttpResponse(ex.ToString(), HttpStatusCode.ExpectationFailed);
                responseMsg             = new HttpResponse("系统异常", HttpStatusCode.ExpectationFailed);
                responseMsg.ResponseMsg = ex.ToString();
            }
            finally
            {
                callBack?.Invoke(responseMsg, null);
            }
        }
        public override void Ready()
        {
            base.Ready();
            SLogger <Jibrarian> .Info("Ready");

            Instance     = this;
            this.Storage = storageManager.Open(STORAGE_ID);
            StartJSRTService();
            Regiser(new JSModule("" +
                                 "// @name Test\n" +
                                 "// @author zsh2401\n" +
                                 "function atmbMain(){ throw \"ERROR\" }"));
        }
예제 #17
0
 private void KilProcesses()
 {
     using var cmd = new CommandProcedure()
           {
               FileName  = "taskkill",
               Arguments = "/f /im adb.exe"
           };
     cmd.OutputReceived += (s, e) =>
     {
         SLogger <AdbServerKiller> .Info(e.Text);
     };
     cmd.Execute();
 }
예제 #18
0
        public override void Ready()
        {
            base.Ready();
            Current = this;
            SLogger <EssentialsLibrarin> .Info($"{nameof(EssentialsLibrarin)}'s ready");

            extensionTaskManager.Start(nameof(EAutumnBoxUpdateChecker));
            extensionTaskManager.Start(nameof(EAutumnBoxAdFetcher));
            extensionTaskManager.Start(nameof(EEnableDonateCard));

            var componentLoader = new ClassComponentsLoader("AutumnBox.Essentials", rlake, this.GetType().Assembly);

            componentLoader.Do();
        }
예제 #19
0
 protected virtual void KillServer()
 {
     lock (concurrentLock)
     {
         using var cmd = new CommandProcedure(AdbExecutableFile.ToString(), $"-P{ServerEndPoint.Port} kill-server");
         int line = 0;
         cmd.OutputReceived += (s, e) =>
         {
             line++;
             SLogger.Info(this, $"killing adb server {line}:{e.Text}");
         };
         cmd.Execute();
         SLogger.Info(this, "server killed");
     }
 }
예제 #20
0
        public override void Ready()
        {
            base.Ready();
            Current = this;
            SLogger <EssentialsLibrarin> .Info($"{nameof(EssentialsLibrarin)}'s ready");

            notificationManager.Success("Essentials library is loaded");

            extensionTaskManager.Start("EAutumnBoxUpdateChecker");
            extensionTaskManager.Start("EAutumnBoxAdFetcher");

            var componentLoader = new ClassComponentsLoader("AutumnBox.Essentials", rlake, this.GetType().Assembly);

            componentLoader.Do();
        }
예제 #21
0
        public VMMainWindowV2()
        {
            base.RaisePropertyChangedOnDispatcher = true;
            InitTitle();
            LanguageManager.Instance.LanguageChanged += (s, e) =>
            {
                InitTitle();
            };
            AppLoader.Instance.Loaded += (s, e) =>
            {
                SLogger <VMMainWindowV2> .Info("switching");

                MainWindowBus.SwitchToMainGrid();
                SLogger <VMMainWindowV2> .Info("switched");
            };
        }
예제 #22
0
        protected virtual void KillServer()
        {
            lock (concurrentLock)
            {
                using var cmd = new CommandProcedure()
                      {
                          FileName      = AdbExecutableFile.ToString(),
                          Arguments     = $"-P{ServerEndPoint.Port} kill-server",
                          DirectExecute = true,
                      };
                cmd.InitializeAdbEnvironment(AdbClientDirectory, (ushort)ServerEndPoint.Port);

                new LocalAdbServerKiller(cmd).Kill().Wait();

                SLogger.Info(this, "Adb Server has been stopped.");
            }
        }
예제 #23
0
 public static void SwitchToMainGrid()
 {
     App.Current.Dispatcher.Invoke(() =>
     {
         try
         {
             SLogger.Info(nameof(MainWindowBus), "Panel creating");
             var panel = new PanelMain();
             MainWindow.MainContentContainer.Content = panel;
             SLogger.Info(nameof(MainWindowBus), "Created panel instance");
         }
         catch (Exception e)
         {
             SLogger.Warn(nameof(MainWindowBus), "Could not create panel", e);
         }
     });
 }
예제 #24
0
 public Task Kill()
 {
     return(Task.Run(() =>
     {
         commandKillServer.OutputReceived += (s, e) =>
         {
             SLogger.Info(this, $"{e.Text}");
         };
         commandKillServer.ExecuteAsync();
         Thread.Sleep(MAX_TIMEOUT);
         if (commandKillServer.Status != CommandStatus.Executing && commandKillServer.Result.ExitCode == 0)
         {
             commandKillServer.Cancel();
             commandKillServer.Dispose();
             KilProcesses();
         }
     }));
 }
예제 #25
0
        protected virtual IPEndPoint StartServer(ushort port = 6605)
        {
            using var cmd = new CommandProcedure()
                  {
                      FileName      = AdbExecutableFile.ToString(),
                      Arguments     = $"-P{port} start-server",
                      DirectExecute = true,
                  };
            cmd.InitializeAdbEnvironment(AdbClientDirectory, port);

            int line = 0;

            cmd.OutputReceived += (s, e) =>
            {
                line++;
                SLogger.Info(this, $"statring adb server {line}:{e.Text}");
            };
            cmd.Execute();
            return(new IPEndPoint(IPAddress.Parse("127.0.0.1"), port));
        }
예제 #26
0
        public List <T> Fetch <T>()
        {
            int count = 0;

            while (IsThisInTransaction())
            {
                string fn = _transactionSetters[DBFilename];
                SLogger.Info("Waiting for transaction for 0.5s, caller was " + fn);
                Thread.Sleep(500);
                count++;
                if (count > 240 * 2)
                {
                    throw new FlaException("Waited more than 240s");
                }
            }

            SLogger.Debug("Fetching all " + typeof(T).FullName + " from " + DBFilename);
            lock (Dblock) {
                return(_database.Fetch <T>() ?? throw new FlaException("Fetch failed"));
            }
        }
예제 #27
0
        protected virtual void KillServer()
        {
            lock (concurrentLock)
            {
                using var cmd = new CommandProcedure()
                      {
                          FileName      = AdbExecutableFile.ToString(),
                          Arguments     = $"-P{ServerEndPoint.Port} kill-server",
                          DirectExecute = true,
                      };
                cmd.InitializeAdbEnvironment(AdbClientDirectory, (ushort)ServerEndPoint.Port);

                int line = 0;
                cmd.OutputReceived += (s, e) =>
                {
                    line++;
                    SLogger.Info(this, $"killing adb server {line}:{e.Text}");
                };
                cmd.Execute();
                SLogger.Info(this, "server killed");
            }
        }
예제 #28
0
        public override void Ready()
        {
            base.Ready();
            Storage = storageManager.Open(nameof(EssentialsLibrarin));

            Current = this;
            SLogger <EssentialsLibrarin> .Info($"{nameof(EssentialsLibrarin)}'s ready");

            var last_update_check_time = Storage.ReadJsonObject <DateTime>("last_update_check_time");

            if (last_update_check_time == default || (last_update_check_time - DateTime.Now).TotalDays >= 1)
            {
                extensionTaskManager.Start(nameof(EAutumnBoxUpdateChecker));
                Storage.SaveJsonObject("last_update_check_time", DateTime.Now);
            }
            extensionTaskManager.Start(nameof(EAutumnBoxAdFetcher));
            extensionTaskManager.Start(nameof(EDonateCardRegister));

            var componentLoader = new ClassComponentsLoader("AutumnBox.Essentials", rlake, this.GetType().Assembly);

            componentLoader.Do();
        }
예제 #29
0
        public async Task Do(APIIndex index)
        {
            var result = await new NetReader().Read(index.MotdUrl)
                         .ContinueWith(task => task.Result.ToJson <Result>());

            SLogger <MOTDHandler> .Info(result.Message);

            if (result.ClickUrl != null)
            {
                Growl.Ask(new GrowlInfo()
                {
                    Message         = result.Message,
                    ShowCloseButton = true,
                    ConfirmStr      = result.GoBtnStr ?? "Go",
                    Token           = MainWindowBus.TOKEN_PANEL_MAIN
                });
            }
            else
            {
                MainWindowBus.Info(result.Message);
            }
        }
예제 #30
0
        protected override IPEndPoint StartServer()
        {
            var    random = new Random();
            ushort port;

            do
            {
                port = (ushort)random.Next(IPEndPoint.MinPort, IPEndPoint.MaxPort);
            } while (PortIsUsinngNow(port));
            using (var cmd =
                       new CommandProcedure("adb.exe", $"-P{port} start-server"))
            {
                cmd.KillChildWhenDisposing = false;
                cmd.OutputReceived        += (s, e) =>
                {
                    SLogger <Win32AdbManager> .Info($"adb server starting: {e.Text}");
                };
                cmd.Disposed += (s, e) => SLogger <Win32AdbManager> .Info("Command start-adb disposed");

                cmd.Execute();
            }
            return(new IPEndPoint(IPAddress.Parse("127.0.0.1"), port));
        }