You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by tr...@apache.org on 2007/11/28 12:17:00 UTC
svn commit: r598958 -
/mina/trunk/core/src/main/java/org/apache/mina/common/AbstractPollingIoProcessor.java
Author: trustin
Date: Wed Nov 28 03:16:56 2007
New Revision: 598958
URL: http://svn.apache.org/viewvc?rev=598958&view=rev
Log:
Refactored AbstractPollingIoProcessor.flushNow()
Modified:
mina/trunk/core/src/main/java/org/apache/mina/common/AbstractPollingIoProcessor.java
Modified: mina/trunk/core/src/main/java/org/apache/mina/common/AbstractPollingIoProcessor.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/common/AbstractPollingIoProcessor.java?rev=598958&r1=598957&r2=598958&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/common/AbstractPollingIoProcessor.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/common/AbstractPollingIoProcessor.java Wed Nov 28 03:16:56 2007
@@ -524,55 +524,14 @@
int localWrittenBytes = 0;
Object message = req.getMessage();
- if (message instanceof FileRegion) {
- FileRegion region = (FileRegion) message;
- if (region.getCount() > 0) {
- int length;
- if (hasFragmentation) {
- length = (int) Math.min(
- region.getCount(),
- maxWrittenBytes - writtenBytes);
- } else {
- length = (int) Math.min(
- Integer.MAX_VALUE, region.getCount());
- }
- localWrittenBytes = transferFile(session, region, length);
- region.setPosition(region.getPosition() + localWrittenBytes);
- }
-
- if (region.getCount() <= 0 ||
- (!hasFragmentation && localWrittenBytes != 0)) {
- // File has been sent, clear the current request.
- session.setCurrentWriteRequest(null);
- session.getFilterChain().fireMessageSent(req);
- }
+ if (message instanceof IoBuffer) {
+ localWrittenBytes = writeBuffer(
+ session, req, hasFragmentation,
+ maxWrittenBytes - writtenBytes);
} else {
- IoBuffer buf = (IoBuffer) message;
- if (buf.hasRemaining()) {
- for (int i = WRITE_SPIN_COUNT; i > 0; i --) {
- int length;
- if (hasFragmentation) {
- length = Math.min(
- buf.remaining(),
- maxWrittenBytes - writtenBytes);
- } else {
- length = buf.remaining();
- }
-
- localWrittenBytes = write(session, buf, length);
- if (localWrittenBytes != 0 || !buf.hasRemaining()) {
- break;
- }
- }
- }
-
- if (!buf.hasRemaining() ||
- (!hasFragmentation && localWrittenBytes != 0)) {
- // Buffer has been sent, clear the current request.
- session.setCurrentWriteRequest(null);
- buf.reset();
- session.getFilterChain().fireMessageSent(req);
- }
+ localWrittenBytes = writeFile(
+ session, req, hasFragmentation,
+ maxWrittenBytes - writtenBytes);
}
writtenBytes += localWrittenBytes;
@@ -589,6 +548,63 @@
}
return true;
+ }
+
+ private int writeBuffer(T session, WriteRequest req,
+ boolean hasFragmentation, int maxLength) throws Exception {
+ IoBuffer buf = (IoBuffer) req.getMessage();
+ int localWrittenBytes = 0;
+ if (buf.hasRemaining()) {
+ int length;
+ if (hasFragmentation) {
+ length = Math.min(buf.remaining(), maxLength);
+ } else {
+ length = buf.remaining();
+ }
+ for (int i = WRITE_SPIN_COUNT; i > 0; i --) {
+ localWrittenBytes = write(session, buf, length);
+ if (localWrittenBytes != 0 || !buf.hasRemaining()) {
+ break;
+ }
+ }
+ }
+
+ if (!buf.hasRemaining() ||
+ (!hasFragmentation && localWrittenBytes != 0)) {
+ // Buffer has been sent, clear the current request.
+ buf.reset();
+ fireMessageSent(session, req);
+ }
+ return localWrittenBytes;
+ }
+
+ private int writeFile(T session, WriteRequest req,
+ boolean hasFragmentation, int maxLength) throws Exception {
+ int localWrittenBytes;
+ FileRegion region = (FileRegion) req.getMessage();
+ if (region.getCount() > 0) {
+ int length;
+ if (hasFragmentation) {
+ length = (int) Math.min(region.getCount(), maxLength);
+ } else {
+ length = (int) Math.min(Integer.MAX_VALUE, region.getCount());
+ }
+ localWrittenBytes = transferFile(session, region, length);
+ region.setPosition(region.getPosition() + localWrittenBytes);
+ } else {
+ localWrittenBytes = 0;
+ }
+
+ if (region.getCount() <= 0 ||
+ (!hasFragmentation && localWrittenBytes != 0)) {
+ fireMessageSent(session, req);
+ }
+ return localWrittenBytes;
+ }
+
+ private void fireMessageSent(T session, WriteRequest req) {
+ session.setCurrentWriteRequest(null);
+ session.getFilterChain().fireMessageSent(req);
}
private void updateTrafficMask() {