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

52 lines
1.5 KiB
Kotlin

package util.network.epidemic.consinstence
import util.network.epidemic.TimePayload
import util.network.epidemic.EpidemicNode
import util.network.epidemic.EpidemicPacket
import util.network.epidemic.EpidemicPacketPrototype
import util.network.epidemic.replay.ReplayPacketPrototype
import util.network.simulator.Address
import util.network.simulator.Network
class DbNode<T>(
address: Address,
network: Network,
initialValue: TimePayload<T>,
bufferSize: Int = 1
) : EpidemicNode<TimePayload<T>, EpidemicPacket<TimePayload<T>>>(
address, network, initialValue, bufferSize
) {
override fun receivePushOrReply(packet: EpidemicPacket<TimePayload<T>>) {
val receivedValue = packet.payload
if (nodeValue.timestamp < receivedValue.timestamp)
changeValue(receivedValue)
}
override fun receivePull(packet: EpidemicPacket<TimePayload<T>>) {
val receivedValue = packet.payload
if (nodeValue.timestamp > receivedValue.timestamp)
send(
EpidemicPacket(
address,
packet.senderAddress,
nodeValue,
EpidemicPacket.Type.REPLY
)
)
}
override fun infect() {
sendPushPull()
Thread.sleep(100)
}
override fun makeInfectionPrototypePacket(type: EpidemicPacket.Type): EpidemicPacketPrototype<TimePayload<T>> {
return EpidemicPacketPrototype(
address,
nodeValue,
type
)
}
}