@@ -55,8 +55,7 @@ init(_)->
5555% % Function: handle_info/2
5656% % Purpose: handle the messages` processing of the gen_server, accepts two parameters: message and the old state of gen_server.
5757% % could be called by: polling_supervisor!{message}
58- % % Returns: {noreply, NewState}
59- % % Side effects: send message to specific poller and update the state of gen_server.
58+ % % Returns: {noreply, State}
6059% % @end
6160-spec handle_info (any (), any ()) -> tuple ().
6261handle_info ({print , Message }, State )->
@@ -77,10 +76,10 @@ handle_cast({create_poller, #pollerInfo{stream_id = StreamId, name = StreamName,
7776 Parser = poll_help :get_parser_by_id (StreamId ),
7877
7978 {ok , Pid }= supervisor :start_child (polling_monitor , [# state {stream_id = StreamId , uri = Uri , parser = Parser }]),
80- Record = # pollerInfo {stream_id = StreamId , name = StreamName , uri = Uri , frequency = Frequency , pid = Pid },
8179 % %use timer library to create scheduler for this poller
8280 timer :start (),
83- timer :send_interval (Frequency , Pid , {probe }),
81+ {ok , TRef } = timer :send_interval (Frequency , Pid , {probe }),
82+ Record = # pollerInfo {stream_id = StreamId , name = StreamName , uri = Uri , frequency = Frequency , pid = Pid , timer_ref = TRef },
8483 {noreply , [Record |PollersInfo ]};
8584handle_cast ({terminate , StreamId }, PollersInfo )->
8685 % % erlang:display("receive cast: {terminate, ResourceId}"),
@@ -103,17 +102,13 @@ handle_cast({rebuild, StreamId}, PollersInfo)->
103102 erlang :display (" the error in finding poller: " ++ ErrMessage ),
104103 NewPollersInfo = PollersInfo ;
105104 _ ->
106- {update , StreamId , NewUri } = gen_server :call (Poller # pollerInfo .pid , {rebuild }),
105+ {update , StreamId , NewUri , NewFreq } = gen_server :call (Poller # pollerInfo .pid , {rebuild }),
106+ {ok , cancel } = timer :cancel (Poller # pollerInfo .timer_ref ),
107+ {ok , NewTRef } = timer :send_interval (NewFreq , Poller # pollerInfo .pid , {probe }),
107108 % %change the url of the poller information stored
108- NewPollersInfo = update_info (PollersInfo , StreamId , NewUri )
109+ NewPollersInfo = update_info (PollersInfo , StreamId , NewUri , NewTRef )
109110 end ,
110- {noreply , NewPollersInfo };
111- handle_cast ({add_new_poller , Poller }, PollersInfo )->
112- % % erlang:display("receive cast: {add_new_poller, Poller}"),
113- {noreply , [Poller |PollersInfo ]};
114- handle_cast ({update , StreamId , NewUri }, PollersInfo )->
115- % % erlang:display("receive cast: {update, ResourceId, NewUrl}"),
116- {noreply , update_info (PollersInfo , StreamId , NewUri )}.
111+ {noreply , NewPollersInfo }.
117112
118113% % @doc
119114% % Function: handle_call/2
@@ -186,17 +181,17 @@ delete_info([Poller|Tail], StreamId)->
186181 end .
187182
188183% % @doc
189- % % Function: update_info/3
184+ % % Function: update_info/4
190185% % Purpose: after poller done its rebuild, supervisor uses this function to update its pollers` info store.
191186% % Returns: NewPollersRecordList | []
192187% % @end
193- -spec update_info (list (tuple ()), integer (), string ()) -> list ().
194- update_info ([], _ , _ ) -> [];
195- update_info ([Poller |Tail ], StreamId , NewUri ) ->
188+ -spec update_info (list (tuple ()), integer (), string (), integer () ) -> list ().
189+ update_info ([], _ , _ , _ ) -> [];
190+ update_info ([Poller |Tail ], StreamId , NewUri , NewTRef ) ->
196191 case Poller # pollerInfo .stream_id == StreamId of
197192 true ->
198- [Poller # pollerInfo {uri = NewUri } | Tail ];
193+ [Poller # pollerInfo {uri = NewUri , timer_ref = NewTRef } | Tail ];
199194 _ ->
200- [Poller | update_info (Tail , StreamId , NewUri )]
195+ [Poller | update_info (Tail , StreamId , NewUri , NewTRef )]
201196 end .
202197
0 commit comments