billybong
12/15/2017, 9:28 AMelizarov
12/15/2017, 9:33 AMmarstran
12/15/2017, 9:38 AMbillybong
12/15/2017, 9:51 AMbillybong
12/15/2017, 9:53 AMprivate val collapsingActor = actor<CollapserAgentMsg<ARGUMENT, RETURN_TYPE>>(CommonPool) {
val returnChannelsByArg: MutableMap<ARGUMENT, MutableList<Channel<RETURN_TYPE>>> = HashMap()
for (msg in channel) {
when (msg) {
is CollapserAgentMsg.CollapserTrigger<ARGUMENT, RETURN_TYPE> -> {
callActionFunction(returnChannelsByArg)
returnChannelsByArg.clear()
}
is CollapserAgentMsg.CollapserRequest<ARGUMENT, RETURN_TYPE> -> {
returnChannelsByArg.compute(msg.arg) { _, v ->
val channelList = v ?: mutableListOf()
channelList.add(msg.returnChannel)
channelList
}
val nrOfRequests = returnChannelsByArg.values.flatMap { it }.size
if (nrOfRequests >= threshold) {
channel.send(CollapserAgentMsg.CollapserTrigger<ARGUMENT, RETURN_TYPE>())
}
}
}
}
}
billybong
12/15/2017, 9:54 AMbillybong
12/15/2017, 9:57 AMelizarov
12/15/2017, 9:58 AMbillybong
12/15/2017, 10:03 AMbillybong
12/15/2017, 10:04 AMbillybong
12/15/2017, 10:41 AM