Browse Source

upd v1 - call, list -> dict

221V 3 years ago
parent
commit
50de55a291
1 changed files with 23 additions and 27 deletions
  1. 23 27
      apps/myapp/src/myapp_events.erl

+ 23 - 27
apps/myapp/src/myapp_events.erl

@@ -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),