// // Un-marshal an object instance from the data input stream // public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) { base.TightUnmarshal(wireFormat, o, dataIn, bs); BrokerInfo info = (BrokerInfo)o; info.BrokerId = (BrokerId) TightUnmarshalCachedObject(wireFormat, dataIn, bs); info.BrokerURL = TightUnmarshalString(dataIn, bs); if (bs.ReadBoolean()) { short size = dataIn.ReadInt16(); BrokerInfo[] value = new BrokerInfo[size]; for( int i=0; i < size; i++ ) { value[i] = (BrokerInfo) TightUnmarshalNestedObject(wireFormat,dataIn, bs); } info.PeerBrokerInfos = value; } else { info.PeerBrokerInfos = null; } info.BrokerName = TightUnmarshalString(dataIn, bs); info.SlaveBroker = bs.ReadBoolean(); info.MasterBroker = bs.ReadBoolean(); info.FaultTolerantConfiguration = bs.ReadBoolean(); info.DuplexConnection = bs.ReadBoolean(); info.NetworkConnection = bs.ReadBoolean(); info.ConnectionId = TightUnmarshalLong(wireFormat, dataIn, bs); info.BrokerUploadUrl = TightUnmarshalString(dataIn, bs); info.NetworkProperties = TightUnmarshalString(dataIn, bs); }
/// <summary> /// Handle incoming commands /// </summary> /// <param name="commandTransport">An ITransport</param> /// <param name="command">A Command</param> 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); } }
public virtual Response processBrokerInfo(BrokerInfo info) { return null; }
// // Un-marshal an object instance from the data input stream // public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) { base.LooseUnmarshal(wireFormat, o, dataIn); BrokerInfo info = (BrokerInfo)o; info.BrokerId = (BrokerId) LooseUnmarshalCachedObject(wireFormat, dataIn); info.BrokerURL = LooseUnmarshalString(dataIn); if (dataIn.ReadBoolean()) { short size = dataIn.ReadInt16(); BrokerInfo[] value = new BrokerInfo[size]; for( int i=0; i < size; i++ ) { value[i] = (BrokerInfo) LooseUnmarshalNestedObject(wireFormat,dataIn); } info.PeerBrokerInfos = value; } else { info.PeerBrokerInfos = null; } info.BrokerName = LooseUnmarshalString(dataIn); info.SlaveBroker = dataIn.ReadBoolean(); info.MasterBroker = dataIn.ReadBoolean(); info.FaultTolerantConfiguration = dataIn.ReadBoolean(); info.DuplexConnection = dataIn.ReadBoolean(); info.NetworkConnection = dataIn.ReadBoolean(); info.ConnectionId = LooseUnmarshalLong(wireFormat, dataIn); }
/// <summary> /// Handle incoming commands /// </summary> /// <param name="commandTransport">An ITransport</param> /// <param name="command">A Command</param> 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) { // Only terminate the connection if the transport we use is not fault // tolerant otherwise we let the transport deal with the broker closing // our connection and deal with IOException if it is sent to use. if(!closing.Value && !closed.Value && this.transport != null && !this.transport.IsFaultTolerant) { OnException(new NMSException("Broker closed this connection via Shutdown command.")); } } 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.DebugFormat("Connection[{0}]: Received a new ProducerAck -> ", this.ConnectionId, 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; } } Tracer.ErrorFormat("Connection[{0}]: ConnectionError: " + message + " : " + cause, this.ConnectionId); OnAsyncException(new NMSConnectionException(message, cause)); } } else { Tracer.ErrorFormat("Connection[{0}]: Unknown command: " + command, this.ConnectionId); } }