/// <summary> /// Создаёт сеть на основе типа и добавляет в коллекцию /// </summary> /// <param name="network">Объект сети из БД</param> public void AddNetwork(ResursAPI.Device network) { switch (network.DeviceType) { case ResursAPI.DeviceType.Network: { switch(network.DriverType) { case ResursAPI.DriverType.IncotextNetwork: { var incotexPort = new Incotex.NetworkControllers.DataLinkLayer.ComPort { BaudRate = (int)network.GetParameter( ParameterNamesIncotexNetwork.BautRate), PortName = ((ParameterStringContainer)network.GetParameter( ParameterNamesIncotexNetwork.PortName)).GetValue() }; var incotexController = new IncotexNetworkController { Id = (Guid)network.GetParameter(ParameterNamesIncotexNetwork.Id), Connection = (IDataLinkPort)incotexPort, BroadcastRequestDelay = (int)network.GetParameter( ParameterNamesIncotexNetwork.BroadcastDelay), RequestTimeout = (int)network.GetParameter( ParameterNamesIncotexNetwork.Timeout) }; _NetworkControllers.Add((INetwrokController)incotexController); if (network.IsActive) { incotexController.Start(); } else { incotexController.Stop(); } break; } case DriverType.VirtualIncotextNetwork: { var controller = new IncotexNetworkControllerVirtual { Id = (Guid)network.GetParameter(ParameterNamesIncotexNetworkVirtual.Id), PollingPeriod = (int)network.GetParameter(ParameterNamesIncotexNetworkVirtual.PollInterval) }; _NetworkControllers.Add((INetwrokController)controller); if (network.IsActive) { controller.Start(); } else { controller.Stop(); } break; } default: { throw new NotSupportedException(String.Format( "Устройтсво с DriverType={0} не поддерживается", network.DriverType.ToString())); } } break; } case ResursAPI.DeviceType.Counter: { throw new InvalidCastException( "Попытка приветсти счётчик эл энергии к контроллеру сети"); } default: { throw new InvalidCastException(String.Format( "Неудалось привести типы. Устройтсво с DeviceType={0} не поддерживается", network.DeviceType.ToString())); } } }
//[ExpectedException(typeof(InvalidOperationException), "")] public void TestReadGroupAddressByControllerIsStopped() { // Arrange var msg = new DataMessage(new byte[] { 0, 0, 0, 2 }) { Address = 1, CmdCode = 0x20, MessageType = MessageType.IncomingMessage }; Mock<IDataLinkPort> comPort = new Mock<IDataLinkPort>(); comPort.Setup(p => p.IsOpen).Returns(true); comPort.Setup(p => p.MessagesToRead).Returns(0); comPort.Setup(p => p.Write(It.IsAny<IMessage>())) .Raises(m => m.MessageReceived += null, new EventArgs()); comPort.Setup(p => p.Read()).Returns(msg); var controller = new IncotexNetworkController(); controller.Connection = comPort.Object; controller.Stop(); // Контроллер остановлен var device = new Mercury203() { Address = 1, }; controller.Devices.Add(device); Type type = null; // Act try { var result = device.ReadGroupAddress(); } catch (Exception ex) { type = ex.GetType(); } // Assert Assert.AreEqual(typeof(InvalidOperationException), type); // Assert //while(true) //{ // Ждём должно быть исключение //} }