@Override public void write(Buffer source, long byteCount) throws IOException { if (closed) throw new IOException("closed"); buffer.write(source, byteCount); // Determine if this is a buffered write which we can defer until close() flushes. boolean deferWrite = isFirstFrame && contentLength != -1 && buffer.size() > contentLength - 8192 /* segment size */; long emitCount = buffer.completeSegmentByteCount(); if (emitCount > 0 && !deferWrite) { writeMessageFrame(formatOpcode, emitCount, isFirstFrame, false /* final */); isFirstFrame = false; } }
@Override public void write(Buffer source, long byteCount) throws IOException { if (closed) throw new IOException("closed"); buffer.write(source, byteCount); // Determine if this is a buffered write which we can defer until close() flushes. boolean deferWrite = isFirstFrame && contentLength != -1 && buffer.size() > contentLength - 8192 /* segment size */; long emitCount = buffer.completeSegmentByteCount(); if (emitCount > 0 && !deferWrite) { writeMessageFrame(formatOpcode, emitCount, isFirstFrame, false /* final */); isFirstFrame = false; } }
@Test public void completeSegmentByteCountOnEmptyBuffer() { Buffer buffer = new Buffer(); assertEquals(0, buffer.completeSegmentByteCount()); }
@Test public void completeSegmentByteCountOnBufferWithFullSegments() { Buffer buffer = new Buffer(); buffer.writeUtf8(repeat('a', SEGMENT_SIZE * 4)); assertEquals(SEGMENT_SIZE * 4, buffer.completeSegmentByteCount()); }
@Test public void completeSegmentByteCountOnBufferWithIncompleteTailSegment() { Buffer buffer = new Buffer(); buffer.writeUtf8(repeat('a', SEGMENT_SIZE * 4 - 10)); assertEquals(SEGMENT_SIZE * 3, buffer.completeSegmentByteCount()); }
@Override public void write(Buffer source, long byteCount) throws IOException { if (closed) throw new IOException("closed"); buffer.write(source, byteCount); long emitCount = buffer.completeSegmentByteCount(); if (emitCount > 0) { synchronized (WebSocketWriter.this) { writeMessageFrameSynchronized(formatOpcode, emitCount, isFirstFrame, false /* final */); } isFirstFrame = false; } }
@Override public BufferedSink emitCompleteSegments() throws IOException { if (closed) throw new IllegalStateException("closed"); long byteCount = buffer.completeSegmentByteCount(); if (byteCount > 0) sink.write(buffer, byteCount); return this; }
@Override public void write(Buffer source, long byteCount) throws IOException { if (closed) throw new IOException("closed"); buffer.write(source, byteCount); // Determine if this is a buffered write which we can defer until close() flushes. boolean deferWrite = isFirstFrame && contentLength != -1 && buffer.size() > contentLength - 8192 /* segment size */; long emitCount = buffer.completeSegmentByteCount(); if (emitCount > 0 && !deferWrite) { synchronized (WebSocketWriter.this) { writeMessageFrameSynchronized(formatOpcode, emitCount, isFirstFrame, false /* final */); } isFirstFrame = false; } }
@Override public void write(Buffer source, long byteCount) throws IOException { if (closed) throw new IOException("closed"); buffer.write(source, byteCount); // Determine if this is a buffered write which we can defer until close() flushes. boolean deferWrite = isFirstFrame && contentLength != -1 && buffer.size() > contentLength - 8192 /* segment size */; long emitCount = buffer.completeSegmentByteCount(); if (emitCount > 0 && !deferWrite) { writeMessageFrame(formatOpcode, emitCount, isFirstFrame, false /* final */); isFirstFrame = false; } }
@Override public void write(Buffer source, long byteCount) throws IOException { if (closed) throw new IOException("closed"); buffer.write(source, byteCount); // Determine if this is a buffered write which we can defer until close() flushes. boolean deferWrite = isFirstFrame && contentLength != -1 && buffer.size() > contentLength - 8192 /* segment size */; long emitCount = buffer.completeSegmentByteCount(); if (emitCount > 0 && !deferWrite) { writeMessageFrame(formatOpcode, emitCount, isFirstFrame, false /* final */); isFirstFrame = false; } }
@Override public long readAll(Sink sink) throws IOException { if (sink == null) throw new IllegalArgumentException("sink == null"); long totalBytesWritten = 0; while (source.read(buffer, Segment.SIZE) != -1) { long emitByteCount = buffer.completeSegmentByteCount(); if (emitByteCount > 0) { totalBytesWritten += emitByteCount; sink.write(buffer, emitByteCount); } } if (buffer.size() > 0) { totalBytesWritten += buffer.size(); sink.write(buffer, buffer.size()); } return totalBytesWritten; }