1 /*
2  * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
3  * Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
4  *
5  * Version: MPL 1.1
6  *
7  * The contents of this file are subject to the Mozilla Public License Version
8  * 1.1 (the "License"); you may not use this file except in compliance with
9  * the License. You may obtain a copy of the License at
10  * http://www.mozilla.org/MPL/
11  *
12  * Software distributed under the License is distributed on an "AS IS" basis,
13  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
14  * for the specific language governing rights and limitations under the
15  * License.
16  *
17  * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
18  *
19  * The Initial Developer of the Original Code is
20  * Anthony Minessale II <anthm@freeswitch.org>
21  * Portions created by the Initial Developer are Copyright (C)
22  * the Initial Developer. All Rights Reserved.
23  *
24  * Contributor(s):
25  *
26  * Anthony Minessale II <anthm@freeswitch.org>
27  *
28  *
29  * switch_scheduler.h -- Scheduler Engine
30  *
31  */
32 
33 #ifndef SWITCH_SCHEDULER_H
34 #define SWITCH_SCHEDULER_H
35 
36 #include <switch.h>
37 
38 SWITCH_BEGIN_EXTERN_C
39 ///\defgroup sched1 Scheduler
40 ///\ingroup core1
41 ///\{
42 	struct switch_scheduler_task {
43 	int64_t created;
44 	int64_t runtime;
45 	uint32_t cmd_id;
46 	uint32_t repeat;
47 	char *group;
48 	void *cmd_arg;
49 	uint32_t task_id;
50 	unsigned long hash;
51 };
52 
53 
54 /*!
55   \brief Schedule a task in the future
56   \param task_runtime the time in epoch seconds to execute the task.
57   \param func the callback function to execute when the task is executed.
58   \param desc an arbitrary description of the task.
59   \param group a group id tag to link multiple tasks to a single entity.
60   \param cmd_id an arbitrary index number be used in the callback.
61   \param cmd_arg user data to be passed to the callback.
62   \param flags flags to alter behaviour
63   \return the id of the task
64 */
65 SWITCH_DECLARE(uint32_t) switch_scheduler_add_task(time_t task_runtime,
66 												   switch_scheduler_func_t func,
67 												   const char *desc, const char *group, uint32_t cmd_id, void *cmd_arg, switch_scheduler_flag_t flags);
68 
69 /*!
70   \brief Delete a scheduled task
71   \param task_id the id of the task
72   \return the number of jobs deleted
73 */
74 SWITCH_DECLARE(uint32_t) switch_scheduler_del_task_id(uint32_t task_id);
75 
76 /*!
77   \brief Delete a scheduled task based on the group name
78   \param group the group name
79   \return the number of jobs deleted
80 */
81 SWITCH_DECLARE(uint32_t) switch_scheduler_del_task_group(const char *group);
82 
83 
84 /*!
85   \brief Start the scheduler system
86 */
87 SWITCH_DECLARE(void) switch_scheduler_task_thread_start(void);
88 
89 /*!
90   \brief Stop the scheduler system
91 */
92 SWITCH_DECLARE(void) switch_scheduler_task_thread_stop(void);
93 
94 ///\}
95 
96 SWITCH_END_EXTERN_C
97 #endif
98 /* For Emacs:
99  * Local Variables:
100  * mode:c
101  * indent-tabs-mode:t
102  * tab-width:4
103  * c-basic-offset:4
104  * End:
105  * For VIM:
106  * vim:set softtabstop=4 shiftwidth=4 tabstop=4 noet:
107  */
108