public class NewPacketFormat extends java.lang.Object implements PacketFormat
Modifier and Type | Field and Description |
---|---|
static int |
MAX_MESSAGE_SIZE
Maximum message size in bytes.
|
Modifier and Type | Method and Description |
---|---|
boolean |
canSend(SessionKey tracker)
Returns
false if the packet format can't send new messages because it must wait for some internal event. |
void |
checkForLostPackets() |
boolean |
fullPacketQueued(int maxPacketSize)
Is there enough data queued to justify sending a packet immediately? Ideally
this should take into account transport level headers.
|
boolean |
handleReceivedPacket(byte[] buf,
int offset,
int length,
long now,
Peer replyTo) |
boolean |
maybeSendPacket(long now,
boolean ackOnly)
Maybe send something.
|
java.util.List<MessageItem> |
onDisconnect()
Called when the peer has been disconnected.
|
long |
timeCheckForLostPackets() |
long |
timeNextUrgent(boolean canSend,
long now)
When do we need to send a packet?
|
long |
timeSendAcks() |
java.lang.String |
toString() |
public static final int MAX_MESSAGE_SIZE
public boolean handleReceivedPacket(byte[] buf, int offset, int length, long now, Peer replyTo)
handleReceivedPacket
in interface PacketFormat
public boolean maybeSendPacket(long now, boolean ackOnly) throws BlockedTooLongException
PacketFormat
maybeSendPacket
in interface PacketFormat
BlockedTooLongException
public long timeCheckForLostPackets()
timeCheckForLostPackets
in interface PacketFormat
public void checkForLostPackets()
checkForLostPackets
in interface PacketFormat
public java.util.List<MessageItem> onDisconnect()
PacketFormat
onDisconnect
in interface PacketFormat
public long timeNextUrgent(boolean canSend, long now)
timeNextUrgent
in interface PacketFormat
canSend
- If false, canSend() has returned false. Some transports will
want to send a packet anyway e.g. an ack, a resend in some cases.public long timeSendAcks()
timeSendAcks
in interface PacketFormat
public boolean canSend(SessionKey tracker)
PacketFormat
false
if the packet format can't send new messages because it must wait for some internal event.
For example, if a packet sequence number can not be allocated this method should return false
, but if
nothing can be sent because there is no (external) data to send it should not.
Note that this only applies to packets being created from messages on the @see PeerMessageQueue.
Note also that there may already be messages in flight, but it may return false in that
case, so you need to check timeNextUrgent() as well.canSend
in interface PacketFormat
false
if the packet format can't send packetspublic java.lang.String toString()
toString
in class java.lang.Object
public boolean fullPacketQueued(int maxPacketSize)
PacketFormat
fullPacketQueued
in interface PacketFormat