/** * Return a serializer with the default max message size for deserialization. * @param bytes header length. * @return a {@link ByteArrayLengthHeaderSerializer} with a 1, 2 or 4 byte header. * @see AbstractByteArraySerializer#DEFAULT_MAX_MESSAGE_SIZE */ public static ByteArrayLengthHeaderSerializer lengthHeader(int bytes) { switch (bytes) { case ByteArrayLengthHeaderSerializer.HEADER_SIZE_UNSIGNED_BYTE: return lengthHeader1(); case ByteArrayLengthHeaderSerializer.HEADER_SIZE_UNSIGNED_SHORT: return lengthHeader2(); case ByteArrayLengthHeaderSerializer.HEADER_SIZE_INT: return lengthHeader4(); default: throw new IllegalArgumentException("Only 1, 2 or 4 byte headers are supported"); } }
@Test public void testAll() { AbstractByteArraySerializer codec = TcpCodecs.crlf(); assertThat(codec, instanceOf(ByteArrayCrLfSerializer.class)); codec = TcpCodecs.lf(); assertThat(codec, instanceOf(ByteArrayLfSerializer.class)); codec = TcpCodecs.raw(); assertThat(codec, instanceOf(ByteArrayRawSerializer.class)); codec = TcpCodecs.stxetx(); assertThat(codec, instanceOf(ByteArrayStxEtxSerializer.class)); codec = TcpCodecs.singleTerminator((byte) 23); assertThat(codec, instanceOf(ByteArraySingleTerminatorSerializer.class)); assertEquals((byte) 23, TestUtils.getPropertyValue(codec, "terminator")); codec = TcpCodecs.lengthHeader1(); assertThat(codec, instanceOf(ByteArrayLengthHeaderSerializer.class)); assertEquals(1, TestUtils.getPropertyValue(codec, "headerSize")); codec = TcpCodecs.lengthHeader2(); assertThat(codec, instanceOf(ByteArrayLengthHeaderSerializer.class)); assertEquals(2, TestUtils.getPropertyValue(codec, "headerSize")); codec = TcpCodecs.lengthHeader4(); assertThat(codec, instanceOf(ByteArrayLengthHeaderSerializer.class)); assertEquals(4, TestUtils.getPropertyValue(codec, "headerSize")); codec = TcpCodecs.lengthHeader(1); assertThat(codec, instanceOf(ByteArrayLengthHeaderSerializer.class)); assertEquals(1, TestUtils.getPropertyValue(codec, "headerSize")); codec = TcpCodecs.lengthHeader(2); assertThat(codec, instanceOf(ByteArrayLengthHeaderSerializer.class)); assertEquals(2, TestUtils.getPropertyValue(codec, "headerSize")); codec = TcpCodecs.lengthHeader(4); assertThat(codec, instanceOf(ByteArrayLengthHeaderSerializer.class));
@Bean public AbstractServerConnectionFactory server1() { return Tcp.netServer(0) .serializer(TcpCodecs.lengthHeader1()) .deserializer(TcpCodecs.crlf()) .get(); }
@Test public void testMaxLengths() { AbstractByteArraySerializer codec = TcpCodecs.crlf(123); assertThat(codec, instanceOf(ByteArrayCrLfSerializer.class)); assertThat(codec.getMaxMessageSize(), equalTo(123)); codec = TcpCodecs.lf(123); assertThat(codec, instanceOf(ByteArrayLfSerializer.class)); assertThat(codec.getMaxMessageSize(), equalTo(123)); codec = TcpCodecs.raw(123); assertThat(codec, instanceOf(ByteArrayRawSerializer.class)); assertThat(codec.getMaxMessageSize(), equalTo(123)); codec = TcpCodecs.stxetx(123); assertThat(codec, instanceOf(ByteArrayStxEtxSerializer.class)); assertThat(codec.getMaxMessageSize(), equalTo(123)); codec = TcpCodecs.singleTerminator((byte) 23, 123); assertThat(codec, instanceOf(ByteArraySingleTerminatorSerializer.class)); assertThat(codec.getMaxMessageSize(), equalTo(123)); assertEquals((byte) 23, TestUtils.getPropertyValue(codec, "terminator")); codec = TcpCodecs.lengthHeader1(123); assertThat(codec, instanceOf(ByteArrayLengthHeaderSerializer.class)); assertThat(codec.getMaxMessageSize(), equalTo(123)); assertEquals(1, TestUtils.getPropertyValue(codec, "headerSize")); codec = TcpCodecs.lengthHeader2(123); assertThat(codec, instanceOf(ByteArrayLengthHeaderSerializer.class)); assertThat(codec.getMaxMessageSize(), equalTo(123)); assertEquals(2, TestUtils.getPropertyValue(codec, "headerSize")); codec = TcpCodecs.lengthHeader4(123); assertThat(codec, instanceOf(ByteArrayLengthHeaderSerializer.class)); assertThat(codec.getMaxMessageSize(), equalTo(123));
@Bean public AbstractClientConnectionFactory client1() { return Tcp.netClient("localhost", server1().getPort()) .serializer(TcpCodecs.crlf()) .deserializer(TcpCodecs.lengthHeader1()) .get(); }
/** * @param bytes header length. * @return a {@link ByteArrayLengthHeaderSerializer} with a 1, 2 or 4 byte header. */ public static ByteArrayLengthHeaderSerializer lengthHeader(int bytes) { switch (bytes) { case 1: return lengthHeader1(); case 2: return lengthHeader2(); case 4: return lengthHeader4(); default: throw new IllegalArgumentException("Only 1, 2 or 4 byte headers are supported"); } }