/* * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * */ using System; using System.Configuration; using System.ServiceModel.Channels; using org.apache.qpid.client; namespace org.apache.qpid.wcf.model { public sealed class QpidTransportBindingElement : TransportBindingElement { private Client _connection; private string _host; private int _port; private string _username; private string _password; private string _virtuaHost; /// /// Creates a new instance of the QpidTransportBindingElement Class /// public QpidTransportBindingElement() { _host = "localhost"; _port = 5672; _username = "guest"; _password = "guest"; _virtuaHost = "test"; } private QpidTransportBindingElement(QpidTransportBindingElement other) : this() { Connection = other.Connection; Host = other.Host; PortNumber = other.PortNumber; UserName = other.UserName; Password = other.Password; } public override IChannelFactory BuildChannelFactory(BindingContext context) { if (Host == null) throw new InvalidOperationException("No broker was specified."); return (IChannelFactory) new QpidChannelFactory(context); } public override IChannelListener BuildChannelListener(BindingContext context) { if (Host == null) throw new InvalidOperationException("No broker was specified."); return (IChannelListener) ((object) new QpidChannelListener(context)); } public override bool CanBuildChannelFactory(BindingContext context) { return typeof (TChannel) == typeof (IOutputChannel); } public override bool CanBuildChannelListener(BindingContext context) { return typeof (TChannel) == typeof (IInputChannel); } public override BindingElement Clone() { return new QpidTransportBindingElement(this); } public override T GetProperty(BindingContext context) { return context.GetInnerProperty(); } /// /// Gets the scheme used by the binding, this is 0.10 as default for now. /// public override string Scheme { get { return "soap.amqp"; } } /// /// Specifies the broker host /// [ConfigurationProperty("host")] public string Host { get { return _host; } set { _host = value; } } /// /// Specifies the broker port /// public int PortNumber { get { return _port; } set { _port = value; } } /// /// Specifies the username /// public string UserName { get { return _username; } set { _username = value; } } /// /// Specifies the password /// public string Password { get { return _password; } set { _password = value; } } /// /// Specifies the virtualhost /// public string VirtualHost { get { return _virtuaHost; } set { _virtuaHost = value; } } /// /// Specifies the connection /// public Client Connection { get { return _connection; } set { _connection = value; } } internal ClientSession Open(long timeout) { if (Connection == null) { Connection = new Client(); } Connection.connect(Host, PortNumber, VirtualHost, UserName, Password); return Connection.createSession(timeout); } internal void Close() { if (Connection != null) { try { Connection.close(); } catch (Exception e) { // todo log it } } } } }