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 ;
@@ -34,8 +35,7 @@ public class ClockManager {
3435 final static int CLOCK_INITIAL_VALUE = 0 ;
3536
3637 Topology tp ;
37- HashMap <ClockListener , Integer > listeners = new HashMap <>();
38- HashMap <ClockListener , Integer > countdown = new HashMap <>();
38+ HashMap <ClockListener , ClockListener > listeners = new HashMap <>();
3939 Class <? extends Clock > clockModel = null ;
4040 Clock clock = null ;
4141 int time = CLOCK_INITIAL_VALUE ;
@@ -65,14 +65,7 @@ private void incrementTime() {
6565 }
6666
6767 private void callScheduler () {
68- List <ClockListener > expiredListeners = new ArrayList <>();
69- for (ClockListener cl : listeners .keySet ()) {
70- countdown .put (cl , countdown .get (cl ) - 1 );
71- if (countdown .get (cl ) == 0 ) {
72- expiredListeners .add (cl );
73- countdown .put (cl , listeners .get (cl ));
74- }
75- }
68+ List <ClockListener > expiredListeners = new ArrayList <>(listeners .values ());
7669 tp .getScheduler ().onClock (tp , expiredListeners );
7770 }
7871
@@ -109,8 +102,7 @@ public void setClockModel(Class<? extends Clock> clockModel) {
109102 * in time units.
110103 */
111104 public void addClockListener (ClockListener listener , int period ) {
112- listeners .put (listener , period );
113- countdown .put (listener , period );
105+ listeners .put (listener , new PeriodicClockListener (tp , listener , period ));
114106 }
115107
116108 /**
@@ -119,8 +111,7 @@ public void addClockListener(ClockListener listener, int period) {
119111 * @param listener The listener to register.
120112 */
121113 public void addClockListener (ClockListener listener ) {
122- listeners .put (listener , 1 );
123- countdown .put (listener , 1 );
114+ listeners .put (listener , listener );
124115 }
125116
126117 /**
@@ -131,7 +122,6 @@ public void addClockListener(ClockListener listener) {
131122 */
132123 public void removeClockListener (ClockListener listener ) {
133124 listeners .remove (listener );
134- countdown .remove (listener );
135125 }
136126
137127 /**
0 commit comments