From fc1b0999a35bba9760d9d58395fb04581784c160 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sun, 25 Dec 2016 16:45:15 +0100 Subject: watchlist --- rate.go | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'rate.go') diff --git a/rate.go b/rate.go index c4c9668..a4b630e 100644 --- a/rate.go +++ b/rate.go @@ -1,3 +1,37 @@ package main +import ( + "sync" + "time" +) + // TODO rate limiting + +type WatchList struct { + sync.Mutex + n int + d time.Duration + list map[string]int +} + +func NewWatchList(n int, d time.Duration) WatchList { + return WatchList{n: n, d: d, list: make(map[string]int)} +} + +func (w WatchList) Add(kick chan string, nick string) { + w.Lock() + defer w.Unlock() + if _, ok := w.list[nick]; !ok { + go func() { + <-time.After(w.d) + w.Lock() + delete(w.list, nick) + w.Unlock() + }() + } + w.list[nick]++ + if w.list[nick] > w.n { + kick <- nick + } + return +} -- cgit v1.2.3