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 PacketFormatpublic boolean maybeSendPacket(long now,
boolean ackOnly)
throws BlockedTooLongException
PacketFormatmaybeSendPacket in interface PacketFormatBlockedTooLongExceptionpublic long timeCheckForLostPackets()
timeCheckForLostPackets in interface PacketFormatpublic void checkForLostPackets()
checkForLostPackets in interface PacketFormatpublic java.util.List<MessageItem> onDisconnect()
PacketFormatonDisconnect in interface PacketFormatpublic long timeNextUrgent(boolean canSend,
long now)
timeNextUrgent in interface PacketFormatcanSend - 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 PacketFormatpublic boolean canSend(SessionKey tracker)
PacketFormatfalse 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 PacketFormatfalse if the packet format can't send packetspublic java.lang.String toString()
toString in class java.lang.Objectpublic boolean fullPacketQueued(int maxPacketSize)
PacketFormatfullPacketQueued in interface PacketFormat