summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpiaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2013-03-21 22:13:08 +0800
committerpiaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2013-03-21 22:13:08 +0800
commit94fa92d230e3b878fd11f3709ae055634636735e (patch)
tree8357d1f27cccdabe576023ffe43cc63068899105
parent9453ef12ab6a9a982b96db062230da977688b430 (diff)
downloadpttbbs-94fa92d230e3b878fd11f3709ae055634636735e.tar
pttbbs-94fa92d230e3b878fd11f3709ae055634636735e.tar.gz
pttbbs-94fa92d230e3b878fd11f3709ae055634636735e.tar.bz2
pttbbs-94fa92d230e3b878fd11f3709ae055634636735e.tar.lz
pttbbs-94fa92d230e3b878fd11f3709ae055634636735e.tar.xz
pttbbs-94fa92d230e3b878fd11f3709ae055634636735e.tar.zst
pttbbs-94fa92d230e3b878fd11f3709ae055634636735e.zip
angel: add probation time for master, to prevent angels being flooded by masters
who send messages few minutes after being assigned. git-svn-id: http://opensvn.csie.org/pttbbs/trunk@5813 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
-rw-r--r--pttbbs/daemon/angelbeats/angelbeats.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/pttbbs/daemon/angelbeats/angelbeats.c b/pttbbs/daemon/angelbeats/angelbeats.c
index 9dc16ce3..d902df1b 100644
--- a/pttbbs/daemon/angelbeats/angelbeats.c
+++ b/pttbbs/daemon/angelbeats/angelbeats.c
@@ -60,6 +60,12 @@ static int debug = 0;
#define ANGELBEATS_REASSIGN_PERIOD (DAY_SECONDS)
#endif
+// A period for master to send message, otherwies consider master as "dummy"
+// and move angel back to schedule list.
+#ifndef ANGELBEATS_ASSIGN_PROBATION_PERIOD
+#define ANGELBEATS_ASSIGN_PROBATION_PERIOD (10*60)
+#endif
+
// Merge activities in every X seconds.
#ifndef ANGELBEATS_ACTIVITY_MERGE_PERIOD
#define ANGELBEATS_ACTIVITY_MERGE_PERIOD (15)
@@ -139,8 +145,16 @@ int angel_list_comp_masters(const void *pva, const void *pvb) {
int angel_list_comp_advanced(const void *pva, const void *pvb) {
AngelInfo *pa = (AngelInfo*) pva, *pb = (AngelInfo*) pvb;
- if (pa->last_assigned != pb->last_assigned)
- return pa->last_assigned > pb->last_assigned ? 1 : -1;
+ time_t now = time(0),
+ assign_a = pa->last_assigned, assign_b = pb->last_assigned;
+
+ if (now - assign_a >= ANGELBEATS_ASSIGN_PROBATION_PERIOD)
+ assign_a -= assign_a % ANGELBEATS_REASSIGN_PERIOD;
+ if (now - assign_b >= ANGELBEATS_ASSIGN_PROBATION_PERIOD)
+ assign_b -= assign_b % ANGELBEATS_REASSIGN_PERIOD;
+
+ if (assign_a != assign_b)
+ return assign_a > assign_b ? 1 : -1;
if (pa->last_activity != pb->last_activity)
return pa->last_activity > pb->last_activity ? 1 : -1;
return pa->masters - pb->masters;
@@ -332,7 +346,6 @@ inc_angel_master(int uid) {
time_t now = time(0);
if (!kanade)
return 0;
- now -= now % ANGELBEATS_REASSIGN_PERIOD;
kanade->masters++;
kanade->last_assigned = now;
return 1;