protected void OnCommand(ITransport commandTransport, Command command)
{
if(command.IsMessageDispatch)
{
WaitForTransportInterruptionProcessingToComplete();
DispatchMessage((MessageDispatch) command);
}
else if(command.IsKeepAliveInfo)
{
OnKeepAliveCommand(commandTransport, (KeepAliveInfo) command);
}
else if(command.IsWireFormatInfo)
{
this.brokerWireFormatInfo = (WireFormatInfo) command;
}
else if(command.IsBrokerInfo)
{
this.brokerInfo = (BrokerInfo) command;
this.brokerInfoReceived.countDown();
}
else if(command.IsShutdownInfo)
{
if(!closing.Value && !closed.Value)
{
OnException(new NMSException("Broker closed this connection."));
}
}
else if(command.IsProducerAck)
{
ProducerAck ack = (ProducerAck) command as ProducerAck;
if(ack.ProducerId != null)
{
MessageProducer producer = producers[ack.ProducerId] as MessageProducer;
if(producer != null)
{
if(Tracer.IsDebugEnabled)
{
Tracer.Debug("Connection: Received a new ProducerAck -> " + ack);
}
producer.OnProducerAck(ack);
}
}
}
else if(command.IsConnectionError)
{
if(!closing.Value && !closed.Value)
{
ConnectionError connectionError = (ConnectionError) command;
BrokerError brokerError = connectionError.Exception;
string message = "Broker connection error.";
string cause = "";
if(null != brokerError)
{
message = brokerError.Message;
if(null != brokerError.Cause)
{
cause = brokerError.Cause.Message;
}
}
OnException(new NMSConnectionException(message, cause));
}
}
else
{
Tracer.Error("Unknown command: " + command);
}
}