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