/* * Copyright 1999-2012 Alibaba Group. * * Licensed 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 fm.liu.timo.net.handler; import fm.liu.timo.config.ErrorCode; import fm.liu.timo.mysql.packet.CommandPacket; import fm.liu.timo.net.NIOHandler; import fm.liu.timo.net.connection.FrontendConnection; import fm.liu.timo.statistic.CommandCount; /** * 前端命令处理器 * * @author xianmao.hexm */ public class FrontendCommandHandler implements NIOHandler { protected final FrontendConnection source; protected final CommandCount commands; public FrontendCommandHandler(FrontendConnection source) { this.source = source; this.commands = source.getProcessor().getCommands(); } @Override public void handle(byte[] data) { switch (data[4]) { case CommandPacket.COM_INIT_DB: commands.doInitDB(); source.initDB(data); break; case CommandPacket.COM_QUERY: commands.doQuery(); source.query(data); break; case CommandPacket.COM_PING: commands.doPing(); source.ping(); break; case CommandPacket.COM_QUIT: commands.doQuit(); source.close("quit"); break; case CommandPacket.COM_PROCESS_KILL: commands.doKill(); source.kill(data); break; case CommandPacket.COM_STMT_PREPARE: commands.doStmtPrepare(); source.stmtPrepare(data); break; case CommandPacket.COM_STMT_EXECUTE: commands.doStmtExecute(); source.stmtExecute(data); break; case CommandPacket.COM_STMT_CLOSE: commands.doStmtClose(); source.stmtClose(data); break; case CommandPacket.COM_HEARTBEAT: commands.doHeartbeat(); source.heartbeat(data); break; default: commands.doOther(); source.writeErrMessage(ErrorCode.ER_UNKNOWN_COM_ERROR, "Unknown command"); } } }