24 #include "../../../core/trace.hpp"
25 #include "../../../core/unicode_conversions.hpp"
29 const TCHAR NetScheduleJobAdd_name[]=
_T(
"NetScheduleJobAdd");
30 const TCHAR NetScheduleJobDel_name[]=
_T(
"NetScheduleJobDel");
32 using namespace libjmmcg;
37 ScheduledTask::ScheduledTask(
void) :
38 LoadLibraryWrapper(netapi32_nt_lib_name),
39 pNetScheduleJobAdd(
reinterpret_cast<NetScheduleJobAddType>(::GetProcAddress(Handle(),NetScheduleJobAdd_name))),
40 pNetScheduleJobDel(
reinterpret_cast<NetScheduleJobDelType>(::GetProcAddress(Handle(),NetScheduleJobDel_name))) {
41 assert(pNetScheduleJobAdd);
42 assert(pNetScheduleJobDel);
45 ScheduledTask::~ScheduledTask(
void) {
46 std::vector<std::pair<std::wstring,
unsigned long> >::iterator iter=jobs.begin();
47 while (iter!=jobs.end()) {
48 (*pNetScheduleJobDel)(iter->first.c_str(),iter->second,iter->second);
49 JMMCG_TRACE(_T(
"ScheduledTask::~ScheduledTask(): Deleted job: ID:")<<iter->second<<_T(
" on machine: ")<<WStringToTString(iter->first));
55 ScheduledTask::AddJob(
const std::wstring &machine,
const AT_INFO &at,
unsigned long &jobid) {
56 if ((*pNetScheduleJobAdd)(machine.c_str(),
const_cast<BYTE *>(
reinterpret_cast<
const BYTE *>(&at)),&jobid)==NERR_Success) {
57 jobs.push_back(jobs_list_type::value_type(machine,jobid));
59 JMMCG_TRACE(_T(
"ScheduledTask::AddJob(...): Added job: ID:")<<jobid<<_T(
" on machine: ")<<WStringToTString(machine));
60 JMMCG_TRACE(_T(
"\tJob time: ")<<Time(at.JobTime));
62 _ultot_s(at.DaysOfMonth,buff,2);
63 TRACE1(_T(
"\tDays it runs on in a month '%032.32s',\n"),buff);
64 _itot_s((
int)at.DaysOfWeek,buff,2);
65 TRACE1(_T(
"\tDays it runs on in a week '%08.8s',\n"),buff);
66 TRACE1(_T(
"\tJob flags: %u,\n"),(
short unsigned int)at.Flags);
67 TRACE1(_T(
"\tCommand line: '%ls'.\n"),at.Command);
75 ScheduledTask::DeleteJob(
const std::wstring &machine,
const unsigned long job_id) {
76 if ((*pNetScheduleJobDel)(machine.c_str(),job_id,job_id)==NERR_Success) {
77 const jobs_list_type::iterator iter(std::find_if(jobs.begin(),jobs.end(),std::bind2nd(SameObj<std::pair<std::wstring,
unsigned long>,jobs_list_type::value_type > (),jobs_list_type::value_type(machine,job_id))));
78 if (iter!=jobs.end()) {
80 JMMCG_TRACE(_T(
"ScheduledTask::DeleteJob(...): Deleted job: ID:")<<job_id<<_T(
" on machine: ")<<WStringToTString(machine));
84 JMMCG_TRACE(_T(
"ScheduledTask::DeleteJob(...): Failed to delete job: ID:")<<job_id<<_T(
" on machine: ")<<WStringToTString(machine));
89 ScheduledTask::Time(
const unsigned long msec) {
92 <<std::setw(2)<<std::setfill(
_T(
'0'))<<msec/3600000
93 <<
_T(
":")<<std::setw(2)<<std::setfill(
_T(
'0'))<<(msec%3600000)/60000
94 <<
_T(
":")<<std::setw(2)<<std::setfill(
_T(
'0'))<<(msec%60000)/1000
95 <<
_T(
".")<<std::setw(2)<<std::setfill(
_T(
'0'))<<msec%1000;