Index: samples/chat/chat_server_lib.dart |
diff --git a/samples/chat/chat_server_lib.dart b/samples/chat/chat_server_lib.dart |
index 51b36dc208918e57860fa4c6c52fc444cd3d3bd2..883214c3104521337ddb48028c94e222f7fa7eca 100644 |
--- a/samples/chat/chat_server_lib.dart |
+++ b/samples/chat/chat_server_lib.dart |
@@ -366,7 +366,7 @@ class IsolatedServer extends Isolate { |
} |
File file = new File(fileName); |
if (file.existsSync()) { |
- file.openSync(); |
+ RandomAccessFile openedFile = file.openSync(); |
int totalRead = 0; |
List<int> buffer = new List<int>(BUFFER_SIZE); |
@@ -380,21 +380,32 @@ class IsolatedServer extends Isolate { |
if (extension == ".png") { mimeType = "image/png"; } |
} |
response.setHeader("Content-Type", mimeType); |
- response.contentLength = file.lengthSync(); |
+ response.contentLength = openedFile.lengthSync(); |
+ |
+ bool checkDone() { |
+ if (totalRead == openedFile.lengthSync()) { |
+ openedFile.closeSync(); |
+ response.writeDone(); |
+ return true; |
+ } |
+ return false; |
+ } |
void writeFileData() { |
- while (totalRead < file.lengthSync()) { |
- var read = file.readListSync(buffer, 0, BUFFER_SIZE); |
+ if (checkDone()) return; |
+ while (totalRead < openedFile.lengthSync()) { |
+ var read = openedFile.readListSync(buffer, 0, BUFFER_SIZE); |
totalRead += read; |
// Write this buffer and get a callback when it makes sense |
// to write more. |
- bool allWritten = response.writeList(buffer, 0, read, writeFileData); |
- if (!allWritten) break; |
- } |
- |
- if (totalRead == file.lengthSync()) { |
- response.writeDone(); |
+ bool writeCompleted = |
+ response.writeList(buffer, 0, read, writeFileData); |
+ if (writeCompleted) { |
+ if (checkDone()) return; |
+ } else { |
+ break; |
+ } |
} |
} |