Package org.pokenet.server.network.codec

Source Code of org.pokenet.server.network.codec.PokenetEncoder

package org.pokenet.server.network.codec;

import java.nio.charset.Charset;
import java.nio.charset.CharsetEncoder;

import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolEncoderAdapter;
import org.apache.mina.filter.codec.ProtocolEncoderOutput;
import org.apache.mina.filter.codec.textline.LineDelimiter;
import org.apache.mina.filter.codec.textline.TextLineEncoder;

/**
* Encodes messages to be sent to the client
* @author shadowkanji
*
*/
public class PokenetEncoder extends ProtocolEncoderAdapter {
  private static final String ENCODER = TextLineEncoder.class.getName() + ".encoder";
  private final Charset m_charset;
  private final LineDelimiter m_delimiter;
 
  /**
   * Default constructor
   */
  public PokenetEncoder() {
    m_charset = Charset.forName("US-ASCII");
    m_delimiter = LineDelimiter.UNIX;
  }

  public void encode(IoSession session, Object message, ProtocolEncoderOutput out)
      throws Exception {
    CharsetEncoder encoder = (CharsetEncoder) session.getAttribute(ENCODER);
        if (encoder == null) {
            encoder = m_charset.newEncoder();
            session.setAttribute(ENCODER, encoder);
        }

        String value = message.toString();
        IoBuffer buf = IoBuffer.allocate(value.length())
                .setAutoExpand(true);
        buf.putString(value, encoder);
        if (buf.position() > Integer.MAX_VALUE) {
            throw new IllegalArgumentException("Line length: " + buf.position());
        }
        buf.putString(m_delimiter.getValue(), encoder);
        buf.flip();
        out.write(buf);
  }

}
TOP

Related Classes of org.pokenet.server.network.codec.PokenetEncoder

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.