content: /*
   * Copyright (C) 2016 alchemystar, Inc. All Rights Reserved.
   */
  package alchemystar.lancelot.common.net.proto;
  
  import java.nio.ByteBuffer;
  
  import io.netty.buffer.ByteBuf;
  import io.netty.channel.Channel;
  import io.netty.channel.ChannelHandlerContext;
  
  /**
   * MySqlPacket
   *
   * @Author lizhuyang
   */
  public abstract class MySQLPacket {
      /**
       * none, this is an internal thread state
       */
      public static final byte COM_SLEEP = 0;
  
      /**
       * mysql_close
       */
      public static final byte COM_QUIT = 1;
  
      /**
       * mysql_select_db
       */
      public static final byte COM_INIT_DB = 2;
  
      /**
       * mysql_real_query
       */
      public static final byte COM_QUERY = 3;
  
      /**
       * mysql_list_fields
       */
      public static final byte COM_FIELD_LIST = 4;
  
      /**
       * mysql_create_db (deprecated)
       */
      public static final byte COM_CREATE_DB = 5;
  
      /**
       * mysql_drop_db (deprecated)
       */
      public static final byte COM_DROP_DB = 6;
  
      /**
       * mysql_refresh
       */
      public static final byte COM_REFRESH = 7;
  
      /**
       * mysql_shutdown
       */
      public static final byte COM_SHUTDOWN = 8;
  
      /**
       * mysql_stat
       */
      public static final byte COM_STATISTICS = 9;
  
      /**
       * mysql_list_processes
       */
      public static final byte COM_PROCESS_INFO = 10;
  
      /**
       * none, this is an internal thread state
       */
      public static final byte COM_CONNECT = 11;
  
      /**
       * mysql_kill
       */
      public static final byte COM_PROCESS_KILL = 12;
  
      /**
       * mysql_dump_debug_info
       */
      public static final byte COM_DEBUG = 13;
  
      /**
       * mysql_ping
       */
      public static final byte COM_PING = 14;
  
      /**
       * none, this is an internal thread state
       */
      public static final byte COM_TIME = 15;
  
      /**
       * none, this is an internal thread state
       */
      public static final byte COM_DELAYED_INSERT = 16;
  
      /**
       * mysql_change_user
       */
      public static final byte COM_CHANGE_USER = 17;
  
      /**
       * used by slave server mysqlbinlog
       */
      public static final byte COM_BINLOG_DUMP = 18;
  
      /**
       * used by slave server to get master table
       */
      public static final byte COM_TABLE_DUMP = 19;
  
      /**
       * used by slave to log connection to master
       */
      public static final byte COM_CONNECT_OUT = 20;
  
      /**
       * used by slave to register to master
       */
      public static final byte COM_REGISTER_SLAVE = 21;
  
      /**
       * mysql_stmt_prepare
       */
      public static final byte COM_STMT_PREPARE = 22;
  
      /**
       * mysql_stmt_execute
       */
      public static final byte COM_STMT_EXECUTE = 23;
  
      /**
       * mysql_stmt_send_long_data
       */
      public static final byte COM_STMT_SEND_LONG_DATA = 24;
  
      /**
       * mysql_stmt_close
       */
      public static final byte COM_STMT_CLOSE = 25;
  
      /**
       * mysql_stmt_reset
       */
      public static final byte COM_STMT_RESET = 26;
  
      /**
       * mysql_set_server_option
       */
      public static final byte COM_SET_OPTION = 27;
  
      /**
       * mysql_stmt_fetch
       */
      public static final byte COM_STMT_FETCH = 28;
  
      /**
       * cobar heartbeat
       */
      public static final byte COM_HEARTBEAT = 64;
  
      /**
       * MORE RESULTS
       */
      public static final int SERVER_MORE_RESULTS_EXISTS=8;
  
      public int packetLength;
      public byte packetId=1;
  
      /**
       * 把数据包写到buffer中，如果buffer满了就把buffer通过前端连接写出。
       */
      public ByteBuffer write(ByteBuffer buffer, Channel c) {
          throw new UnsupportedOperationException();
      }
  
      /**
       * 把数据包通过后端连接写出，一般使用buffer机制来提高写的吞吐量。
       */
      public void write(ChannelHandlerContext ctx) {
          throw new UnsupportedOperationException();
      }
  
      public ByteBuf writeBuf(ByteBuf buffer,ChannelHandlerContext ctx) {
          throw new UnsupportedOperationException();
      }
  
      /**
       * 计算数据包大小，不包含包头长度。
       */
      public abstract int calcPacketSize();
  
      /**
       * 取得数据包信息
       */
      protected abstract String getPacketInfo();
  
      @Override
      public String toString() {
          return new StringBuilder().append(getPacketInfo()).append("{length=").append(packetLength).append(",id=")
                  .append(packetId).append('}').toString();
      }
  
  }