Package org.moparscape.msc.ls.codec

Source Code of org.moparscape.msc.ls.codec.FProtocolDecoder

package org.moparscape.msc.ls.codec;

import java.net.URLDecoder;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;

import org.apache.mina.common.ByteBuffer;
import org.apache.mina.common.IoSession;
import org.apache.mina.filter.codec.CumulativeProtocolDecoder;
import org.apache.mina.filter.codec.ProtocolDecoderOutput;
import org.moparscape.msc.ls.Server;
import org.moparscape.msc.ls.net.FPacket;

/**
* A decoder for the Frontend protocol. Parses the incoming data from an
* IoSession and outputs it as a <code>FPacket</code> object.
*/
public class FProtocolDecoder extends CumulativeProtocolDecoder {
  private static CharsetDecoder stringDecoder;

  static {
    try {
      stringDecoder = Charset.forName("UTF-8").newDecoder();
    } catch (Exception e) {
      Server.error(e);
    }
  }

  /**
   * Releases the buffer used by the given session.
   *
   * @param session
   *            The session for which to release the buffer
   * @throws Exception
   *             if failed to dispose all resources
   */
  public void dispose(IoSession session) throws Exception {
    super.dispose(session);
  }

  /**
   * Parses the data in the provided byte buffer and writes it to
   * <code>out</code> as a <code>FPacket</code>.
   *
   * @param session
   *            The IoSession the data was read from
   * @param in
   *            The buffer
   * @param out
   *            The decoder output stream to which to write the
   *            <code>FPacket</code>
   * @return Whether enough data was available to create a packet
   */
  protected boolean doDecode(IoSession session, ByteBuffer in,
      ProtocolDecoderOutput out) {
    try {
      String s = in.getString(stringDecoder).trim();
      int delim = s.indexOf(" ");
      int id;
      String[] params;
      if (delim > -1) {
        id = Integer.parseInt(s.substring(0, delim));
        params = s.substring(delim + 1).split(" ");
      } else {
        id = Integer.parseInt(s);
        params = new String[0];
      }
      for (int i = 0; i < params.length; i++) {
        params[i] = URLDecoder.decode(params[i], "UTF-8");
      }
      out.write(new FPacket(session, id, params));
      return true;
    } catch (Exception e) {
      Server.error(e);
    }
    return false;
  }
}
TOP

Related Classes of org.moparscape.msc.ls.codec.FProtocolDecoder

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.