Java example source code file (MessageToMessageCodec.java)
This example Java source code file (MessageToMessageCodec.java) is included in the alvinalexander.com
"Java Source Code
Warehouse" project. The intent of this project is to help you "Learn
Java by Example" TM.
The MessageToMessageCodec.java Java example source code
/*
* Copyright 2012 The Netty Project
*
* The Netty Project licenses this file to you under the Apache License,
* version 2.0 (the "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
package io.netty.handler.codec;
import io.netty.channel.ChannelDuplexHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelPromise;
import io.netty.util.ReferenceCounted;
import io.netty.util.internal.TypeParameterMatcher;
import java.util.List;
/**
* A Codec for on-the-fly encoding/decoding of message.
*
* This can be thought of as a combination of {@link MessageToMessageDecoder} and {@link MessageToMessageEncoder}.
*
* Here is an example of a {@link MessageToMessageCodec} which just decode from {@link Integer} to {@link Long}
* and encode from {@link Long} to {@link Integer}.
*
* <pre>
* public class NumberCodec extends
* {@link MessageToMessageCodec}<{@link Integer}, {@link Long}> {
* {@code @Override}
* public {@link Long} decode({@link ChannelHandlerContext} ctx, {@link Integer} msg, List<Object> out)
* throws {@link Exception} {
* out.add(msg.longValue());
* }
*
* {@code @Overrride}
* public {@link Integer} encode({@link ChannelHandlerContext} ctx, {@link Long} msg, List<Object> out)
* throws {@link Exception} {
* out.add(msg.intValue());
* }
* }
* </pre>
*
* Be aware that you need to call {@link ReferenceCounted#retain()} on messages that are just passed through if they
* are of type {@link ReferenceCounted}. This is needed as the {@link MessageToMessageCodec} will call
* {@link ReferenceCounted#release()} on encoded / decoded messages.
*/
public abstract class MessageToMessageCodec<INBOUND_IN, OUTBOUND_IN> extends ChannelDuplexHandler {
private final MessageToMessageEncoder<Object> encoder = new MessageToMessageEncoder