You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ch...@apache.org on 2006/03/05 13:05:57 UTC

svn commit: r383309 - in /incubator/activemq/trunk/openwire-dotnet: src/ src/ActiveMQ/ src/ActiveMQ/Transport/ src/ActiveMQ/Transport/Tcp/ src/JMS/ tests/ActiveMQ/ tests/JMS/

Author: chirino
Date: Sun Mar  5 04:05:53 2006
New Revision: 383309

URL: http://svn.apache.org/viewcvs?rev=383309&view=rev
Log:
Implemented the filtered layer concept similar to what we have with the Java implemenation. 


Added:
    incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Transport/ITransportFactory.cs
    incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Transport/LoggingTransport.cs
    incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Transport/MutexTransport.cs
    incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Transport/ResponseCorrelator.cs
    incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Transport/Tcp/
    incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Transport/Tcp/TcpTransport.cs
    incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Transport/Tcp/TcpTransportFactory.cs
    incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Transport/TransportFilter.cs
    incubator/activemq/trunk/openwire-dotnet/src/JMS/JMSConnectionException.cs
    incubator/activemq/trunk/openwire-dotnet/src/JMS/JMSException.cs
Removed:
    incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Transport/SocketTransport.cs
Modified:
    incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Connection.cs
    incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/ConnectionFactory.cs
    incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Transport/ITransport.cs
    incubator/activemq/trunk/openwire-dotnet/src/src.csproj
    incubator/activemq/trunk/openwire-dotnet/tests/ActiveMQ/TestMain.cs
    incubator/activemq/trunk/openwire-dotnet/tests/JMS/JMSTestSupport.cs

Modified: incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Connection.cs
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Connection.cs?rev=383309&r1=383308&r2=383309&view=diff
==============================================================================
--- incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Connection.cs (original)
+++ incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Connection.cs Sun Mar  5 04:05:53 2006
@@ -29,7 +29,8 @@
         {
             this.transport = transport;
             this.info = info;
-            this.transport.Command += new CommandHandler(OnCommand);
+            this.transport.Command = new CommandHandler(OnCommand);
+			this.transport.Exception = new ExceptionHandler(OnException);
             this.transport.Start();
         }
         
@@ -255,9 +256,14 @@
             }
             else
             {
-                Console.WriteLine("ERROR:ĂŠUnknown command: " + command);
+                Console.WriteLine("ERROR: Unknown command: " + command);
             }
         }
+		
+		protected void OnException(ITransport sender, Exception exception) {
+			Console.WriteLine("ERROR: Transport Exception: " + exception);
+		}
+		
         
         protected SessionInfo CreateSessionInfo(AcknowledgementMode acknowledgementMode)
         {

Modified: incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/ConnectionFactory.cs
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/ConnectionFactory.cs?rev=383309&r1=383308&r2=383309&view=diff
==============================================================================
--- incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/ConnectionFactory.cs (original)
+++ incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/ConnectionFactory.cs Sun Mar  5 04:05:53 2006
@@ -16,6 +16,7 @@
  */
 using ActiveMQ.Commands;
 using ActiveMQ.Transport;
+using ActiveMQ.Transport.Tcp;
 using JMS;
 using System;
 
@@ -26,8 +27,7 @@
     /// </summary>
     public class ConnectionFactory : IConnectionFactory
     {
-        private string host = "localhost";
-        private int port = 61616;
+        private Uri brokerUri = new Uri("tcp://localhost:61616");
         private string userName;
         private string password;
         private string clientId;
@@ -36,10 +36,9 @@
         {
         }
         
-        public ConnectionFactory(string host, int port)
+        public ConnectionFactory(Uri brokerUri)
         {
-            this.host = host;
-            this.port = port;
+			this.brokerUri=brokerUri;
         }
         
         public IConnection CreateConnection()
@@ -50,7 +49,7 @@
         public IConnection CreateConnection(string userName, string password)
         {
             ConnectionInfo info = CreateConnectionInfo(userName, password);
-            ITransport transport = CreateTransport();
+            ITransport transport = new TcpTransportFactory().CreateTransport(brokerUri);
             Connection connection = new Connection(transport, info);
             connection.ClientId = info.ClientId;
             return connection;
@@ -58,18 +57,12 @@
         
         // Properties
         
-        public string Host
+        public Uri BrokerUri
         {
-            get { return host; }
-            set { host = value; }
+            get { return brokerUri; }
+            set { brokerUri = value; }
         }
-        
-        public int Port
-        {
-            get { return port; }
-            set { port = value; }
-        }
-        
+                
         public string UserName
         {
             get { return userName; }
@@ -112,9 +105,5 @@
             return Guid.NewGuid().ToString();
         }
         
-        protected ITransport CreateTransport()
-        {
-            return new SocketTransport(host, port);
-        }
     }
 }

Modified: incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Transport/ITransport.cs
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Transport/ITransport.cs?rev=383309&r1=383308&r2=383309&view=diff
==============================================================================
--- incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Transport/ITransport.cs (original)
+++ incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Transport/ITransport.cs Sun Mar  5 04:05:53 2006
@@ -19,22 +19,14 @@
 using JMS;
 using System;
 
-
-
-namespace ActiveMQ.Transport
-{
-	public delegate void CommandHandler(ITransport sender, Command command);
-}
-namespace ActiveMQ.Transport
-{
-	public delegate void ExceptionHandler(ITransport sender, Exception command);
-}
-
 /// <summary>
 /// Represents the logical networking transport layer.
 /// </summary>
 namespace ActiveMQ.Transport
 {
+	public delegate void CommandHandler(ITransport sender, Command command);
+	public delegate void ExceptionHandler(ITransport sender, Exception command);
+
 	public interface ITransport : IStartable, IDisposable
     {
         void Oneway(Command command);
@@ -43,8 +35,15 @@
         
         Response Request(Command command);
         
-        event CommandHandler Command;
-        event ExceptionHandler Exception;
+        CommandHandler Command{
+            get;
+            set;
+        }
+		
+        ExceptionHandler Exception{
+            get;
+            set;
+        }
     }
 }
 

Added: incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Transport/ITransportFactory.cs
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Transport/ITransportFactory.cs?rev=383309&view=auto
==============================================================================
--- incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Transport/ITransportFactory.cs (added)
+++ incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Transport/ITransportFactory.cs Sun Mar  5 04:05:53 2006
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2006 The Apache Software Foundation or its licensors, as
+ * applicable.
+ *
+ * Licensed 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;
+
+namespace ActiveMQ.Transport
+{
+	public interface ITransportFactory
+    {
+		ITransport CreateTransport(Uri location);
+	}
+}

Added: incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Transport/LoggingTransport.cs
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Transport/LoggingTransport.cs?rev=383309&view=auto
==============================================================================
--- incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Transport/LoggingTransport.cs (added)
+++ incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Transport/LoggingTransport.cs Sun Mar  5 04:05:53 2006
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2006 The Apache Software Foundation or its licensors, as
+ * applicable.
+ *
+ * Licensed 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 ActiveMQ.Commands;
+using ActiveMQ.Transport;
+using JMS;
+using System;
+
+/// <summary>
+/// A Transport filter that is used to log the commands sent and received.
+/// </summary>
+namespace ActiveMQ.Transport
+{
+	public class LoggingTransport : TransportFilter
+    {
+		public LoggingTransport(ITransport next) : base(next) {
+		}
+		
+		protected override void OnCommand(ITransport sender, Command command) {
+			Console.WriteLine("RECEIVED: " + command);
+			this.command(sender, command);
+		}
+		
+		protected override void OnException(ITransport sender, Exception error) {
+			Console.WriteLine("RECEIVED Exception: " + error);
+			this.exception(sender, error);
+		}
+		
+		public override void Oneway(Command command)
+		{
+			Console.WriteLine("SENDING: " + command);
+			this.next.Oneway(command);
+		}
+				
+    }
+}
+

Added: incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Transport/MutexTransport.cs
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Transport/MutexTransport.cs?rev=383309&view=auto
==============================================================================
--- incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Transport/MutexTransport.cs (added)
+++ incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Transport/MutexTransport.cs Sun Mar  5 04:05:53 2006
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2006 The Apache Software Foundation or its licensors, as
+ * applicable.
+ *
+ * Licensed 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 ActiveMQ.Commands;
+using ActiveMQ.Transport;
+using JMS;
+using System;
+
+/// <summary>
+/// A Transport which gaurds access to the next transport using a mutex.
+/// </summary>
+namespace ActiveMQ.Transport
+{
+	public class MutexTransport : TransportFilter
+    {
+		
+		private readonly object transmissionLock = new object();
+		
+		public MutexTransport(ITransport next) : base(next) {
+		}
+		
+		
+		public override void Oneway(Command command)
+		{
+            lock (transmissionLock)
+            {
+				this.next.Oneway(command);
+			}
+		}
+		
+		public override FutureResponse AsyncRequest(Command command)
+		{
+            lock (transmissionLock)
+            {
+				return base.AsyncRequest(command);
+			}
+		}
+		
+		public override Response Request(Command command)
+		{
+            lock (transmissionLock)
+            {
+				return base.Request(command);
+			}
+		}
+		
+		public override void Dispose()
+		{
+            lock (transmissionLock)
+            {
+				base.Dispose();
+			}
+		}
+		
+    }
+}
+

Added: incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Transport/ResponseCorrelator.cs
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Transport/ResponseCorrelator.cs?rev=383309&view=auto
==============================================================================
--- incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Transport/ResponseCorrelator.cs (added)
+++ incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Transport/ResponseCorrelator.cs Sun Mar  5 04:05:53 2006
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2006 The Apache Software Foundation or its licensors, as
+ * applicable.
+ *
+ * Licensed 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.Collections;
+
+using ActiveMQ.Commands;
+using ActiveMQ.Transport;
+using JMS;
+
+/// <summary>
+/// A Transport which gaurds access to the next transport using a mutex.
+/// </summary>
+namespace ActiveMQ.Transport
+{
+	public class ResponseCorrelator : TransportFilter
+    {
+
+        private readonly IDictionary requestMap = Hashtable.Synchronized(new Hashtable());
+        private readonly Object mutex = new Object();
+        private short nextCommandId;
+		
+		public ResponseCorrelator(ITransport next) : base(next) {
+		}
+
+		short GetNextCommandId() {
+			lock(mutex) {
+				return ++nextCommandId;
+			}
+		}
+		
+		public override void Oneway(Command command)
+		{
+			command.CommandId = GetNextCommandId();
+			command.ResponseRequired = false;
+			next.Oneway(command);
+		}
+		
+		public override FutureResponse AsyncRequest(Command command)
+		{
+			command.CommandId = GetNextCommandId();
+			command.ResponseRequired = true;
+			FutureResponse future = new FutureResponse();
+			requestMap[command.CommandId] = future;
+			next.Oneway(command);
+			return future;
+
+		}
+		
+		public override Response Request(Command command)
+		{
+			FutureResponse future = AsyncRequest(command);
+            Response response = future.Response;
+            if (response is ExceptionResponse)
+            {
+                ExceptionResponse er = (ExceptionResponse) response;
+                BrokerError brokerError = er.Exception;
+                throw new BrokerException(brokerError);
+            }
+            return response;
+		}
+		
+		protected override void OnCommand(ITransport sender, Command command)
+		{
+			if( command is Response ) {
+				
+				Response response = (Response) command;
+				FutureResponse future = (FutureResponse) requestMap[response.CorrelationId];
+				if (future != null)
+				{
+					if (response is ExceptionResponse)
+					{
+						ExceptionResponse er = (ExceptionResponse) response;
+						BrokerError brokerError = er.Exception;
+						this.exception(this, new BrokerException(brokerError));
+					}
+					future.Response = response;
+				}
+				else
+				{
+					Console.WriteLine("ERROR: Unknown response ID: " + response.CommandId + " for response: " + response);
+				}
+			} else {
+				this.command(sender, command);
+			}
+		}
+		
+    }
+}
+

Added: incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Transport/Tcp/TcpTransport.cs
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Transport/Tcp/TcpTransport.cs?rev=383309&view=auto
==============================================================================
--- incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Transport/Tcp/TcpTransport.cs (added)
+++ incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Transport/Tcp/TcpTransport.cs Sun Mar  5 04:05:53 2006
@@ -0,0 +1,145 @@
+/*
+ * Copyright 2006 The Apache Software Foundation or its licensors, as
+ * applicable.
+ *
+ * Licensed 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 ActiveMQ;
+using ActiveMQ.Commands;
+using ActiveMQ.OpenWire;
+using ActiveMQ.Transport;
+using System;
+using System.Collections;
+using System.IO;
+using System.Net;
+using System.Net.Sockets;
+using System.Threading;
+
+
+
+/// <summary>
+/// An implementation of ITransport that uses sockets to communicate with the broker
+/// </summary>
+
+namespace ActiveMQ.Transport.Tcp
+{
+	public class TcpTransport : ITransport
+    {
+        private Socket socket;
+        private OpenWireFormat wireformat = new OpenWireFormat();
+        private BinaryReader socketReader;
+        private BinaryWriter socketWriter;
+        private Thread readThread;
+        private bool started;
+        volatile private bool closed;
+        
+        public CommandHandler command;
+        public ExceptionHandler exception;
+        
+        public TcpTransport(Socket socket)
+        {
+			this.socket = socket;
+        }
+        
+        /// <summary>
+        /// Method Start
+        /// </summary>
+        public void Start()
+        {
+            if (!started)
+            {
+				if( command == null )
+					throw new InvalidOperationException ("command cannot be null when Start is called.");
+				if( exception == null )
+					throw new InvalidOperationException ("exception cannot be null when Start is called.");
+				
+                started = true;
+                
+                NetworkStream networkStream = new NetworkStream(socket);
+                socketWriter = new BinaryWriter(networkStream);
+                socketReader = new BinaryReader(networkStream);
+                
+                // now lets create the background read thread
+                readThread = new Thread(new ThreadStart(ReadLoop));
+                readThread.Start();
+                
+                // lets send the wireformat we're using
+                Oneway(wireformat.WireFormatInfo);
+            }
+        }
+        
+		public void Oneway(Command command)
+        {
+			wireformat.Marshal(command, socketWriter);
+			socketWriter.Flush();
+        }
+        
+        public FutureResponse AsyncRequest(Command command)
+        {
+            throw new NotImplementedException("Use a ResponseCorrelator if you want to issue AsyncRequest calls");
+        }
+        
+        public Response Request(Command command)
+        {
+            throw new NotImplementedException("Use a ResponseCorrelator if you want to issue Request calls");
+        }
+        
+        public void Dispose()
+        {
+			closed = true;
+			socket.Close();
+			readThread.Join();
+            socketWriter.Close();
+            socketReader.Close();
+        }
+        
+        public void ReadLoop()
+        {
+            while (!closed)
+            {
+                try
+                {
+                    Command command = (Command) wireformat.Unmarshal(socketReader);
+					this.command(this, command);
+                }
+				catch (ObjectDisposedException)
+                {
+                    break;
+                }
+                catch (Exception e)
+                {
+                    this.exception(this,e);
+                }
+            }
+        }
+        
+		
+		
+        
+        // Implementation methods
+                
+		public CommandHandler Command {
+            get { return command; }
+            set { this.command = value; }
+        }
+		
+        public  ExceptionHandler Exception {
+            get { return exception; }
+            set { this.exception = value; }
+        }
+		
+    }
+}
+
+
+

Added: incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Transport/Tcp/TcpTransportFactory.cs
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Transport/Tcp/TcpTransportFactory.cs?rev=383309&view=auto
==============================================================================
--- incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Transport/Tcp/TcpTransportFactory.cs (added)
+++ incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Transport/Tcp/TcpTransportFactory.cs Sun Mar  5 04:05:53 2006
@@ -0,0 +1,62 @@
+/*
+* Copyright 2006 The Apache Software Foundation or its licensors, as
+* applicable.
+*
+* Licensed 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.Net;
+using System.Net.Sockets;
+using ActiveMQ.Transport;
+
+namespace ActiveMQ.Transport.Tcp
+{
+	public class TcpTransportFactory : ITransportFactory
+    {
+		public ITransport CreateTransport(Uri location) {
+			
+			// Console.WriteLine("Opening socket to: " + host + " on port: " + port);
+			Socket socket = Connect(location.Host, location.Port);
+			ITransport rc = new TcpTransport(socket);
+			// TODO: use URI query string to enable the LoggingTransport
+			// rc = new LoggingTransport(rc);
+			rc = new ResponseCorrelator(rc);
+			rc = new MutexTransport(rc);
+			return rc;
+			
+		}
+	
+		protected Socket Connect(string host, int port)
+        {
+            // Looping through the AddressList allows different type of connections to be tried
+            // (IPv4, IPv6 and whatever else may be available).
+            IPHostEntry hostEntry = Dns.Resolve(host);
+            foreach (IPAddress address in hostEntry.AddressList)
+            {
+                Socket socket = new Socket(
+                    address.AddressFamily,
+                    SocketType.Stream,
+                    ProtocolType.Tcp);
+                socket.Connect(new IPEndPoint(address, port));
+                if (socket.Connected)
+                {
+                    return socket;
+                }
+            }
+            throw new SocketException();
+        }
+		
+	}
+	
+}

Added: incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Transport/TransportFilter.cs
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Transport/TransportFilter.cs?rev=383309&view=auto
==============================================================================
--- incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Transport/TransportFilter.cs (added)
+++ incubator/activemq/trunk/openwire-dotnet/src/ActiveMQ/Transport/TransportFilter.cs Sun Mar  5 04:05:53 2006
@@ -0,0 +1,109 @@
+/*
+ * Copyright 2006 The Apache Software Foundation or its licensors, as
+ * applicable.
+ *
+ * Licensed 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 ActiveMQ.Commands;
+using ActiveMQ.Transport;
+using JMS;
+using System;
+
+/// <summary>
+/// Used to implement a filter on the transport layer.
+/// </summary>
+namespace ActiveMQ.Transport
+{
+	public class TransportFilter : ITransport
+    {
+		protected readonly ITransport next;
+		protected CommandHandler command;
+		protected ExceptionHandler exception;
+		
+		public TransportFilter(ITransport next) {
+			this.next = next;
+			this.next.Command = new CommandHandler(OnCommand);
+			this.next.Exception = new ExceptionHandler(OnException);
+		}
+		
+		protected virtual void OnCommand(ITransport sender, Command command) {
+			this.command(sender, command);
+		}
+		
+		protected virtual void OnException(ITransport sender, Exception command) {
+			this.exception(sender, command);
+		}
+		
+		
+		/// <summary>
+		/// Method Oneway
+		/// </summary>
+		/// <param name="command">A  Command</param>
+		public virtual void Oneway(Command command)
+		{
+			this.next.Oneway(command);
+		}
+		
+		/// <summary>
+		/// Method AsyncRequest
+		/// </summary>
+		/// <returns>A FutureResponse</returns>
+		/// <param name="command">A  Command</param>
+		public virtual FutureResponse AsyncRequest(Command command)
+		{
+			return this.next.AsyncRequest(command);
+		}
+		
+		/// <summary>
+		/// Method Request
+		/// </summary>
+		/// <returns>A Response</returns>
+		/// <param name="command">A  Command</param>
+		public virtual Response Request(Command command)
+		{
+			return this.next.Request(command);
+		}
+		
+		/// <summary>
+		/// Method Start
+		/// </summary>
+		public virtual void Start()
+		{
+			if( command == null )
+				throw new InvalidOperationException ("command cannot be null when Start is called.");
+			if( exception == null )
+				throw new InvalidOperationException ("exception cannot be null when Start is called.");
+			this.next.Start();
+		}
+		
+		/// <summary>
+		/// Method Dispose
+		/// </summary>
+		public virtual void Dispose()
+		{
+			this.next.Dispose();
+		}
+		
+		public CommandHandler Command {
+            get { return command; }
+            set { this.command = value; }
+        }
+		
+        public  ExceptionHandler Exception {
+            get { return exception; }
+            set { this.exception = value; }
+        }
+		
+    }
+}
+

Added: incubator/activemq/trunk/openwire-dotnet/src/JMS/JMSConnectionException.cs
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/openwire-dotnet/src/JMS/JMSConnectionException.cs?rev=383309&view=auto
==============================================================================
--- incubator/activemq/trunk/openwire-dotnet/src/JMS/JMSConnectionException.cs (added)
+++ incubator/activemq/trunk/openwire-dotnet/src/JMS/JMSConnectionException.cs Sun Mar  5 04:05:53 2006
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2006 The Apache Software Foundation or its licensors, as
+ * applicable.
+ *
+ * Licensed 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;
+
+
+/// <summary>
+/// Represents a connection failure.
+/// </summary>
+namespace JMS
+{
+	public class ConnectionException : JMSException
+	{
+		public JMSException(string message) : base(message)
+		{
+		}
+	}
+}
+

Added: incubator/activemq/trunk/openwire-dotnet/src/JMS/JMSException.cs
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/openwire-dotnet/src/JMS/JMSException.cs?rev=383309&view=auto
==============================================================================
--- incubator/activemq/trunk/openwire-dotnet/src/JMS/JMSException.cs (added)
+++ incubator/activemq/trunk/openwire-dotnet/src/JMS/JMSException.cs Sun Mar  5 04:05:53 2006
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2006 The Apache Software Foundation or its licensors, as
+ * applicable.
+ *
+ * Licensed 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;
+
+
+/// <summary>
+/// Represents a JMS exception
+/// </summary>
+namespace JMS
+{
+	public class JMSException : Exception
+	{
+		public JMSException(string message) : base(message)
+		{
+		}
+	}
+}
+

Modified: incubator/activemq/trunk/openwire-dotnet/src/src.csproj
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/openwire-dotnet/src/src.csproj?rev=383309&r1=383308&r2=383309&view=diff
==============================================================================
--- incubator/activemq/trunk/openwire-dotnet/src/src.csproj (original)
+++ incubator/activemq/trunk/openwire-dotnet/src/src.csproj Sun Mar  5 04:05:53 2006
@@ -164,7 +164,13 @@
         <Compile Include="ActiveMQ\TransactionContext.cs"/>
         <Compile Include="ActiveMQ\Transport\FutureResponse.cs"/>
         <Compile Include="ActiveMQ\Transport\ITransport.cs"/>
-        <Compile Include="ActiveMQ\Transport\SocketTransport.cs"/>
+        <Compile Include="ActiveMQ\Transport\ITransportFactory.cs"/>
+        <Compile Include="ActiveMQ\Transport\LoggingTransport.cs"/>
+        <Compile Include="ActiveMQ\Transport\MutexTransport.cs"/>
+        <Compile Include="ActiveMQ\Transport\ResponseCorrelator.cs"/>
+        <Compile Include="ActiveMQ\Transport\Tcp\TcpTransport.cs"/>
+        <Compile Include="ActiveMQ\Transport\Tcp\TcpTransportFactory.cs"/>
+        <Compile Include="ActiveMQ\Transport\TransportFilter.cs"/>
         <Compile Include="JMS\IBytesMessage.cs"/>
         <Compile Include="JMS\IConnection.cs"/>
         <Compile Include="JMS\IConnectionFactory.cs"/>

Modified: incubator/activemq/trunk/openwire-dotnet/tests/ActiveMQ/TestMain.cs
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/openwire-dotnet/tests/ActiveMQ/TestMain.cs?rev=383309&r1=383308&r2=383309&view=diff
==============================================================================
--- incubator/activemq/trunk/openwire-dotnet/tests/ActiveMQ/TestMain.cs (original)
+++ incubator/activemq/trunk/openwire-dotnet/tests/ActiveMQ/TestMain.cs Sun Mar  5 04:05:53 2006
@@ -29,7 +29,7 @@
                 Console.WriteLine("About to connect to ActiveMQ");
 
                 // START SNIPPET: demo
-                IConnectionFactory factory = new ConnectionFactory("localhost", 61616);
+                IConnectionFactory factory = new ConnectionFactory(new Uri("tcp://localhost:61616"));
                 using (IConnection connection = factory.CreateConnection())
                 {
                     Console.WriteLine("Created a connection!");

Modified: incubator/activemq/trunk/openwire-dotnet/tests/JMS/JMSTestSupport.cs
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/openwire-dotnet/tests/JMS/JMSTestSupport.cs?rev=383309&r1=383308&r2=383309&view=diff
==============================================================================
--- incubator/activemq/trunk/openwire-dotnet/tests/JMS/JMSTestSupport.cs (original)
+++ incubator/activemq/trunk/openwire-dotnet/tests/JMS/JMSTestSupport.cs Sun Mar  5 04:05:53 2006
@@ -113,7 +113,7 @@
         }
 
 		protected virtual IConnectionFactory CreateConnectionFactory() {
-			return new ActiveMQ.ConnectionFactory("localhost", 61616);
+			return new ActiveMQ.ConnectionFactory(new Uri("tcp://localhost:61616"));
 		}
 		
 		protected virtual IConnection CreateConnection()