2121package io .jbotsim .core ;
2222
2323import io .jbotsim .core .event .ClockListener ;
24+ import io .jbotsim .core .event .PeriodicClockListener ;
2425
2526import java .lang .reflect .Constructor ;
2627import java .util .ArrayList ;
3233 */
3334public class ClockManager {
3435 Topology tp ;
35- HashMap <ClockListener , Integer > listeners = new HashMap <>();
36- HashMap <ClockListener , Integer > countdown = new HashMap <>();
36+ HashMap <ClockListener , ClockListener > listeners = new HashMap <>();
3737 Class <? extends Clock > clockModel = null ;
3838 Clock clock = null ;
3939 Integer time = 0 ;
@@ -45,14 +45,7 @@ public class ClockManager {
4545 }
4646
4747 public void onClock () {
48- List <ClockListener > expiredListeners = new ArrayList <>();
49- for (ClockListener cl : listeners .keySet ()) {
50- countdown .put (cl , countdown .get (cl ) - 1 );
51- if (countdown .get (cl ) == 0 ) {
52- expiredListeners .add (cl );
53- countdown .put (cl , listeners .get (cl ));
54- }
55- }
48+ List <ClockListener > expiredListeners = new ArrayList <>(listeners .values ());
5649 tp .getScheduler ().onClock (tp , expiredListeners );
5750 time ++;
5851 }
@@ -90,8 +83,7 @@ public void setClockModel(Class<? extends Clock> clockModel) {
9083 * in time units.
9184 */
9285 public void addClockListener (ClockListener listener , int period ) {
93- listeners .put (listener , period );
94- countdown .put (listener , period );
86+ listeners .put (listener , new PeriodicClockListener (tp , listener , period ));
9587 }
9688
9789 /**
@@ -100,8 +92,7 @@ public void addClockListener(ClockListener listener, int period) {
10092 * @param listener The listener to register.
10193 */
10294 public void addClockListener (ClockListener listener ) {
103- listeners .put (listener , 1 );
104- countdown .put (listener , 1 );
95+ listeners .put (listener , listener );
10596 }
10697
10798 /**
@@ -112,7 +103,6 @@ public void addClockListener(ClockListener listener) {
112103 */
113104 public void removeClockListener (ClockListener listener ) {
114105 listeners .remove (listener );
115- countdown .remove (listener );
116106 }
117107
118108 /**
0 commit comments