main
 1using System;
 2using System.Collections.Generic;
 3using System.Transactions;
 4using Rhino.Queues;
 5using Rhino.Queues.Model;
 6
 7namespace common
 8{
 9    public class RhinoReceiver : Receiver
10    {
11        List<Observer<Message>> observers = new List<Observer<Message>>();
12        IQueue queue;
13        CommandProcessor processor;
14
15        public RhinoReceiver(IQueue queue, CommandProcessor processor)
16        {
17            this.queue = queue;
18            this.processor = processor;
19        }
20
21        public void register(Observer<Message> observer)
22        {
23            observers.Add(observer);
24        }
25
26        public void run()
27        {
28            try
29            {
30                using (var transaction = new TransactionScope())
31                {
32                    var message = queue.Receive();
33                    observers.each(observer => observer(message));
34                    transaction.Complete();
35                }
36            }
37            catch (Exception e)
38            {
39                e.add_to_log();
40            }
41            finally
42            {
43                processor.add(this);
44            }
45        }
46    }
47}