mirror of
https://github.com/vanitasvitae/Smack.git
synced 2025-09-10 17:49:38 +02:00
Notify packet sending listeners in new thread
sendListeners are now invoked *after* the packet has been put on the wire. Also sending listener exceptions are not catched and not only NotConnectedExceptions. And a exception does not cause a 'break' but a 'continue' now. Log level is WARNING now.
This commit is contained in:
parent
51d84647f3
commit
9f56842ee4
3 changed files with 57 additions and 35 deletions
|
@ -1347,30 +1347,38 @@ public class XMPPTCPConnection extends AbstractXMPPConnection {
|
|||
initalOpenStreamSend.reportSuccess();
|
||||
// Write out packets from the queue.
|
||||
while (!done()) {
|
||||
Element packet = nextStreamElement();
|
||||
if (packet != null) {
|
||||
// Check if the stream element should be put to the unacknowledgedStanza
|
||||
// queue. Note that we can not do the put() in sendPacketInternal() and the
|
||||
// packet order is not stable at this point (sendPacketInternal() can be
|
||||
// called concurrently).
|
||||
if (isSmEnabled() && packet instanceof Packet) {
|
||||
// If the unacknowledgedStanza queue is nearly full, request an new ack
|
||||
// from the server in order to drain it
|
||||
if (unacknowledgedStanzas.size() == 0.8 * XMPPTCPConnection.QUEUE_SIZE) {
|
||||
writer.write(AckRequest.INSTANCE.toXML().toString());
|
||||
writer.flush();
|
||||
}
|
||||
try {
|
||||
unacknowledgedStanzas.put((Packet) packet);
|
||||
}
|
||||
catch (InterruptedException e) {
|
||||
throw new IllegalStateException(e);
|
||||
}
|
||||
}
|
||||
writer.write(packet.toXML().toString());
|
||||
if (queue.isEmpty()) {
|
||||
Element element = nextStreamElement();
|
||||
if (element == null) {
|
||||
continue;
|
||||
}
|
||||
Packet packet = null;
|
||||
if (element instanceof Packet) {
|
||||
packet = (Packet) element;
|
||||
}
|
||||
// Check if the stream element should be put to the unacknowledgedStanza
|
||||
// queue. Note that we can not do the put() in sendPacketInternal() and the
|
||||
// packet order is not stable at this point (sendPacketInternal() can be
|
||||
// called concurrently).
|
||||
if (isSmEnabled() && packet != null) {
|
||||
// If the unacknowledgedStanza queue is nearly full, request an new ack
|
||||
// from the server in order to drain it
|
||||
if (unacknowledgedStanzas.size() == 0.8 * XMPPTCPConnection.QUEUE_SIZE) {
|
||||
writer.write(AckRequest.INSTANCE.toXML().toString());
|
||||
writer.flush();
|
||||
}
|
||||
try {
|
||||
unacknowledgedStanzas.put(packet);
|
||||
}
|
||||
catch (InterruptedException e) {
|
||||
throw new IllegalStateException(e);
|
||||
}
|
||||
}
|
||||
writer.write(element.toXML().toString());
|
||||
if (queue.isEmpty()) {
|
||||
writer.flush();
|
||||
}
|
||||
if (packet != null) {
|
||||
firePacketSendingListeners(packet);
|
||||
}
|
||||
}
|
||||
if (!instantShutdown) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue