24 lines
523 B
Scala
24 lines
523 B
Scala
|
|
package akka.docs.routing
|
||
|
|
|
||
|
|
import akka.actor.ActorRef
|
||
|
|
|
||
|
|
//#boundedCapacitor
|
||
|
|
trait BoundedCapacitor {
|
||
|
|
def lowerBound: Int
|
||
|
|
def upperBound: Int
|
||
|
|
|
||
|
|
def capacity(delegates: Seq[ActorRef]): Int = {
|
||
|
|
val current = delegates length
|
||
|
|
var delta = _eval(delegates)
|
||
|
|
val proposed = current + delta
|
||
|
|
|
||
|
|
if (proposed < lowerBound) delta += (lowerBound - proposed)
|
||
|
|
else if (proposed > upperBound) delta -= (proposed - upperBound)
|
||
|
|
|
||
|
|
delta
|
||
|
|
}
|
||
|
|
|
||
|
|
protected def _eval(delegates: Seq[ActorRef]): Int
|
||
|
|
}
|
||
|
|
//#boundedCapacitor
|