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

60 lines
1.7 KiB
Kotlin

package util.network.epidemic
import util.network.simulator.Address
import util.network.simulator.packet.Packet
import util.network.simulator.packet.PayloadPacket
import util.network.simulator.packet.PayloadPacketPrototype
open class EpidemicPacket<T>(
override val senderAddress: Address,
override val receiverAddress: Address,
override val payload: T,
val type: Type
) : PayloadPacket<T> {
fun clone(
senderAddress: Address = this.senderAddress,
receiverAddress: Address = this.receiverAddress,
payload: T = this.payload,
type: Type = this.type
): EpidemicPacket<T> =
EpidemicPacket(senderAddress, receiverAddress, payload, type)
enum class Type {
PUSH, PULL, PUSHPULL, REPLY
}
companion object {
fun <T> createFromNetworkPacket(
packet: Packet,
payload: TimePayload<T>,
type: Type
): EpidemicPacket<TimePayload<T>> = EpidemicPacket(
packet.senderAddress,
packet.receiverAddress,
payload,
type
)
fun <T> createFromPayloadPacket(
packet: PayloadPacket<TimePayload<T>>,
type: Type
): EpidemicPacket<TimePayload<T>> = EpidemicPacket(
packet.senderAddress,
packet.receiverAddress,
packet.payload,
type
)
}
}
open class EpidemicPacketPrototype<T>(
override val senderAddress: Address,
override val payload: T,
val type: EpidemicPacket.Type
) : PayloadPacketPrototype<T> {
open fun makePacket(receiverAddress: Address): EpidemicPacket<T> {
return EpidemicPacket(senderAddress, receiverAddress, payload, type)
}
}