package com.grendelscan.commons.flex.messages;
import java.io.IOException;
import com.grendelscan.commons.flex.AbstractAmfDataContainer;
import com.grendelscan.commons.flex.AmfOutputStream;
import com.grendelscan.commons.flex.complexTypes.AmfActionMessageRoot;
import com.grendelscan.commons.flex.dataTypeDefinitions.AmfDataType;
import flex.messaging.messages.CommandMessage;
public class AmfCommandMessage extends AmfAsyncMessage
{
// private static final String[] operationNames =
// { "subscribe", "unsubscribe", "poll", "unused3", "client_sync", "client_ping", "unused6",
// "cluster_request", "login", "logout", "subscription_invalidate", "multi_subscribe", "disconnect",
// "trigger_connect" };
/**
*
*/
private static final long serialVersionUID = 1L;
private final static byte OPERATION_FLAG = 1;
protected final static String OPERATION_PROPERTY_NAME = "operation";
public AmfCommandMessage(final String name, final boolean externalizable, final AbstractAmfDataContainer<?> parent, final int transactionId, final AmfActionMessageRoot amfRoot)
{
super(name, AmfDataType.kAmfCommandMessage, externalizable, parent, transactionId);
AmfOperation operation = new AmfOperation(OPERATION_PROPERTY_NAME, CommandMessageTypeEnum.UNKNOWN_OPERATION, this, transactionId);
addFixedField(OPERATION_PROPERTY_NAME, operation, true);
}
public AmfCommandMessage(final String name, final CommandMessage message, final String className, final AbstractAmfDataContainer<?> parent, final int transactionId)
{
super(name, message, AmfDataType.kAmfCommandMessage, className, parent, transactionId);
AmfOperation operation = new AmfOperation(OPERATION_PROPERTY_NAME, CommandMessageTypeEnum.getByValue(message.getOperation()), this, transactionId);
addFixedField(OPERATION_PROPERTY_NAME, operation, true);
}
public CommandMessageTypeEnum getCommandType()
{
return getOperation().getCommandType();
}
private AmfOperation getOperation()
{
return (AmfOperation) properties.get(OPERATION_PROPERTY_NAME).getValueData();
}
public void setCommandType(final CommandMessageTypeEnum commandType)
{
getOperation().setCommandType(commandType);
}
@Override
public void writeExternal(final AmfOutputStream outputStream) throws IOException
{
super.writeExternal(outputStream);
short flags = 0;
if (getOperation().getValue() != 0)
{
flags |= OPERATION_FLAG;
}
outputStream.writeByte(flags);
if (getOperation().getValue() != 0)
{
getOperation().writeBytes(outputStream);
}
}
// @Override
// protected ArrayList<String> getParameterNames()
// {
// ArrayList<String> names = super.getParameterNames();
// names.add(OPERATION_PROPERTY_NAME);
// return names;
// }
}