|
@@ -5,6 +5,7 @@
|
|
|
-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]).
|
|
|
|
|
|
-export([add_task/4, delete_task/2]).
|
|
|
+-export([add_task_b/4, delete_task_b/2]).
|
|
|
|
|
|
|
|
|
-define(IS_STRING(S), (is_list(S) andalso S /= [] andalso is_integer(hd(S)))).
|
|
@@ -28,6 +29,24 @@ when ?IS_STRING(Task_Id), is_integer(Proc_Id) ->
|
|
|
ok.
|
|
|
|
|
|
|
|
|
+add_task_b(Task_Id, Proc_Id, Type, Time)
|
|
|
+when ?IS_STRING(Task_Id), is_integer(Proc_Id), ((Type =:= static) orelse (Type =:= dynamic)), is_integer(Time) ->
|
|
|
+ Time2 = case Type of
|
|
|
+ dynamic ->
|
|
|
+ erlang:system_time(second) + Time; % Timestamp_Now + Time
|
|
|
+ _ ->
|
|
|
+ % static
|
|
|
+ Time
|
|
|
+ end,
|
|
|
+ gen_server:call(?MODULE, {add_task, {{Task_Id, Proc_Id}, Time2}}).
|
|
|
+
|
|
|
+delete_task_b(Task_Id, Proc_Id)
|
|
|
+when ?IS_STRING(Task_Id), is_integer(Proc_Id) ->
|
|
|
+ gen_server:call(?MODULE, {delete_task, {Task_Id, Proc_Id}}).
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
start_link() ->
|
|
|
gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).
|
|
|
|
|
@@ -39,19 +58,31 @@ init([]) ->
|
|
|
{ok, State}.
|
|
|
|
|
|
|
|
|
+handle_call({add_task, {{_Task_Id, _Proc_Id}, _Time}=V}, _From, State) ->
|
|
|
+ true = ets:insert(events_table, V),
|
|
|
+ %io:format("add/update: ~p ~p~n", [Task_Id, Proc_Id]),
|
|
|
+ {reply, ok, State};
|
|
|
+
|
|
|
+
|
|
|
+handle_call({delete_task, {_Task_Id, _Proc_Id}=V}, _From, State) ->
|
|
|
+ true = ets:delete(events_table, V),
|
|
|
+ %io:format("deleted: ~p ~p~n", [Task_Id, Proc_Id]),
|
|
|
+ {reply, ok, State};
|
|
|
+
|
|
|
+
|
|
|
handle_call(_Req, _From, State) ->
|
|
|
{reply, not_handled, State}.
|
|
|
|
|
|
|
|
|
-handle_cast({add_task, {{Task_Id, Proc_Id}, _Time}=V}, State) ->
|
|
|
+handle_cast({add_task, {{_Task_Id, _Proc_Id}, _Time}=V}, State) ->
|
|
|
ets:insert(events_table, V),
|
|
|
- io:format("add/update: ~p ~p~n", [Task_Id, Proc_Id]),
|
|
|
+ %io:format("add/update: ~p ~p~n", [Task_Id, Proc_Id]),
|
|
|
{noreply, State};
|
|
|
|
|
|
|
|
|
-handle_cast({delete_task, {Task_Id, Proc_Id}=V}, State) ->
|
|
|
+handle_cast({delete_task, {_Task_Id, _Proc_Id}=V}, State) ->
|
|
|
ets:delete(events_table, V),
|
|
|
- io:format("deleted: ~p ~p~n", [Task_Id, Proc_Id]),
|
|
|
+ %io:format("deleted: ~p ~p~n", [Task_Id, Proc_Id]),
|
|
|
{noreply, State};
|
|
|
|
|
|
|
|
@@ -59,10 +90,9 @@ handle_cast(_Req, State) ->
|
|
|
{noreply, State}.
|
|
|
|
|
|
|
|
|
-%handle_info(check_time_process, []) ->
|
|
|
-% erlang:send_after(1000, self(), check_time_process),
|
|
|
-% {noreply, []};
|
|
|
handle_info(check_time_process, State) ->
|
|
|
+ erlang:send_after(1000, self(), check_time_process),
|
|
|
+
|
|
|
Timestamp_Now = erlang:system_time(second),
|
|
|
|
|
|
%ets:fun2ms(fun({{A,B},C}) when C =< Timestamp_Now -> {{A,B},C} end).
|
|
@@ -73,11 +103,11 @@ handle_info(check_time_process, State) ->
|
|
|
lists:foldl(fun({{Task_Id0, Proc_Id0}=V, _Time0}, ok) ->
|
|
|
% send_to_rabbitmq({call_timer, Proc_Id0, Task_Id0}),
|
|
|
ets:delete(events_table, V),
|
|
|
- io:format("tick: ~p ~p~n", [Task_Id0, Proc_Id0]),
|
|
|
+ %io:format("tick: ~p ~p~n", [Task_Id0, Proc_Id0]),
|
|
|
ok
|
|
|
end, ok, L),
|
|
|
|
|
|
- erlang:send_after(1000, self(), check_time_process),
|
|
|
+ %erlang:send_after(1000, self(), check_time_process),
|
|
|
{noreply, State};
|
|
|
|
|
|
|