// 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(); }
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; } }