Sym. Konstanten aus .h nutzen, besser benannt
Der walk_master benutzt nun die MAX_MASTER_TIME aus
mnpc.h, damit die beiden immer im Sync sind und
berechnet die Anzahl der HB(-Slots) mit
__HEART_BEAT_INTERVAL__.
MAX_DELAYTIME wurde umbenannt zu MAX_DELAY_HBS, weil
es keine Zeit ist, sondern ein Delay in HBs.
Change-Id: Ie3c78a4edf753e611219db5d76bb6a0a90e90d5d
diff --git a/p/service/padreic/mnpc/mnpc.h b/p/service/padreic/mnpc/mnpc.h
index 023ada5..50544db 100644
--- a/p/service/padreic/mnpc/mnpc.h
+++ b/p/service/padreic/mnpc/mnpc.h
@@ -11,6 +11,9 @@
// bitte dieses #define benutzen und nicht den direkten Pfad verwenden
#define WALK_MASTER "/p/service/padreic/mnpc/walk_master"
+// max. Wartezeit zwischen 2 Bewegungen (in Sekunden), welche vom walk_master
+// verwaltet wird. (Muss ganzzahlig durch __HEART_BEAT_INTERVAL__ dividierbar
+// sein)
#define MAX_MASTER_TIME 180
// ist automatisch in jedem mnpc gesetzt
diff --git a/p/service/padreic/mnpc/walk_master.c b/p/service/padreic/mnpc/walk_master.c
index 4c973f6..3ae075f 100644
--- a/p/service/padreic/mnpc/walk_master.c
+++ b/p/service/padreic/mnpc/walk_master.c
@@ -21,8 +21,11 @@
#pragma strong_types,rtt_checks
#pragma no_clone,no_inherit
-#define MAX_DELAYTIME 90 /* max. delay ist 2*MAX_DELAYTIME */
-#define DEFAULT_WALK_DELAY 180 /* ist der billigste Wert :) */
+#include "/p/service/padreic/mnpc/mnpc.h"
+
+#define MAX_DELAY_HBS (MAX_MASTER_TIME/__HEART_BEAT_INTERVAL__)
+#define DEFAULT_WALK_DELAY MAX_MASTER_TIME /* ist der billigste Wert :) */
+
/* Ab welcher Rest-Tickmenge wird die Verarbeitung von Walkers unterbrochen */
#define MAX_JOB_COST 200000
@@ -48,7 +51,7 @@
protected void create()
{
- walker=map(allocate(MAX_DELAYTIME+1), #'allocate);
+ walker=map(allocate(MAX_DELAY_HBS+1), #'allocate);
}
#define ERROR(x) raise_error(sprintf(x, previous_object()));
@@ -59,7 +62,7 @@
// pruefen ob die Paramter zulaessig sind...
if (time<0) ERROR("negative time to RegisterWalker() from %O.\n");
if (rand<0) ERROR("negative random to RegisterWalker() from %O.\n");
- if ((time+rand) > (2*MAX_DELAYTIME))
+ if ((time+rand) > (MAX_MASTER_TIME))
ERROR("Too long delaytime from %s to RegisterWalker().\n");
if (Registration())
@@ -89,9 +92,9 @@
set_heart_beat(1);
}
int next=counter;
- //min. 1 Heartbeat delay erzwingen
- next += max(1, (time+random(rand))/2);
- if (next>MAX_DELAYTIME) next-=MAX_DELAYTIME;
+ //min. 1 Heartbeat delay erzwingen, ab jetzt in Heartbeats
+ next += max(1, (time+random(rand))/__HEART_BEAT_INTERVAL__);
+ if (next>MAX_DELAY_HBS) next-=MAX_DELAY_HBS;
walker[next]+=({ func });
clients += ([ get_type_info(func, 2): func; wert; next ]);
}
@@ -158,9 +161,10 @@
// diesen aktuellen zeitslot wieder ein (ja, Magier tun solche
// Dinge), der ja nach Abarbeiten des Slots genullt wird.
int next = counter
- + max(1, (TIME(delay) + random(RANDOM(delay)))/2);
- if (next > MAX_DELAYTIME)
- next -= MAX_DELAYTIME;
+ + max(1, (TIME(delay) + random(RANDOM(delay)))
+ /__HEART_BEAT_INTERVAL__);
+ if (next > MAX_DELAY_HBS)
+ next -= MAX_DELAY_HBS;
walker[next] += ({ func });
clients[mnpc, WALK_TIMESLOT] = next;
}
@@ -175,7 +179,7 @@
walker[counter]=({}); // fertiger Zeitslot, komplett leeren
}
// Wrap-around am Ende des Arrays.
- if (counter == MAX_DELAYTIME)
+ if (counter == MAX_DELAY_HBS)
counter=0;
else
counter++;