Software /
code /
prosody
File
util/throttle.lua @ 6429:675aea867574
plugins/muc: Add muc-occupant-groupchat event
- Plugins can cancel messages before they are broadcast; and while they still have real from jid
- Use it for subject changes
- Allows for custom roles (via role_rank)
- Roles are now checked before subject
- Removed muc-subject-change event
author | daurnimator <quae@daurnimator.com> |
---|---|
date | Thu, 25 Sep 2014 17:43:00 -0400 |
parent | 4952:0e9a5b63206a |
child | 6777:5de6b93d0190 |
line wrap: on
line source
local gettime = require "socket".gettime; local setmetatable = setmetatable; local floor = math.floor; module "throttle" local throttle = {}; local throttle_mt = { __index = throttle }; function throttle:update() local newt = gettime(); local elapsed = newt - self.t; self.t = newt; local balance = floor(self.rate * elapsed) + self.balance; if balance > self.max then self.balance = self.max; else self.balance = balance; end return self.balance; end function throttle:peek(cost) cost = cost or 1; return self.balance >= cost or self:update() >= cost; end function throttle:poll(cost, split) if self:peek(cost) then self.balance = self.balance - cost; return true; else local balance = self.balance; if split then self.balance = 0; end return false, balance, (cost-balance); end end function create(max, period) return setmetatable({ rate = max / period, max = max, t = 0, balance = max }, throttle_mt); end return _M;