Beispiel #1
0
        // Construct a new Exchange.
        public MessageExchange(string shellOrTitleId, string name, string masterSN)
        {
            Shell s = Shell.GetShell(shellOrTitleId);

            if (s == null)
            {
                s = Shell.GetShell(Shell.ConsoleShellId);
            }
            if (s != null)
            {
                Interrupter = s.Interrupter;
                ShellId     = s.ShellId;
            }
            Id             = name;
            IsClosing      = false;
            ParameterTable = new DeviceParameterTable();
            ParameterTabelInit(masterSN);
            Manager = new NetIfManager(ShellId, masterSN, Interrupter);
            Manager.AddDriver(new MediatorNetIf(Manager, this));

            OutgoingQueue     = new LinkedBlockingCollection <MessageBinder>();
            IncomingQueue     = new LinkedBlockingCollection <BabelMessage>();
            IncomingListeners = new List <MessageBinder>();
            WaitingForReply   = new List <MessageBinder>();

            DispatcherThread = new MessageDispatcherThread(this);
            DispatcherThread.Start();
            ReceiverThread = new MessageReceiverThread(this);
            ReceiverThread.Start();

            Manager.Start();
        }
Beispiel #2
0
 public void Close()
 {
     IsClosing = true;
     if (DispatcherThread != null)
     {
         Primitives.Interrupt(DispatcherThread.Task);
         DispatcherThread = null;
     }
     if (ReceiverThread != null)
     {
         Primitives.Interrupt(ReceiverThread.Task);
         ReceiverThread = null;
     }
     if (Manager != null)
     {
         Manager.Close();
         Manager = null;
     }
 }