public static IRPacket LoadSignal(string fileName, string deviceName, string signalName, out string message) { /* * xml-файл может быть одной из четырех вещей: * * 1. IRPacket (скорее всего, поскольку предыдущие версии только понимали этот формат) * * 2. AVDeviceDB (требуется устройство и параметры сигнала) * * 3. AVDevice (требуется опция сигнала) * * 4. Некоторые другие XML-формат */ var result = GenericXmlSerializer <IRPacket> .FromFile(fileName); if (result.Successful) { message = string.Empty; return(result.Object); } else { var haveDeviceName = !string.IsNullOrEmpty(deviceName); var haveSignalName = !string.IsNullOrEmpty(signalName); if (result.EncounteredType == "AVDeviceDB") { if (haveDeviceName && haveSignalName) { var db = GenericXmlSerializer <AVDeviceDB> .FromFile(fileName).Object; var device = db.AVDevices.FirstOrDefault(d => string.Equals(d.Name, deviceName, StringComparison.InvariantCultureIgnoreCase)); if (device != null) { var signal = device.GetSignal(signalName); message = signal == null ? "Couldn't find signal " + signalName : string.Empty; return(signal); } else { message = "Couldn't find device " + deviceName; } } else { message = "Вложенный XML-файл содержит набор устройств и сигналов. Вы должны указать параметры -device и -signal для идентификации используемого сигнала"; } } else if (result.EncounteredType == "AVDevice") { if (haveSignalName) { var device = GenericXmlSerializer <AVDevice> .FromFile(fileName).Object; var signal = device.GetSignal(signalName); message = signal == null ? "Couldn't find signal " + signalName : string.Empty; return(signal); } else { message = "Вложенный файл xml содержит набор сигналов. Вы должны указать параметр -signal для определения используемого сигнала"; } } else { message = string.Format("Не удалось загрузить " + fileName + ". Файлы xml должны содержать AVDeviceDB, AVDevice или IRPacket. Найдено " + result.EncounteredType); } } return(null); }