public void processCommand(string input) { string[] script = { }; bool isScriptActive = false; int scriptCommandCounter = 0; char[] whitespace = new char[] { ' ', '\t' }; List <string> command = input.Split(whitespace).ToList <string>(); do { switch (command[0]) { case "devadd": if (command.Count == 3) { string deviceName = command[1]; int devicePower = int.Parse(command[2]); mainEnv.addDevice(new Device(deviceName, devicePower)); printAll("After addition of " + deviceName); } else { printInvalidCommand(command.Count); } break; case "devconn": if (command.Count == 3) { string firstDeviceName = command[1]; string secondDeviceName = command[2]; Device firstDevice = mainEnv.getDeviceByName(firstDeviceName); Device secondDevice = mainEnv.getDeviceByName(secondDeviceName); if (firstDevice != null && secondDevice != null) { mainEnv.connectTwoDevices(firstDevice, secondDevice); printAll("After connection of " + firstDevice.Name); } else { consoleWriteLine("One of the devices is null, cannot connect."); } } else { printInvalidCommand(command.Count); } break; case "devdisc": if (command.Count == 3) { string firstDeviceName = command[1]; string secondDeviceName = command[2]; Device firstDevice = mainEnv.getDeviceByName(firstDeviceName); Device secondDevice = mainEnv.getDeviceByName(secondDeviceName); if (firstDevice != null && secondDevice != null) { mainEnv.disconnectTwoDevices(firstDevice, secondDevice); printAll("After disconnection of " + firstDevice.Name + " and " + secondDevice.Name); } else { consoleWriteLine("One of the devices is null, cannot connect."); } } else { printInvalidCommand(command.Count); } break; case "swadd": if (command.Count == 4) { string deviceName = command[1]; string firstDeviceName = command[2]; string secondDeviceName = command[3]; Device firstDevice = mainEnv.getDeviceByName(firstDeviceName); Device secondDevice = mainEnv.getDeviceByName(secondDeviceName); if (firstDevice != null && secondDevice != null) { mainEnv.addDevice(new Switch(deviceName, firstDevice, secondDevice)); printAll("After connection of switch " + deviceName + " from " + firstDevice.Name + " to " + secondDevice.Name); } else { consoleWriteLine("One of the devices is null, cannot connect."); } } else { printInvalidCommand(command.Count); } break; case "swtoggle": if (command.Count == 2) { string switchName = command[1]; Switch connSwitch = (Switch)mainEnv.getDeviceByName(switchName); if (connSwitch != null) { connSwitch.toggleSwitch(); mainEnv.update(); mainEnv.update(); printAll("After toggling of switch " + switchName + ", new state is " + connSwitch.IsSwitchClosed.ToString()); } else { consoleWriteLine("Switch is null, cannot toggle."); } } else { printInvalidCommand(command.Count); } break; case "swset": if (command.Count == 3) { string switchName = command[1]; string switchState = command[2]; Switch connSwitch = (Switch)mainEnv.getDeviceByName(switchName); if (switchState != "1" && switchState != "0") { consoleWriteLine("Bad parameter " + switchState.ToString() + ", try again ('0' or '1' only)."); break; } if (connSwitch != null) { connSwitch.IsSwitchClosed = (switchState == "1" ? true : false); mainEnv.update(); mainEnv.update(); printAll("After setting of switch " + switchName + ", new state is " + connSwitch.IsSwitchClosed.ToString()); } else { consoleWriteLine("Switch is null, cannot toggle."); } } else { printInvalidCommand(command.Count); } break; case "reladd": // reladd <relayName> <coilPower> <driveDeviceName> <FirstDeviceName> <SecondDeviceName> if (command.Count == 7) { string relayName = command[1]; int coilPower = int.Parse(command[2]); bool isNC = (int.Parse(command[3]) == 1 ? true : false); Device driverDevice = mainEnv.getDeviceByName(command[4]); Device firstDevice = mainEnv.getDeviceByName(command[5]); Device secondDevice = mainEnv.getDeviceByName(command[6]); Relay newRelay = new Relay(relayName, coilPower, isNC, driverDevice, firstDevice, secondDevice); if (driverDevice != null && (firstDevice != null && secondDevice != null)) { mainEnv.addRelay(newRelay); mainEnv.update(); printAll("After adding relay " + relayName + ", coil connected to " + driverDevice.Name + ", switch connecting " + firstDevice.Name + " to " + secondDevice.Name); } else { consoleWriteLine("Switch is null, cannot toggle."); } } else { printInvalidCommand(command.Count); } break; //update manually case "update": mainEnv.update(); printAll("MANUAL UPDATE"); break; //script file read case "fo": if (command.Count == 2) { if (!isScriptActive) { isScriptActive = true; string fileName = command[1]; string[] scriptFile = { }; try { scriptFile = File.ReadAllLines(fileName); } catch (FileNotFoundException) { consoleWriteLine("Invalid file."); } List <string> commandList = new List <string>(scriptFile); int commandCount = commandList.Count; while (scriptCommandCounter < commandCount) { processCommand(commandList[scriptCommandCounter]); scriptCommandCounter++; } isScriptActive = false; } else { consoleWriteLine("Already executing script, cannot recursively execute scripts."); } } else { printInvalidCommand(command.Count); } break; default: printInvalidCommand(command.Count); break; } }while (isScriptActive); }
public void addRelay(Relay newRelay) { relays.Add(newRelay); addDevice(newRelay.Coil); addDevice(newRelay.Switch); }