60 lines
1.7 KiB
Kotlin
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)
|
|
}
|
|
}
|