lm-sistemi-software-distrib.../src/main/kotlin/util/network/epidemic/consinstence/AverageNode.kt

59 lines
1.5 KiB
Kotlin

package util.network.epidemic.consinstence
import util.network.epidemic.EpidemicNode
import util.network.epidemic.EpidemicPacket
import util.network.epidemic.EpidemicPacketPrototype
import util.network.epidemic.replay.ReplayPacket
import util.network.epidemic.replay.ReplayPacketPrototype
import util.network.simulator.Address
import util.network.simulator.Network
class AverageNode(
address: Address,
network: Network,
initialValue: Double,
bufferSize: Int = 1
) : EpidemicNode<Double, ReplayPacket<Double>>(address, network, initialValue, bufferSize) {
override fun receivePushOrReply(packet: ReplayPacket<Double>) {
val payload = packet.payload
if (packet.isReplay)
changeValue(payload)
else {
val newValue = (nodeValue + payload) / 2
changeValue(newValue)
send(
ReplayPacket(
address,
packet.senderAddress,
newValue,
EpidemicPacket.Type.PUSH,
true
)
)
sendPush()
}
}
override fun receivePull(packet: ReplayPacket<Double>) {
TODO("Not yet implemented")
}
override fun infect() {
Thread.interrupted()
}
override fun makeInfectionPrototypePacket(
type: EpidemicPacket.Type
): EpidemicPacketPrototype<Double> {
return ReplayPacketPrototype(
address,
nodeValue,
type,
false
)
}
}