|
@@ -19,13 +19,11 @@ when ?IS_STRING(Task_Id), is_integer(Proc_Id), ((Type =:= static) orelse (Type =
|
|
|
% static
|
|
|
Time
|
|
|
end,
|
|
|
- gen_server:cast(?MODULE, {add_task, {Task_Id, Proc_Id, Time2}}),
|
|
|
- ok.
|
|
|
+ gen_server:call(?MODULE, {add_task, {Task_Id, Proc_Id, Time2}}).
|
|
|
|
|
|
delete_task(Task_Id, Proc_Id)
|
|
|
when ?IS_STRING(Task_Id), is_integer(Proc_Id) ->
|
|
|
- gen_server:cast(?MODULE, {delete_task, {Task_Id, Proc_Id}}),
|
|
|
- ok.
|
|
|
+ gen_server:call(?MODULE, {delete_task, {Task_Id, Proc_Id}}).
|
|
|
|
|
|
|
|
|
start_link() ->
|
|
@@ -34,34 +32,32 @@ start_link() ->
|
|
|
|
|
|
init([]) ->
|
|
|
erlang:send_after(100, self(), check_time_process),
|
|
|
- State = [],
|
|
|
+ State = dict:new(),
|
|
|
{ok, State}.
|
|
|
|
|
|
|
|
|
-handle_call(_Req, _From, State) ->
|
|
|
- {reply, not_handled, State}.
|
|
|
+handle_call({add_task, {Task_Id, Proc_Id, Time}}, _From, State) ->
|
|
|
+ case dict:is_key({Task_Id, Proc_Id}, State) of
|
|
|
+ true -> io:format("update: ~p ~p~n", [Task_Id, Proc_Id]);
|
|
|
+ _ -> ok
|
|
|
+ end,
|
|
|
+
|
|
|
+ State2 = dict:store({Task_Id, Proc_Id}, Time, State),
|
|
|
+ {reply, ok, State2};
|
|
|
|
|
|
|
|
|
-handle_cast({add_task, {Task_Id, Proc_Id, _Time}=V}, State) ->
|
|
|
- State2 = lists:filter(fun({Task_Id0, Proc_Id0, _Time0}) ->
|
|
|
- if Task_Id =:= Task_Id0 andalso Proc_Id =:= Proc_Id0 ->
|
|
|
- io:format("update: ~p ~p~n", [Task_Id0, Proc_Id0]),
|
|
|
- false;
|
|
|
- true -> true
|
|
|
- end
|
|
|
- end, State),
|
|
|
- {noreply, [V|State2]};
|
|
|
+handle_call({delete_task, {Task_Id, Proc_Id}=K}, _From, State) ->
|
|
|
+ case dict:is_key(K, State) of
|
|
|
+ true -> io:format("deleted: ~p ~p~n", [Task_Id, Proc_Id]);
|
|
|
+ _ -> ok
|
|
|
+ end,
|
|
|
+
|
|
|
+ State2 = dict:erase(K, State),
|
|
|
+ {reply, ok, State2};
|
|
|
|
|
|
|
|
|
-handle_cast({delete_task, {Task_Id, Proc_Id}}, State) ->
|
|
|
- State2 = lists:filter(fun({Task_Id0, Proc_Id0, _Time}) ->
|
|
|
- if Task_Id =:= Task_Id0 andalso Proc_Id =:= Proc_Id0 ->
|
|
|
- io:format("deleted: ~p ~p~n", [Task_Id0, Proc_Id0]),
|
|
|
- false;
|
|
|
- true -> true
|
|
|
- end
|
|
|
- end, State),
|
|
|
- {noreply, State2};
|
|
|
+handle_call(_Req, _From, State) ->
|
|
|
+ {reply, not_handled, State}.
|
|
|
|
|
|
|
|
|
handle_cast(_Req, State) ->
|
|
@@ -75,12 +71,12 @@ handle_info(check_time_process, State) ->
|
|
|
erlang:send_after(1000, self(), check_time_process),
|
|
|
|
|
|
Timestamp_Now = erlang:system_time(second),
|
|
|
- State2 = lists:filtermap(fun({Task_Id0, Proc_Id0, Time0}=V) ->
|
|
|
+ State2 = dict:filter(fun({Task_Id0, Proc_Id0}, Time0) ->
|
|
|
if Time0 =< Timestamp_Now ->
|
|
|
% send_to_rabbitmq({call_timer, Proc_Id0, Task_Id0}),
|
|
|
io:format("tick: ~p ~p~n", [Task_Id0, Proc_Id0]),
|
|
|
false;
|
|
|
- true -> {true, V}
|
|
|
+ true -> true
|
|
|
end
|
|
|
end, State),
|
|
|
|