package com.tesora.dve.comms.client.messages;
/*
* #%L
* Tesora Inc.
* Database Virtualization Engine
* %%
* Copyright (C) 2011 - 2014 Tesora Inc.
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* #L%
*/
// NOPMD by doug on 18/12/12 7:34 AM
/**
* Message type enumeration.
*/
public enum MessageType {
// Client Request message types
UNKNOWN((byte) 0x00),
CONNECT_REQUEST((byte) 0x01),
EXECUTE_REQUEST((byte) 0x02),
GEOMETRY_REQUEST((byte) 0x03),
FETCH_REQUEST((byte) 0x05),
CLOSE_STATEMENT_REQUEST((byte) 0x06),
BEGIN_TRANS_REQUEST((byte) 0x07),
END_TRANS_REQUEST((byte) 0x08),
CREATE_STATEMENT_REQUEST((byte) 0x09),
DISCONNECT_REQUEST((byte) 0x0A),
PRECONNECT_REQUEST((byte) 0x0B),
ROLLBACK_TRANS_REQUEST((byte) 0x0C),
GET_DATABASE_REQUEST((byte) 0x0D),
GET_TRANS_STATUS_REQUEST((byte) 0x0E),
PREPARE_REQUEST((byte) 0x0F),
ADD_CONNECT_PARAMETERS_REQUEST((byte) 0x10),
EXECUTE_PREPARED_REQUEST((byte) 0x11),
LOAD_DATA_REQUEST((byte) 0x12),
LOAD_DATA_BLOCK((byte) 0x13),
// Client Response message types
EXECUTE_RESPONSE((byte) 0x40),
GEOMETRY_RESPONSE((byte) 0x41),
FETCH_RESPONSE((byte) 0x42),
GENERIC_RESPONSE((byte) 0x43),
CREATE_STATEMENT_RESPONSE((byte) 0x44),
MYSQL_PRECONNECT_RESPONSE((byte) 0x45),
GET_DATABASE_RESPONSE((byte) 0x46),
GET_TRANS_STATUS_RESPONSE((byte) 0x47),
CONNECT_RESPONSE((byte) 0x48),
PREPARE_RESPONSE((byte) 0x49),
LOAD_DATA_RESPONSE((byte) 0x4A),
// Metadata messages
DBMETADATA_REQUEST((byte) 0xD0),
DBMETADATA_RESPONSE((byte) 0xD1),
// Framework Messages
DIST_MAP_REQUEST((byte)0xE0),
DIST_MAP_RESPONSE((byte)0xE1),
DIST_NEW_GEN_REQUEST((byte)0xE2),
WM_GET_WORKER_REQUEST((byte) 0xF0),
WM_GET_WORKER_RESPONSE((byte) 0xF1),
WM_RETURN_WORKER_REQUEST((byte) 0xF2),
RESET_WORKER((byte) 0xF3),
LOG_EVENT((byte) 0xF4),
REDIST_ROW_REQUEST((byte)0xF5),
REDIST_ROW_RESPONSE((byte)0xF6),
W_EXECUTE_REQUEST((byte)0xF7),
W_FETCH_REQUEST((byte)0xF8),
W_TYPEINFO_REQUEST((byte)0xF9),
W_PREPARE_REQUEST((byte)0xFA),
W_COMMIT_REQUEST((byte)0xFB),
W_ROLLBACK_REQUEST((byte)0xFC),
W_CREATE_DB_REQUEST((byte)0xFD),
REDIST_ROW_EXEC_REQUEST((byte)0xFE),
// should be in the 0xFx series but that seems full
W_GRANT_PRIVILEDGES_REQUEST((byte)0xC0),
W_ALTER_DB_REQUEST((byte) 0xC1),
STAT_REQUEST((byte)0xEA),
STAT_RESPONSE((byte)0xEB),
SET_SESSION_VAR((byte)0xEC),
WM_CLONE_WORKER_REQUEST((byte)0xED),
NONE((byte) 0xFF);
public static class MessageFactory {
public static Class<? extends ClientMessage> getClass(MessageType cmt) {
switch (cmt) {
case PRECONNECT_REQUEST:
return PreConnectRequest.class;
case MYSQL_PRECONNECT_RESPONSE:
return MysqlPreConnectResponse.class;
case CONNECT_REQUEST:
return ConnectRequest.class;
case CONNECT_RESPONSE:
return ConnectResponse.class;
case DISCONNECT_REQUEST:
return DisconnectRequest.class;
case CREATE_STATEMENT_REQUEST:
return CreateStatementRequest.class;
case CREATE_STATEMENT_RESPONSE:
return CreateStatementResponse.class;
case EXECUTE_REQUEST:
return ExecuteRequest.class;
case EXECUTE_RESPONSE:
return ExecuteResponse.class;
case FETCH_REQUEST:
return FetchRequest.class;
case FETCH_RESPONSE:
return FetchResponse.class;
case DBMETADATA_REQUEST:
return DBMetadataRequest.class;
case DBMETADATA_RESPONSE:
return DBMetadataResponse.class;
case CLOSE_STATEMENT_REQUEST:
return CloseStatementRequest.class;
case GET_DATABASE_REQUEST:
return GetDatabaseRequest.class;
case GET_DATABASE_RESPONSE:
return GetDatabaseResponse.class;
case GENERIC_RESPONSE:
return GenericResponse.class;
case BEGIN_TRANS_REQUEST:
return BeginTransactionRequest.class;
case END_TRANS_REQUEST:
return CommitTransactionRequest.class;
case ROLLBACK_TRANS_REQUEST:
return RollbackTransactionRequest.class;
case GET_TRANS_STATUS_REQUEST:
return GetTransactionStatusRequest.class;
case GET_TRANS_STATUS_RESPONSE:
return GetTransactionStatusResponse.class;
// case WM_GET_WORKER_RESPONSE:
// return GetWorkerResponse.class;
// case REDIST_ROW_RESPONSE:
// return RedistRowResponse.class;
// case GEOMETRY_REQUEST:
// case GEOMETRY_RESPONSE:
default:
throw new RuntimeException("Attempt to create new instance using invalid message type " + cmt);
}
}
}
private final byte msgTypeasByte;
private MessageType(byte b) {
this.msgTypeasByte = b;
}
public static MessageType fromByte(byte b) {
for (MessageType mt : values()) {
if (mt.msgTypeasByte == b) {
return mt;
}
}
return UNKNOWN;
}
public byte getByteValue() {
return this.msgTypeasByte;
}
}