librime 1.2
Rime Input Method Engine, the core library
deployer.h
Go to the documentation of this file.
1//
2// Copyright RIME Developers
3// Distributed under the BSD License
4//
5// 2011-12-01 GONG Chen <chen.sst@gmail.com>
6//
7#ifndef RIME_DEPLOYER_H_
8#define RIME_DEPLOYER_H_
9
10#include <future>
11#include <mutex>
12#include <queue>
13#include <any>
14#include <rime/common.h>
15#include <rime/component.h>
16#include <rime/messenger.h>
17
18namespace rime {
19
20class Deployer;
21
22using TaskInitializer = std::any;
23
24class DeploymentTask : public Class<DeploymentTask, TaskInitializer> {
25 public:
26 DeploymentTask() = default;
27 virtual ~DeploymentTask() = default;
28
29 virtual bool Run(Deployer* deployer) = 0;
30};
31
32class Deployer : public Messenger {
33 public:
34 // read-only access after library initialization {
40 string user_id;
44 string app_name;
46 // }
47
50
51 bool RunTask(const string& task_name,
53 bool ScheduleTask(const string& task_name,
57 bool HasPendingTasks();
58
59 bool Run();
60 bool StartWork(bool maintenance_mode = false);
61 bool StartMaintenance();
62 bool IsWorking();
63 bool IsMaintenanceMode();
64 // the following two methods equally wait until all threads are joined
65 void JoinWorkThread();
67
69
70 private:
71 std::queue<of<DeploymentTask>> pending_tasks_;
72 std::mutex mutex_;
73 std::future<void> work_;
74 bool maintenance_mode_ = false;
75};
76
77} // namespace rime
78
79#endif // RIME_DEPLOYER_H_
#define RIME_DLL
Definition rime_api.h:33
Definition algebra.cc:12
std::shared_ptr< T > an
Definition common.h:60
std::any TaskInitializer
Definition deployer.h:22
Definition common.h:84
Definition component.h:21
virtual ~DeploymentTask()=default
virtual bool Run(Deployer *deployer)=0
DeploymentTask()=default
Definition deployer.h:32
bool backup_config_files
Definition deployer.h:45
bool HasPendingTasks()
Definition deployer.cc:74
string app_name
Definition deployer.h:44
path shared_data_dir
Definition deployer.h:35
string distribution_name
Definition deployer.h:41
path user_data_dir
Definition deployer.h:36
RIME_DLL Deployer()
Definition deployer.cc:15
string user_id
Definition deployer.h:40
void JoinWorkThread()
Definition deployer.cc:141
path prebuilt_data_dir
Definition deployer.h:37
string distribution_version
Definition deployer.h:43
an< DeploymentTask > NextTask()
Definition deployer.cc:62
bool StartWork(bool maintenance_mode=false)
Definition deployer.cc:106
bool ScheduleTask(const string &task_name, TaskInitializer arg=TaskInitializer())
Definition deployer.cc:42
bool Run()
Definition deployer.cc:79
bool IsWorking()
Definition deployer.cc:130
bool StartMaintenance()
Definition deployer.cc:126
path user_data_sync_dir() const
Definition deployer.cc:150
bool RunTask(const string &task_name, TaskInitializer arg=TaskInitializer())
Definition deployer.cc:28
bool IsMaintenanceMode()
Definition deployer.cc:137
string distribution_code_name
Definition deployer.h:42
void JoinMaintenanceThread()
Definition deployer.cc:146
path staging_dir
Definition deployer.h:38
path sync_dir
Definition deployer.h:39
Definition messenger.h:14