54 lines
1.4 KiB
Kotlin
54 lines
1.4 KiB
Kotlin
package drills.drill09.dbreplica
|
|
|
|
import util.network.epidemic.TimePayload
|
|
import util.network.epidemic.EpidemicNode
|
|
import util.network.epidemic.EpidemicPacket
|
|
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 makeInfectionPacket(
|
|
receiverAddress: Address,
|
|
type: EpidemicPacket.Type
|
|
): EpidemicPacket<TimePayload<T>> {
|
|
return EpidemicPacket(
|
|
address,
|
|
receiverAddress,
|
|
nodeValue,
|
|
type
|
|
)
|
|
}
|
|
} |