/**
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You 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 org.apache.activemq.openwire.commands;

/**
 * Holds the command id constants used by the command objects.
 */
public interface CommandTypes {

    // What is the latest version of the openwire protocol
    byte PROTOCOL_VERSION = 12;

    // What is the latest version of the openwire protocol used in the stores
    byte PROTOCOL_STORE_VERSION = 11;

    // What is the legacy version that old KahaDB store's most commonly used
    byte PROTOCOL_LEGACY_STORE_VERSION = 6;

    // What is the first version that BROKER_SUBSCRIPTION_INFO is supported
    byte PROTOCOL_VERSION_DURABLE_SYNC = 12;

    // A marshaling layer can use this type to specify a null object.
    byte NULL = 0;

    ////////////////////////////////////////////////////////////////////////////
    // Info objects sent back and forth client/server when setting up a
    // client connection, session, producer, consumer, transaction, etc...
    ////////////////////////////////////////////////////////////////////////////
    byte WIREFORMAT_INFO = 1;
    byte BROKER_INFO = 2;
    byte CONNECTION_INFO = 3;
    byte SESSION_INFO = 4;
    byte CONSUMER_INFO = 5;
    byte PRODUCER_INFO = 6;
    byte TRANSACTION_INFO = 7;
    byte DESTINATION_INFO = 8;
    byte REMOVE_SUBSCRIPTION_INFO = 9;
    byte KEEP_ALIVE_INFO = 10;
    byte SHUTDOWN_INFO = 11;
    byte REMOVE_INFO = 12;
    byte CONTROL_COMMAND = 14;
    byte FLUSH_COMMAND = 15;
    byte CONNECTION_ERROR = 16;
    byte CONSUMER_CONTROL = 17;
    byte CONNECTION_CONTROL = 18;

    ////////////////////////////////////////////////////////////////////////////
    // Messages that go back and forth between the client and the server.
    ////////////////////////////////////////////////////////////////////////////
    byte PRODUCER_ACK = 19;
    byte MESSAGE_PULL = 20;
    byte MESSAGE_DISPATCH = 21;
    byte MESSAGE_ACK = 22;

    byte OPENWIRE_MESSAGE = 23;
    byte OPENWIRE_BYTES_MESSAGE = 24;
    byte OPENWIRE_MAP_MESSAGE = 25;
    byte OPENWIRE_OBJECT_MESSAGE = 26;
    byte OPENWIRE_STREAM_MESSAGE = 27;
    byte OPENWIRE_TEXT_MESSAGE = 28;
    byte OPENWIRE_BLOB_MESSAGE = 29;

    ////////////////////////////////////////////////////////////////////////////
    // Command Response messages
    ////////////////////////////////////////////////////////////////////////////
    byte RESPONSE = 30;
    byte EXCEPTION_RESPONSE = 31;
    byte DATA_RESPONSE = 32;
    byte DATA_ARRAY_RESPONSE = 33;
    byte INTEGER_RESPONSE = 34;

    ////////////////////////////////////////////////////////////////////////////
    // Used by discovery
    ////////////////////////////////////////////////////////////////////////////
    byte DISCOVERY_EVENT = 40;

    ////////////////////////////////////////////////////////////////////////////
    // Command object used by the Journal
    ////////////////////////////////////////////////////////////////////////////
    byte JOURNAL_ACK = 50;
    byte JOURNAL_REMOVE = 52;
    byte JOURNAL_TRACE = 53;
    byte JOURNAL_TRANSACTION = 54;
    byte DURABLE_SUBSCRIPTION_INFO = 55;

    ////////////////////////////////////////////////////////////////////////////
    // Reliability and fragmentation
    ////////////////////////////////////////////////////////////////////////////
    byte PARTIAL_COMMAND = 60;
    byte PARTIAL_LAST_COMMAND = 61;

    byte REPLAY = 65;

    ////////////////////////////////////////////////////////////////////////////
    // Types used represent basic Java types.
    ////////////////////////////////////////////////////////////////////////////

    byte BYTE_TYPE = 70;
    byte CHAR_TYPE = 71;
    byte SHORT_TYPE = 72;
    byte INTEGER_TYPE = 73;
    byte LONG_TYPE = 74;
    byte DOUBLE_TYPE = 75;
    byte FLOAT_TYPE = 76;
    byte STRING_TYPE = 77;
    byte BOOLEAN_TYPE = 78;
    byte BYTE_ARRAY_TYPE = 79;

    ////////////////////////////////////////////////////////////////////////////
    // Broker to Broker command objects
    ////////////////////////////////////////////////////////////////////////////

    byte MESSAGE_DISPATCH_NOTIFICATION = 90;
    byte NETWORK_BRIDGE_FILTER = 91;
    byte BROKER_SUBSCRIPTION_INFO = 92;

    ////////////////////////////////////////////////////////////////////////////
    // Data structures contained in the command objects.
    ////////////////////////////////////////////////////////////////////////////

    byte OPENWIRE_QUEUE = 100;
    byte OPENWIRE_TOPIC = 101;
    byte OPENWIRE_TEMP_QUEUE = 102;
    byte OPENWIRE_TEMP_TOPIC = 103;

    byte MESSAGE_ID = 110;
    byte OPENWIRE_LOCAL_TRANSACTION_ID = 111;
    byte OPENWIRE_XA_TRANSACTION_ID = 112;

    byte CONNECTION_ID = 120;
    byte SESSION_ID = 121;
    byte CONSUMER_ID = 122;
    byte PRODUCER_ID = 123;
    byte BROKER_ID = 124;
}
