Package org.rzo.netty.ahessian.serialization

Source Code of org.rzo.netty.ahessian.serialization.HessianDecoder

package org.rzo.netty.ahessian.serialization;

import java.io.InputStream;

import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.ChannelPipeline;
import org.jboss.netty.channel.Channels;
import org.jboss.netty.channel.MessageEvent;
import org.jboss.netty.channel.SimpleChannelUpstreamHandler;
import org.rzo.netty.ahessian.Constants;

import com.caucho.hessian4.io.HessianInput;

/**
* Decodes a {@link ChannelBuffer} into a {@link java.lang.Object}.
* A typical setup for a serialization protocol in a TCP/IP socket would be:
* <pre>
* {@link ChannelPipeline} pipeline = ...;
*
* // Encoder
* pipeline.addLast("outputStream", new {@link io.OutputStream}());
* pipeline.addLast("hessianEncoder", new {@link HessianEncoder}());
*
* // Decoder
* pipeline.addLast("inputStream", new {@link io.InputStream}());
* pipeline.addLast("hessianDecoder", new {@link HessianDecoder}());
* pipeline.addLast("handler", new MyHandler());
* </pre>
* and then, within the handler you can use a {@link java.lang.Object} instead of a {@link ChannelBuffer}
* as a message:
* <pre>
* void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
* // get the message
* Object msg = e.getMessage();
* // return the current time
* ch.write(new Date());
* }
* </pre>
*/

public class HessianDecoder extends SimpleChannelUpstreamHandler
{

  /* (non-Javadoc)
   * @see org.jboss.netty.channel.SimpleChannelUpstreamHandler#messageReceived(org.jboss.netty.channel.ChannelHandlerContext, org.jboss.netty.channel.MessageEvent)
   */
  @Override
    public void messageReceived(
            ChannelHandlerContext ctx, MessageEvent e) throws Exception
    {
    InputStream in = (InputStream) e.getMessage();
    try
    {
      HessianInput hin = new HessianInput(in);
      while (true)
      {
        Object obj = hin.readObject(null);
        Channels.fireMessageReceived(ctx, obj);
      }
    }
    catch (Exception ex)
    {
      Constants.ahessianLogger.warn("", ex);
    }
    }
   
 

}
TOP

Related Classes of org.rzo.netty.ahessian.serialization.HessianDecoder

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.