You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ar...@apache.org on 2008/09/26 15:14:57 UTC

svn commit: r699306 - in /incubator/qpid/trunk/qpid/dotnet/client-010/addins: ExcelAddIn/ExcelAddIn.cs ExcelAddInProducer/Program.cs

Author: arnaudsimon
Date: Fri Sep 26 06:14:56 2008
New Revision: 699306

URL: http://svn.apache.org/viewvc?rev=699306&view=rev
Log:
QPID-1293: Changed for using new message API + added generic message processor 

Modified:
    incubator/qpid/trunk/qpid/dotnet/client-010/addins/ExcelAddIn/ExcelAddIn.cs
    incubator/qpid/trunk/qpid/dotnet/client-010/addins/ExcelAddInProducer/Program.cs

Modified: incubator/qpid/trunk/qpid/dotnet/client-010/addins/ExcelAddIn/ExcelAddIn.cs
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/dotnet/client-010/addins/ExcelAddIn/ExcelAddIn.cs?rev=699306&r1=699305&r2=699306&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/dotnet/client-010/addins/ExcelAddIn/ExcelAddIn.cs (original)
+++ incubator/qpid/trunk/qpid/dotnet/client-010/addins/ExcelAddIn/ExcelAddIn.cs Fri Sep 26 06:14:56 2008
@@ -23,25 +23,36 @@
 using System.Collections.Generic;
 using System.Configuration;
 using System.IO;
+using System.Reflection;
 using System.Runtime.InteropServices;
 using System.Text;
-using client.client;
 using Microsoft.Office.Interop.Excel;
 using org.apache.qpid.client;
 using org.apache.qpid.transport;
 
 namespace ExcelAddIn
 {
+    public delegate string ProcessMessage(IMessage m);
+
+    /// <summary>   
+    /// This interface must be implemented so to use a user defined message processor 
+    /// </summary>
+    public interface MessageProcessor
+    {
+        string ProcessMessage(IMessage m);
+    }
+
     [ComVisible(true), ProgId("Qpid")]
     public class ExcelAddIn : IRtdServer 
     {
         private IRTDUpdateEvent _onMessage;
-        private readonly Dictionary<int, MessageTransfer> _topicMessages = new Dictionary<int, MessageTransfer>();
+        private readonly Dictionary<int, IMessage> _topicMessages = new Dictionary<int, IMessage>();
         private readonly Dictionary<string, QpidListener> _queueListener = new Dictionary<string, QpidListener>();
         private readonly Dictionary<int, string> _topicQueueName = new Dictionary<int, string>();
         private Client _client;
-        private ClientSession _session; 
-        
+        private ClientSession _session;
+        private ProcessMessage _messageProcessor;
+
         #region properties
 
         public IRTDUpdateEvent OnMessage
@@ -49,7 +60,7 @@
             get { return _onMessage; }
         }
 
-        public Dictionary<int, MessageTransfer>  TopicMessages
+        public Dictionary<int, IMessage>  TopicMessages
         {
             get { return _topicMessages; }
         }
@@ -78,6 +89,8 @@
             string virtualhost = "test";
             string username = "guest";
             string password = "guest";
+            _messageProcessor = getMessage;
+          
             if( ConfigurationManager.AppSettings["Host"] != null )
             {
                 host = ConfigurationManager.AppSettings["Host"];
@@ -98,6 +111,22 @@
             {
                 password = ConfigurationManager.AppSettings["Password"];
             }
+            if (ConfigurationManager.AppSettings["ProcessorAssembly"] != null)
+            {
+                try
+                {
+                    Assembly a = Assembly.LoadFrom(ConfigurationManager.AppSettings["ProcessorAssembly"]);
+                    Object o = a.CreateInstance(ConfigurationManager.AppSettings["ProcessorClass"]);
+                    MessageProcessor p = (MessageProcessor) o;
+                    _messageProcessor = p.ProcessMessage;
+                }
+                catch (Exception e)
+                {
+                    System.Windows.Forms.MessageBox.Show("Error: \n" + e.StackTrace);         
+                    return 0;
+                }
+            }
+
             System.Windows.Forms.MessageBox.Show("Connection parameters: \n host: " + host + "\n port: " 
                                                  + port + "\n user: " + username);
             try
@@ -195,11 +224,11 @@
 
         public Array RefreshData(ref int TopicCount)
         {
-            Array result = new object[2, _topicMessages.Count];            
-            foreach (KeyValuePair<int, MessageTransfer> pair in _topicMessages)
+            Array result = new object[2, _topicMessages.Count];
+            foreach (KeyValuePair<int, IMessage> pair in _topicMessages)
             {
                 result.SetValue(pair.Key, 0, pair.Key);
-                string value = gerMessage(pair.Value);
+                string value = _messageProcessor(pair.Value);
                 result.SetValue(value, 1, pair.Key);                
             }
             TopicCount = _topicMessages.Count; 
@@ -214,18 +243,21 @@
         #endregion
         //END IRTDServer METHODS
 
-        private string gerMessage(MessageTransfer m)
+        private string getMessage(IMessage m)
         {
+            string res;
             BinaryReader reader = new BinaryReader(m.Body, Encoding.UTF8);
             byte[] body = new byte[m.Body.Length - m.Body.Position];
             reader.Read(body, 0, body.Length);
             ASCIIEncoding enc = new ASCIIEncoding();            
-            return enc.GetString(body);                
+            res = enc.GetString(body);
+            res = res + " price: " + m.ApplicationHeaders["price"];
+            return res;
         }
 
     }
 
-    class QpidListener : MessageListener
+    class QpidListener : IMessageListener
     {
         private readonly ExcelAddIn _excel;       
         private readonly List<int> _topics = new List<int>();
@@ -240,7 +272,7 @@
             _topics.Add(topic);
         }
 
-        public void messageTransfer(MessageTransfer m)
+        public void messageTransfer(IMessage m)
         {            
             foreach (int i in _topics)
             {

Modified: incubator/qpid/trunk/qpid/dotnet/client-010/addins/ExcelAddInProducer/Program.cs
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/dotnet/client-010/addins/ExcelAddInProducer/Program.cs?rev=699306&r1=699305&r2=699306&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/dotnet/client-010/addins/ExcelAddInProducer/Program.cs (original)
+++ incubator/qpid/trunk/qpid/dotnet/client-010/addins/ExcelAddInProducer/Program.cs Fri Sep 26 06:14:56 2008
@@ -22,8 +22,6 @@
 using System.Text;
 using System.Threading;
 using org.apache.qpid.client;
-using org.apache.qpid.transport;
-using org.apache.qpid.transport.util;
 
 namespace ExcelAddInProducer
 {
@@ -40,13 +38,14 @@
             Console.WriteLine("Session created");
             ssn.queueDeclare("queue1", null, null);
             ssn.exchangeBind("queue1", "amq.direct", "queue1", null);
-
+            IMessage message = new Message();
+            message.ApplicationHeaders.Add("price", 0);
             for (int i = 0; i < 100; i++)
             {
-                ssn.messageTransfer("amq.direct", MessageAcceptMode.NONE, MessageAcquireMode.PRE_ACQUIRED,
-                                    new Header(new DeliveryProperties().setRoutingKey("queue1"),
-                                               new MessageProperties().setMessageId(UUID.randomUUID())),
-                                    Encoding.UTF8.GetBytes("test: " + i));
+                message.clearData();
+                message.appendData( Encoding.UTF8.GetBytes("test: " + i));
+                message.ApplicationHeaders["price"] =  i;
+                ssn.messageTransfer("amq.direct", "queue1", message);               
                 Thread.Sleep(1000);
             }