public final int send(final long nowNs) { final long senderPosition = this.senderPosition.get(); final int activeTermId = computeTermIdFromPosition(senderPosition, positionBitsToShift, initialTermId); final int termOffset = (int)senderPosition & termLengthMask; if (shouldSendSetupFrame) { setupMessageCheck(nowNs, activeTermId, termOffset); } int bytesSent = sendData(nowNs, senderPosition, termOffset); if (0 == bytesSent) { final boolean isEndOfStream = this.isEndOfStream; bytesSent = heartbeatMessageCheck(nowNs, activeTermId, termOffset, isEndOfStream); if (spiesSimulateConnection && (statusMessageDeadlineNs - nowNs < 0) && hasSpies) { final long newSenderPosition = maxSpyPosition(senderPosition); this.senderPosition.setOrdered(newSenderPosition); senderLimit.setOrdered(flowControl.onIdle(nowNs, newSenderPosition, newSenderPosition, isEndOfStream)); } else { senderLimit.setOrdered(flowControl.onIdle(nowNs, senderLimit.get(), senderPosition, isEndOfStream)); } } updateHasReceivers(nowNs); retransmitHandler.processTimeouts(nowNs, this); return bytesSent; }
public final int send(final long nowNs) { final long senderPosition = this.senderPosition.get(); final int activeTermId = computeTermIdFromPosition(senderPosition, positionBitsToShift, initialTermId); final int termOffset = (int)senderPosition & termLengthMask; if (shouldSendSetupFrame) { setupMessageCheck(nowNs, activeTermId, termOffset); } int bytesSent = sendData(nowNs, senderPosition, termOffset); if (0 == bytesSent) { final boolean isEndOfStream = this.isEndOfStream; bytesSent = heartbeatMessageCheck(nowNs, activeTermId, termOffset, isEndOfStream); if (spiesSimulateConnection && (statusMessageDeadlineNs - nowNs < 0) && hasSpies) { final long newSenderPosition = maxSpyPosition(senderPosition); this.senderPosition.setOrdered(newSenderPosition); senderLimit.setOrdered(flowControl.onIdle(nowNs, newSenderPosition, newSenderPosition, isEndOfStream)); } else { senderLimit.setOrdered(flowControl.onIdle(nowNs, senderLimit.get(), senderPosition, isEndOfStream)); } } updateHasReceivers(nowNs); retransmitHandler.processTimeouts(nowNs, this); return bytesSent; }
public final int send(final long nowNs) { final long senderPosition = this.senderPosition.get(); final int activeTermId = computeTermIdFromPosition(senderPosition, positionBitsToShift, initialTermId); final int termOffset = (int)senderPosition & termLengthMask; if (shouldSendSetupFrame) { setupMessageCheck(nowNs, activeTermId, termOffset); } int bytesSent = sendData(nowNs, senderPosition, termOffset); if (0 == bytesSent) { final boolean isEndOfStream = this.isEndOfStream; bytesSent = heartbeatMessageCheck(nowNs, activeTermId, termOffset, isEndOfStream); if (spiesSimulateConnection && (statusMessageDeadlineNs - nowNs < 0) && hasSpies) { final long newSenderPosition = maxSpyPosition(senderPosition); this.senderPosition.setOrdered(newSenderPosition); senderLimit.setOrdered(flowControl.onIdle(nowNs, newSenderPosition, newSenderPosition, isEndOfStream)); } else { senderLimit.setOrdered(flowControl.onIdle(nowNs, senderLimit.get(), senderPosition, isEndOfStream)); } } updateHasReceivers(nowNs); retransmitHandler.processTimeouts(nowNs, this); return bytesSent; }