blob: a8ab8fa71003bdad71e4f7943bbc8488f54e4f3c [file] [log] [blame]
toma7083182014-09-25 21:38:03 -07001package org.onlab.nio;
2
3import java.nio.ByteBuffer;
4import java.nio.channels.ByteChannel;
5
6/**
7 * Fixed-length message transfer buffer.
8 */
9public class TestMessageStream extends MessageStream<TestMessage> {
10
11 private static final String E_WRONG_LEN = "Illegal message length: ";
12
13 private final int length;
14
15 /**
16 * Create a new buffer for transferring messages of the specified length.
17 *
18 * @param length message length
19 * @param ch backing channel
20 * @param loop driver loop
21 */
22 public TestMessageStream(int length, ByteChannel ch,
23 IOLoop<TestMessage, ?> loop) {
24 super(loop, ch, 64 * 1024, 500);
25 this.length = length;
26 }
27
28 @Override
29 protected TestMessage read(ByteBuffer rb) {
30 if (rb.remaining() < length) {
31 return null;
32 }
33 TestMessage message = new TestMessage(length);
34 rb.get(message.data());
35 return message;
36 }
37
38 /**
39 * {@inheritDoc}
40 * <p/>
41 * This implementation enforces the message length against the buffer
42 * supported length.
43 *
44 * @throws IllegalArgumentException if message size does not match the
45 * supported buffer size
46 */
47 @Override
48 protected void write(TestMessage message, ByteBuffer wb) {
49 if (message.length() != length) {
50 throw new IllegalArgumentException(E_WRONG_LEN + message.length());
51 }
52 wb.put(message.data());
53 }
54
55}