public void Test_NTMNC_TMC_AddEventToQueue()
        {
            //start up controller
            _controller = new TreeModelNodeControls.TreeModelController(_view, _nodeViewFactory, null, "", "");
            _controller.Start();

            //create event
            IpcController.IpcEvent evt = new IpcController.IpcEvent(new Guid()
                    , DateTime.Now
                    , "TestApp"
                    , "TestInstance"
                    , "TestEventType"
                    , "Test Event Msg"
                    , "Test Event Msg Detail"
                    , "Test Node ID"
                    , "Test Parent Node ID");

            TestTreeModelEventImpl evnt = new TestTreeModelEventImpl(evt, "1", "TestNodeText", "2");

            //add to queue
            _controller.AddEventToQueue(evnt);

            System.Threading.Thread.Sleep(1000);

            //assertions
            Niawa.TreeModelNodeControls.TreeModelNode node = _controller.TreeModel.GetNode("1");
            Assert.AreEqual("1", node.NodeID, "Node created from event NodeID doesn't match expectation");
            Assert.AreEqual("2", node.ParentNodeID, "Node created from event ParentNodeID doesn't match expectation");
            Assert.AreEqual("TestNodeText", node.NodeText, "Node created from event NodeText doesn't match expectation");

            TestTreeModelNodeViewImpl view = (TestTreeModelNodeViewImpl) _controller.TreeModel.GetNode("1").NodeView;
            Assert.AreEqual(evnt, view.LatestEvent, "Event added to node doesn't match expectation when Latest Event interrogated");

            //cleanup
            _controller.Stop();
            _controller.Dispose();
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="startingNumber"></param>
        /// <returns></returns>
        private int WriteMessage(int startingNumber)
        {
            logger.Info("[" + _eventType + "] Writing message " + startingNumber);

            //write some data
            System.Guid eventGuid = System.Guid.NewGuid();
            DateTime eventDate = DateTime.Now;
            string testAppName = "TestIpcEventWriter";
            string testAppInstance = "TestIpcEventWriterInstance";
            string testData = "test data " + startingNumber;
            string testDataDetail = "test data detail " + startingNumber;

            Niawa.IpcController.IpcEvent msg = new IpcController.IpcEvent(eventGuid, eventDate, testAppName, testAppInstance, _eventType, testData, testDataDetail, _nodeID, _parentNodeID);

            _writer.Write(msg);

            startingNumber++;

            return startingNumber;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="data"></param>
        public void WebApiCommandListenThreadImpl(object data)
        {
            while (true)
            {
                if (webApiCmdReader.Messages.Count > 0)
                {
                    WebNotify.IpcEventWebAPIAdapter.NiawaWebMessage message = webApiCmdReader.Messages.Dequeue();
                    logger.Info("Received Web API Command message type [" + message.Id + "]");

                    switch(message.Id)
                    {
                        case 1:
                            //invoke a status update
                            logger.Info("Invoking a status update");
                            IpcController.IpcEvent evt = new IpcController.IpcEvent(Guid.NewGuid(), DateTime.Now, _applicationName, _hostname, "StatusReport", "", "", "", "");
                            nna.CmdReaderImpl(evt);

                            break;
                        default:
                            break;
                    }
                }
                else
                {
                    //no new messages
                }

                System.Threading.Thread.Sleep(100);
            }
        }
        public void Test_NIC_ICW_Write()
        {
            string TEST_IPC_TYPE = "TEST_IPC_TYPE_" + Guid.NewGuid().ToString();

            Niawa.IpcController.IpcEventWriter writer = new IpcController.IpcEventWriter("TestIpcEventWriter", TEST_IPC_TYPE, TEST_BUFFER_LENGTH, _utilsBus, false);
            Niawa.IpcController.IpcEventReader reader = new IpcController.IpcEventReader(TEST_IPC_TYPE, TEST_BUFFER_LENGTH, _utilsBus, false);

            writer.Start();
            reader.Start();
            System.Threading.Thread.Sleep(100);

            //assertions
            Assert.IsTrue(writer.IsStarted, "Writer started value doesn't match expectation after starting writer");
            Assert.IsTrue(reader.IsStarted, "Reader started value doesn't match expectation after starting reader");

            //assertion
            Assert.AreEqual(0, reader.CountMessagesInQueue(), "Count of messages in read buffer expected to be 0 before writing message");

            //write some data
            System.Guid eventGuid = System.Guid.NewGuid();
            DateTime eventDate = DateTime.Now;
            string testAppName = "TestIpcEventWriter";
            string testAppInstance = "TestIpcEventWriterInstance";
            string testData = "test data";
            string testDataDetail = "test data detail";
            string nodeID = "testNodeID";
            string parentNodeID = "testParentNodeID";

            Niawa.IpcController.IpcEvent msg = new IpcController.IpcEvent(eventGuid, eventDate, testAppName, testAppInstance, TEST_IPC_TYPE, testData, testDataDetail, nodeID, parentNodeID);

            writer.Write(msg);
            System.Threading.Thread.Sleep(500);

            //assertion
            Assert.AreEqual(1, reader.CountMessagesInQueue(), "Count of messages in read buffer expected to be 1 after writing message");

            //retrieve message
            Niawa.IpcController.IpcEvent newMsg = reader.ReadNextEvent();

            Assert.AreEqual(testAppInstance, msg.ApplicationInstance, "Message received from buffer doesn't have expected Application Instance");
            Assert.AreEqual(testAppName, msg.ApplicationName, "Message received from buffer doesn't have expected Application Name");
            Assert.AreEqual(eventDate, msg.EventDate, "Message received from buffer doesn't have expected Event Date");
            Assert.AreEqual(eventGuid, msg.EventID, "Message received from buffer doesn't have expected Event ID");
            Assert.AreEqual(testData, msg.EventMessage, "Message received from buffer doesn't have expected Event Message");
            Assert.AreEqual(testDataDetail, msg.EventMessageDetail, "Message received from buffer doesn't have expected Event Message Detail");
            Assert.AreEqual(TEST_IPC_TYPE, msg.EventType, "Message received from buffer doesn't have expected Event Type");
            Assert.AreEqual(nodeID, msg.NodeID, "Message received from buffer doesn't have expected Node ID");
            Assert.AreEqual(msg.ParentNodeID , parentNodeID, "Message received from buffer doesn't have epxected Parent Node ID");

            //stop
            writer.Stop();
            reader.Stop();
        }