/// <summary> /// If commands are found in the queue it sends commands and removes processed commands from queue /// </summary> private void ProcessCommand() { // Check if we have any commands in the queue to process. if (queue.Count > 0) { Cm11Message command = queue.Peek(); if (command != null) { // Try to send command to CM11 device try { if (Send(command.Buffer, command.Count)) { if (SendOk()) { lock (queuePadLock) { queue.Dequeue(); } } } } catch (System.TimeoutException) { RaiseErrorEvent(new Cm11LowLevelDriverError("Sending command to CM11 interace failed. Is the CM11 interface still plugged in to the AC outlet?")); } } } }
/// <summary> /// Adds a message to the queue. /// </summary> /// <param name="message">Message to be added to the queue</param> public void AddMessage(Cm11Message message) { lock (queuePadLock) { if (this.queue.Count < 100) { this.queue.Enqueue(message); } else { // We already have 100 commands waiting. // Just drop further commands. Comms are probably // down. RaiseErrorEvent(new Cm11LowLevelDriverError("Communication to CM11 interface is probably down and message queue is full.")); } } }