/// <summary> /// Start the connection, i.e. start flowing messages. Note that this method must be called only from a single thread /// and is not thread safe (which is legal according to the JMS specification). /// @throws JMSException /// </summary> public void Start() { CheckNotClosed(); if (!_started) { foreach (DictionaryEntry lde in _sessions) { AmqChannel s = (AmqChannel)lde.Value; s.Start(); } _started = true; } }
protected override object operation() { ushort channelId = _connection.NextChannelId(); if (_log.IsDebugEnabled) { _log.Debug("Write channel open frame for channel id " + channelId); } // We must create the channel and register it before actually sending the frame to the server to // open it, so that there is no window where we could receive data on the channel and not be set // up to handle it appropriately. AmqChannel channel = new AmqChannel(_connection, channelId, _transacted, _acknowledgeMode, _prefetchHigh, _prefetchLow); _connection.ProtocolSession.AddSessionByChannel(channelId, channel); _connection.RegisterSession(channelId, channel); bool success = false; try { _connection.CreateChannelOverWire(channelId, _prefetchHigh, _prefetchLow, _transacted); success = true; } catch (AMQException e) { throw new QpidException("Error creating channel: " + e, e); } finally { if (!success) { _connection.ProtocolSession.RemoveSessionByChannel(channelId); _connection.DeregisterSession(channelId); } } if (_connection._started) { channel.Start(); } return(channel); }