package li.cil.oc.api.network; import net.minecraft.nbt.NBTTagCompound; /** * These packets represent messages sent using a network card or wireless * network card, and can be relayed by the switch and access point blocks. * <p/> * These will be sent as the payload of <tt>network.message</tt> messages. * <p/> * <em>Important</em>: do <em>not</em> implement this interface. Use the factory * methods in {@link li.cil.oc.api.Network} instead. */ public interface Packet { /** * The address of the <em>original</em> sender of this packet. */ String source(); /** * The address of the destination of the packet. This is <tt>null</tt> for * broadcast packets. */ String destination(); /** * The port this packet is being sent to. */ int port(); /** * The payload of the packet. This will usually only contain simple types, * to allow persisting the packet. */ Object[] data(); /** * The size of the packet's payload. * <p/> * This is computed based on the types in the data array, but is only defined * for primitive types, i.e. null, boolean, integer, boolean byte array and * string. All other types do <em>not</em> contribute to the packet's size. */ int size(); /** * The remaining 'time to live' for this packet. When a packet with a TTL of * zero is received it will not be relayed by switches and access points. It * will however still be received by a network card. */ int ttl(); /** * Generates a copy of the packet, with a reduced time to live. * <p/> * This is called by switches and access points to generate relayed packets. * * @return a copy of this packet with a reduced TTL. */ Packet hop(); /** * Saves the packet's data to the specified compound tag. * <p/> * Restore a packet saved like this using the factory method in the * {@link li.cil.oc.api.Network} class. */ void save(NBTTagCompound nbt); }