/**
* Copyright (c) 2012, Andy Janata
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted
* provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this list of conditions
* and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice, this list of
* conditions and the following disclaimer in the documentation and/or other materials provided
* with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
* WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.socialgamer.cah.data;
import java.util.Map;
import net.socialgamer.cah.Constants.ReturnableData;
/**
* A message to be queued for delivery to a client.
*
* @author Andy Janata (ajanata@socialgamer.net)
*/
public class QueuedMessage implements Comparable<QueuedMessage> {
private final MessageType messageType;
private final Map<ReturnableData, Object> data;
/**
* Create a new queued message.
*
* @param messageType
* Type of message to be queued. The type influences the priority in returning messages
* to the client.
* @param data
* The data of the message to be queued.
*/
public QueuedMessage(final MessageType messageType, final Map<ReturnableData, Object> data) {
this.messageType = messageType;
this.data = data;
}
/**
* @return The type of the message.
*/
public MessageType getMessageType() {
return messageType;
}
/**
* @return The data in the message.
*/
public Map<ReturnableData, Object> getData() {
return data;
}
/**
* This is not guaranteed to be consistent with .equals() since we do not care about the data for
* ordering.
*/
@Override
public int compareTo(final QueuedMessage qm) {
return this.messageType.getWeight() - qm.messageType.getWeight();
}
@Override
public String toString() {
return messageType.toString() + "_" + data.toString();
}
/**
* Types of messages that can be queued. The numerical value is the priority that this message
* should be delivered (lower = more important) compared to other queued messages.
*/
public enum MessageType {
KICKED(1), PLAYER_EVENT(3), GAME_EVENT(3), GAME_PLAYER_EVENT(4), CHAT(5);
private final int weight;
MessageType(final int weight) {
this.weight = weight;
}
public int getWeight() {
return weight;
}
}
}