using System.Collections.ObjectModel; using System.Globalization; using System.Net; using System.Text; using System.Xml; using System.Xml.Serialization; using IFX.Shared.PasteSpecialXml.EAF.XML.API.Envelope; using Microsoft.Extensions.Logging; namespace File_Folder_Helper.ADO2025.PI6; internal static partial class Helper20250602 { private record Record(string Text, string Host, int Port, string[] Segments, bool StateContainsDisabled); private record Status(string CellInstanceName, string CommunicationState, string CurrentActiveVersion, string CurrentHost, string ErrorDescription, string Host, string IsReadyForRestart, string NPort, int Port, string StartTime, string Startable, string State, string StopTime, string Text); internal static void EquipmentAutomationFrameworkCellInstanceStateImageVerbIf(ILogger logger, List args) { string path; Status status; Record? record; string verbBy = args[2]; logger.LogInformation(args[0]); logger.LogInformation(args[1]); logger.LogInformation(args[2]); logger.LogInformation(args[3]); string[] cellInstanceNames = args[3].Split('~'); Dictionary records = GetEquipmentAutomationFrameworkCellInstanceStatus(development: false, staging: false, production: true); foreach (string cellInstanceName in cellInstanceNames) { if (!records.TryGetValue(cellInstanceName, out record)) { logger.LogWarning("{cellInstance} not found!", cellInstanceName); continue; } if (records[cellInstanceName].StateContainsDisabled) { logger.LogWarning("{cellInstance} not found!", cellInstanceName); } status = GetEquipmentAutomationFrameworkCellInstanceStateImageVerbIf(logger, verbBy, cellInstanceName, record); path = $"/images/{cellInstanceName}_{status.State}.jpg"; logger.LogInformation("{host}) {cellInstanceName} => {state} <{path}>", record.Host, cellInstanceName, status.State, path); } } private static Status GetEquipmentAutomationFrameworkCellInstanceStateImageVerbIf(ILogger logger, string verbBy, string cellInstanceName, Record record) { Status result; Dictionary equipmentAutomationFrameworkTriggers = []; if (!equipmentAutomationFrameworkTriggers.ContainsKey(cellInstanceName)) { equipmentAutomationFrameworkTriggers.Add(cellInstanceName, DateTime.MinValue); } result = EquipmentAutomationFrameworkCellInstanceStatus(cellInstanceName, record); if (equipmentAutomationFrameworkTriggers[cellInstanceName] < DateTime.Now.AddSeconds(-60)) { if (result.State == "Offline") { EquipmentAutomationFrameworkCellInstanceStart(record.Host, record.Port, cellInstanceName, verbBy); logger.LogInformation("Start invoked for {cellName}", cellInstanceName); } else if (result.State == "Warning") { EquipmentAutomationFrameworkCellInstanceRestart(record.Host, record.Port, cellInstanceName, verbBy); logger.LogInformation("Restart invoked for {cellName}", cellInstanceName); } } return result; } private static Dictionary GetEquipmentAutomationFrameworkCellInstanceStatus(bool development, bool staging, bool production) { Dictionary results = []; string key; string host; string text; string state; string response; bool stop = false; string[] segments; string[] cellNames; byte[] responseBytes; string responseAfter; #pragma warning disable SYSLIB0014 WebClient webClient = new(); #pragma warning restore SYSLIB0014 string disabled = "Disabled"; UnicodeCategory unicodeCategory; StringBuilder stringBuilder = new(); EquipmentAutomationFrameworkCellInstanceParseCheck(); Dictionary unicodeReplaces = GetUnicodeReplaces(); List unicodeCategories = GetUnicodeCategory(); ReadOnlyCollection urls = GetUrls(development, staging, production); // Dictionary> unicodeCategoriesList = new Dictionary>(); byte[] bodyBytes = [86, 2, 11, 1, 115, 4, 11, 1, 97, 6, 86, 8, 68, 10, 30, 0, 130, 153, 48, 104, 116, 116, 112, 58, 47, 47, 116, 101, 109, 112, 117, 114, 105, 46, 111, 114, 103, 47, 73, 83, 116, 97, 116, 117, 115, 81, 117, 101, 114, 121, 47, 71, 101, 116, 70, 97, 99, 116, 111, 114, 121, 83, 116, 97, 116, 117, 115, 68, 26, 173, 181, 241, 2, 149, 65, 209, 208, 66, 143, 234, 233, 157, 246, 118, 78, 238, 68, 44, 68, 42, 171, 20, 1, 68, 12, 30, 0, 130, 153, 49, 104, 116, 116, 112, 58, 47, 47, 101, 97, 102, 45, 112, 114, 111, 100, 46, 109, 101, 115, 46, 105, 110, 102, 105, 110, 101, 111, 110, 46, 99, 111, 109, 58, 57, 48, 48, 51, 47, 83, 116, 97, 116, 117, 115, 81, 117, 101, 114, 121, 1, 86, 14, 64, 16, 71, 101, 116, 70, 97, 99, 116, 111, 114, 121, 83, 116, 97, 116, 117, 115, 8, 19, 104, 116, 116, 112, 58, 47, 47, 116, 101, 109, 112, 117, 114, 105, 46, 111, 114, 103, 47, 64, 16, 105, 110, 99, 108, 117, 100, 101, 65, 103, 101, 110, 116, 76, 105, 115, 116, 135, 64, 17, 105, 110, 99, 108, 117, 100, 101, 83, 116, 97, 116, 117, 115, 76, 105, 115, 116, 135, 64, 23, 101, 120, 116, 101, 110, 100, 101, 100, 83, 116, 97, 116, 117, 115, 67, 101, 108, 108, 78, 97, 109, 101, 115, 9, 1, 98, 57, 104, 116, 116, 112, 58, 47, 47, 115, 99, 104, 101, 109, 97, 115, 46, 109, 105, 99, 114, 111, 115, 111, 102, 116, 46, 99, 111, 109, 47, 50, 48, 48, 51, 47, 49, 48, 47, 83, 101, 114, 105, 97, 108, 105, 122, 97, 116, 105, 111, 110, 47, 65, 114, 114, 97, 121, 115, 9, 1, 105, 41, 104, 116, 116, 112, 58, 47, 47, 119, 119, 119, 46, 119, 51, 46, 111, 114, 103, 47, 50, 48, 48, 49, 47, 88, 77, 76, 83, 99, 104, 101, 109, 97, 45, 105, 110, 115, 116, 97, 110, 99, 101, 95, 6, 115, 116, 114, 105, 110, 103, 153, 20, 66, 73, 79, 82, 65, 68, 53, 95, 70, 105, 108, 101, 65, 114, 99, 104, 105, 118, 101, 114, 1, 1, 1, 1]; foreach (string url in urls) { if (stop) { break; } segments = url.Split(':'); host = segments[0]; if (segments.Length == 0 || !int.TryParse(segments[1], out int port)) { port = 80; } webClient.Headers.Clear(); webClient.Headers.Add("Accept-Encoding: gzip, deflate"); webClient.Headers.Add("Content-Type: application/soap+msbin1"); responseBytes = webClient.UploadData($"http://{host}:{port}/StatusQuery", bodyBytes); // File.WriteAllText(@"L:\Tmp\a.txt", BitConverter.ToString(responseBytes)); response = Encoding.UTF8.GetString(responseBytes); foreach (char c in response) { unicodeCategory = CharUnicodeInfo.GetUnicodeCategory(c); if (unicodeCategory == UnicodeCategory.Control && unicodeReplaces.ContainsKey(c)) { _ = stringBuilder.Append(unicodeReplaces[c]); } else if (unicodeCategories.Contains(unicodeCategory)) { _ = stringBuilder.Append(c); } } responseAfter = stringBuilder.ToString(); cellNames = responseAfter.Split(new string[] { "CellName" }, StringSplitOptions.None); foreach (string segment in cellNames) { if (stop) { break; } key = string.Empty; state = string.Empty; segments = segment.Split(new string[] { "WindowsName" }, StringSplitOptions.None); if (segments.Length != 2) { continue; } text = segments[0]; segments = text.Replace('\r', ' ').Replace('\n', ' ').Split(' '); for (int i = 0; i < segments.Length - 3; i++) { if (stop) { break; } if (!string.IsNullOrEmpty(segments[i]) && string.IsNullOrEmpty(key)) { key = segments[i].Trim(); } else if (segments[i].StartsWith("State")) { state = segments[i + 1]; break; } } if (key.EndsWith("a")) { key = key[..^1]; } if (!results.ContainsKey(key)) { results.Add(key, new Record(Text: text, Host: host, Port: port, Segments: segments, StateContainsDisabled: state.Contains(disabled))); } else if (results[key].StateContainsDisabled) { results[key] = new Record(Text: text, Host: host, Port: port, Segments: segments, StateContainsDisabled: state.Contains(disabled)); } } } return results; } private static ReadOnlyCollection GetUrls(bool development, bool staging, bool production) { List results = []; if (development) { results.Add("eaf-dev.mes.infineon.com:9003"); } if (staging) { results.Add("eaf-staging.mes.infineon.com:9003"); } if (production) { results.Add("eaf-prod.mes.infineon.com:9003"); } return results.AsReadOnly(); } private static List GetUnicodeCategory() { List unicodeCategories = [ // UnicodeCategory.Control, // 33 - � UnicodeCategory.UppercaseLetter, // 25 - ABCDEFGHIJKLMNOPQRSTUVWXY UnicodeCategory.LowercaseLetter, // 25 - abcdefghiklmnopqrstuvwxyz UnicodeCategory.DecimalDigitNumber, // 10 - 0123456789 UnicodeCategory.OtherPunctuation, // 10 - !"#%&,./:@ UnicodeCategory.ClosePunctuation, // 2 - )] UnicodeCategory.MathSymbol, // 2 - |؈ UnicodeCategory.OpenPunctuation, // 2 - ([ // UnicodeCategory.OtherSymbol, // 1 - � UnicodeCategory.DashPunctuation, // 1 - - UnicodeCategory.ConnectorPunctuation, // 1 - _ UnicodeCategory.ModifierSymbol, // 1 - ` UnicodeCategory.NonSpacingMark, // 1 - ̵ UnicodeCategory.SpaceSeparator, // 1 - UnicodeCategory.CurrencySymbol, // 1 - $ ]; return unicodeCategories; } private static void EquipmentAutomationFrameworkCellInstanceParseCheck() { Envelope? envelope; string xmlStart621 = "http://schemas.xmlsoap.org/ws/2005/02/rm/CreateSequenceResponseurn:uuid:6eb7a538-0b2b-4d04-8f2a-ab50e1e5338aurn:uuid:31c290af-2312-4b00-a57c-d5e1ab51e02ahttp://eaf-prod.mes.infineon.com:9003/CellControllerManager"; string xmlStart891 = "urn:uuid:f169e50f-5ca8-43cd-a1e9-724840ff5e001urn:uuid:31c290af-2312-4b00-a57c-d5e1ab51e02a8http://tempuri.org/ICellControllerManager/StartAllCellInstancesResponseurn:uuid:38977fa4-262a-42fb-8df7-d8d3074820b2"; string xmlStart748 = "urn:uuid:f169e50f-5ca8-43cd-a1e9-724840ff5e002urn:uuid:31c290af-2312-4b00-a57c-d5e1ab51e02a8http://schemas.xmlsoap.org/ws/2005/02/rm/LastMessage"; string xmlStart707 = "urn:uuid:31c290af-2312-4b00-a57c-d5e1ab51e02a8http://schemas.xmlsoap.org/ws/2005/02/rm/TerminateSequenceurn:uuid:f169e50f-5ca8-43cd-a1e9-724840ff5e00"; string xmlStop621 = "http://schemas.xmlsoap.org/ws/2005/02/rm/CreateSequenceResponseurn:uuid:97f7aeb4-015f-440b-b0ff-a2a5aa4f4ab9urn:uuid:e34d16ad-21d5-4a11-a6dc-5b5b58a74f96http://eaf-prod.mes.infineon.com:9003/CellControllerManager"; string xmlStop889 = "urn:uuid:c9a4d5b6-435b-49a4-a2f9-d93cd8aecc361urn:uuid:e34d16ad-21d5-4a11-a6dc-5b5b58a74f968http://tempuri.org/ICellControllerManager/StopAllCellInstancesResponseurn:uuid:04b8b0ea-8576-4756-b456-8a817cd10826"; string xmlStop748 = "urn:uuid:c9a4d5b6-435b-49a4-a2f9-d93cd8aecc362urn:uuid:e34d16ad-21d5-4a11-a6dc-5b5b58a74f968http://schemas.xmlsoap.org/ws/2005/02/rm/LastMessage"; string xmlStop707 = "urn:uuid:e34d16ad-21d5-4a11-a6dc-5b5b58a74f968http://schemas.xmlsoap.org/ws/2005/02/rm/TerminateSequenceurn:uuid:c9a4d5b6-435b-49a4-a2f9-d93cd8aecc36"; string xmlRestart621 = "http://schemas.xmlsoap.org/ws/2005/02/rm/CreateSequenceResponseurn:uuid:e228a621-e7ab-4ebf-97ba-5571cb5f4ad7urn:uuid:a1650ed7-34dc-4fac-993f-ed2559c453a2http://eaf-prod.mes.infineon.com:9003/CellControllerManager"; string xmlRestart895 = "urn:uuid:50c82506-bd4d-4117-b632-640cf84d556e1urn:uuid:a1650ed7-34dc-4fac-993f-ed2559c453a28http://tempuri.org/ICellControllerManager/RestartAllCellInstancesResponseurn:uuid:efaeaf12-4aa0-4cd1-8296-05019e47261a"; string xmlRestart748 = "urn:uuid:50c82506-bd4d-4117-b632-640cf84d556e2urn:uuid:a1650ed7-34dc-4fac-993f-ed2559c453a28http://schemas.xmlsoap.org/ws/2005/02/rm/LastMessage"; string xmlRestart707 = "urn:uuid:a1650ed7-34dc-4fac-993f-ed2559c453a28http://schemas.xmlsoap.org/ws/2005/02/rm/TerminateSequenceurn:uuid:50c82506-bd4d-4117-b632-640cf84d556e"; string[] xmlSets = [xmlStart621, xmlStart891, xmlStart748, xmlStart707, xmlStop621, xmlStop889, xmlStop748, xmlStop707, xmlRestart621, xmlRestart895, xmlRestart748, xmlRestart707]; foreach (string xmlSet in xmlSets) { envelope = ParseXML(xmlSet, throwExceptions: true); } } private static T? ParseXML(string value, bool throwExceptions) where T : class { object? result = null; try { Stream stream = ToStream(value.Trim()); XmlReader xmlReader = XmlReader.Create(stream, new XmlReaderSettings() { ConformanceLevel = ConformanceLevel.Document }); #pragma warning disable IL2026, IL2090 XmlSerializer xmlSerializer = new(typeof(T), typeof(T).GetNestedTypes()); result = xmlSerializer.Deserialize(xmlReader); #pragma warning restore IL2026, IL2090 stream.Dispose(); } catch (Exception) { if (throwExceptions) { throw; } } return result as T; } private static Stream ToStream(string value) { MemoryStream memoryStream = new(); StreamWriter streamWriter = new(memoryStream); streamWriter.Write(value); streamWriter.Flush(); memoryStream.Position = 0; return memoryStream; } private static Dictionary GetUnicodeReplaces() { Dictionary results = new() { { '\u0000', ' ' }, { '\u0001', ' ' }, { '\u0002', ' ' }, { '\u0003', ' ' }, { '\u0004', ' ' }, { '\u0005', ' ' }, { '\u0006', ' ' }, { '\u0007', ' ' }, { '\u0008', ' ' }, { '\u0009', '\t' }, { '\u000A', '\r' }, { '\u000B', '\r' }, { '\u000C', '\t' }, { '\u000D', '\r' }, { '\u000E', ' ' }, { '\u000F', ' ' }, { '\u0010', ' ' }, { '\u0011', ' ' }, { '\u0012', ' ' }, { '\u0013', ' ' }, { '\u0014', ' ' }, { '\u0015', ' ' }, { '\u0016', ' ' }, { '\u0017', ' ' }, { '\u0018', ' ' }, { '\u0019', ' ' }, { '\u001A', ' ' }, { '\u001B', ' ' }, { '\u001C', '\r' }, { '\u001D', '\t' }, { '\u001E', '\t' }, { '\u001F', '\t' }, { '\u007F', ' ' }, // C1 { '\u0080', '\t' }, { '\u0081', ' ' }, { '\u0082', ' ' }, { '\u0083', ' ' }, { '\u0084', ' ' }, { '\u0085', '\r' }, { '\u0086', ' ' }, { '\u0087', ' ' }, { '\u0088', '\t' }, { '\u0089', '\t' }, { '\u008A', '\t' }, { '\u008B', '\r' }, { '\u008C', ' ' }, { '\u008D', ' ' }, { '\u008E', ' ' }, { '\u008F', ' ' }, { '\u0090', ' ' }, { '\u0091', ' ' }, { '\u0092', ' ' }, { '\u0093', ' ' }, { '\u0094', ' ' }, { '\u0095', ' ' }, { '\u0096', ' ' }, { '\u0097', ' ' }, { '\u0098', ' ' }, { '\u0099', ' ' }, { '\u009A', ' ' }, { '\u009B', ' ' }, { '\u009C', ' ' }, { '\u009D', ' ' }, { '\u009E', ' ' }, { '\u009F', ' ' } }; return results; } private static Status EquipmentAutomationFrameworkCellInstanceStatus(string cellInstanceName, Record record) { Status result; bool stop = false; string state = string.Empty; string stopTime = string.Empty; string startTime = string.Empty; string startable = string.Empty; string currentHost = string.Empty; string errorDescription = string.Empty; string isReadyForRestart = string.Empty; string communicationState = string.Empty; string currentActiveVersion = string.Empty; for (int i = 0; i < record.Segments.Length - 3; i++) { if (stop) { break; } if (string.IsNullOrEmpty(state) && record.Segments[i].StartsWith("State")) { state = record.Segments[i + 1]; } else if (string.IsNullOrEmpty(startable) && record.Segments[i].Contains("Startable")) { startable = record.Segments[i + 1]; } else if (string.IsNullOrEmpty(stopTime) && record.Segments[i].StartsWith("StopTime")) { stopTime = record.Segments[i + 1]; } else if (string.IsNullOrEmpty(currentHost) && record.Segments[i].Contains("CurrentHost")) { currentHost = $"{record.Segments[i]} {record.Segments[i + 1]} {record.Segments[i + 2]}"; } else if (string.IsNullOrEmpty(errorDescription) && record.Segments[i].StartsWith("ErrorDescription")) { errorDescription = record.Segments[i + 1]; } else if (string.IsNullOrEmpty(communicationState) && record.Segments[i].StartsWith("CommunicationState")) { communicationState = record.Segments[i + 1]; } else if (string.IsNullOrEmpty(isReadyForRestart) && record.Segments[i].StartsWith("IsReadyForRestart")) { isReadyForRestart = record.Segments[i + 1]; } else if (string.IsNullOrEmpty(currentActiveVersion) && record.Segments[i].Contains("CurrentActiveVersion")) { currentActiveVersion = record.Segments[i + 1]; } else if (string.IsNullOrEmpty(startTime) && record.Segments[i].Contains("StartTime")) { startTime = $"{record.Segments[i + 1]} {record.Segments[i + 2]} {record.Segments[i + 3]}".Split('\t')[0]; } } if (errorDescription != "a") { string[] segments = record.Text.Split(new string[] { "ErrorDescription" }, StringSplitOptions.RemoveEmptyEntries); if (segments.Length > 1) { segments = segments[1].Split(new string[] { "Info" }, StringSplitOptions.RemoveEmptyEntries); errorDescription = segments[0].Trim(); } } string nPort; Dictionary nPorts = GetnPorts(); if (!nPorts.ContainsKey(cellInstanceName)) { nPort = string.Empty; } else { nPort = nPorts[cellInstanceName]; } if (state.EndsWith("a")) { state = state[0..^1]; } if (state == "Running" && communicationState == "Not") { state = "Warning"; } result = new(Host: record.Host, Port: record.Port, Text: record.Text, NPort: nPort, State: state, CellInstanceName: cellInstanceName, StopTime: stopTime, StartTime: startTime, Startable: startable, CurrentHost: currentHost, ErrorDescription: errorDescription, IsReadyForRestart: isReadyForRestart, CommunicationState: communicationState, CurrentActiveVersion: currentActiveVersion); return result; } private static Dictionary GetnPorts() { Dictionary results = new() { { "TENCOR1", "10.95.192.31" }, { "TENCOR2", "10.95.192.32" }, { "TENCOR3", "10.95.192.33" }, { "HGCV1", "10.95.192.34" }, { "HGCV2", "10.95.154.17" }, { "HGCV3", "10.95.192.36" }, { "BIORAD2", "10.95.192.37" }, { "BIORAD3", "10.95.192.38" }, { "CDE2", "10.95.192.39" }, { "CDE3", "10.95.154.19" }, { "CDE5", "10.95.192.40" }, { "SPARE-1", "10.95.192.47" }, { "SPARE-2", "10.95.192.48" }, { "SPARE-3", "10.95.192.49" }, { "SPARE-4", "10.95.192.50" }, { "SPARE-5", "10.95.192.51" }, }; return results; } private static void EquipmentAutomationFrameworkCellInstanceRestart(string host, int port, string cellName = "R71-HSMS", string verbBy = @"EC\EcMesEaf") { EquipmentAutomationFrameworkCellInstanceParseCheck(); // Restart // http://schemas.xmlsoap.org/ws/2005/02/rm/CreateSequenceurn:uuid:09fd9303-dcfe-4563-803b-678441b12949http://eaf-prod.mes.infineon.com:9003/CellControllerManagerhttp://www.w3.org/2005/08/addressing/anonymousurn:uuid:4f2050da-4287-411b-992f-3126a5b3b35b // urn:uuid:fbf34c20-f381-4e82-b81f-b4c1809f14fa1http://tempuri.org/ICellControllerManager/RestartAllCellInstancesurn:uuid:c9f80db4-a2c2-4e53-9bed-8ba3a60b653chttp://www.w3.org/2005/08/addressing/anonymoushttp://eaf-prod.mes.infineon.com:9003/CellControllerManagerSP101_FileArchiverRestarted by EC\ecphares // urn:uuid:4f2050da-4287-411b-992f-3126a5b3b35burn:uuid:fbf34c20-f381-4e82-b81f-b4c1809f14fa2http://schemas.xmlsoap.org/ws/2005/02/rm/LastMessagehttp://eaf-prod.mes.infineon.com:9003/CellControllerManager // urn:uuid:4f2050da-4287-411b-992f-3126a5b3b35bhttp://schemas.xmlsoap.org/ws/2005/02/rm/TerminateSequenceurn:uuid:3b063df5-e6df-47a5-b530-aa380a4c6a38http://eaf-prod.mes.infineon.com:9003/CellControllerManagerurn:uuid:fbf34c20-f381-4e82-b81f-b4c1809f14fa EquipmentAutomationFrameworkCellInstanceVerb(host, port, cellName, verbBy, restart: true, stop: false, start: false); } private static void EquipmentAutomationFrameworkCellInstanceStart(string host, int port, string cellName = "R71-HSMS", string verbBy = @"EC\EcMesEaf") { EquipmentAutomationFrameworkCellInstanceParseCheck(); // Start // http://schemas.xmlsoap.org/ws/2005/02/rm/CreateSequenceurn:uuid:a1188d61-df04-4955-b1e4-b90faff95d4dhttp://eaf-prod.mes.infineon.com:9003/CellControllerManagerhttp://www.w3.org/2005/08/addressing/anonymousurn:uuid:35310d6d-3d17-419c-9b4f-cf20b705e5c9 // urn:uuid:739e01d3-5573-48a4-8bbb-53e2dfc344af1http://tempuri.org/ICellControllerManager/StartAllCellInstancesurn:uuid:8758eec2-b4dc-4338-ba3d-235aa15e634chttp://www.w3.org/2005/08/addressing/anonymoushttp://eaf-prod.mes.infineon.com:9003/CellControllerManagerSP101_FileArchiverStarted by EC\ecphares // urn:uuid:739e01d3-5573-48a4-8bbb-53e2dfc344af1http://tempuri.org/ICellControllerManager/StartAllCellInstancesurn:uuid:8758eec2-b4dc-4338-ba3d-235aa15e634chttp://www.w3.org/2005/08/addressing/anonymoushttp://eaf-prod.mes.infineon.com:9003/CellControllerManagerSP101_FileArchiverStarted by EC\ecphares // urn:uuid:35310d6d-3d17-419c-9b4f-cf20b705e5c9urn:uuid:739e01d3-5573-48a4-8bbb-53e2dfc344af2http://schemas.xmlsoap.org/ws/2005/02/rm/LastMessagehttp://eaf-prod.mes.infineon.com:9003/CellControllerManager // urn:uuid:35310d6d-3d17-419c-9b4f-cf20b705e5c9http://schemas.xmlsoap.org/ws/2005/02/rm/TerminateSequenceurn:uuid:b2bb5329-c846-4cd1-98a8-343136923702http://eaf-prod.mes.infineon.com:9003/CellControllerManagerurn:uuid:739e01d3-5573-48a4-8bbb-53e2dfc344af EquipmentAutomationFrameworkCellInstanceVerb(host, port, cellName, verbBy, restart: false, stop: false, start: true); } private static void EquipmentAutomationFrameworkCellInstanceVerb(string host, int port, string cellName, string verbBy, bool restart, bool stop, bool start) { #pragma warning disable SYSLIB0014 WebClient webClient = new(); #pragma warning restore SYSLIB0014 string xml; string verb; Envelope? envelope; string updateInfoVerb; StringBuilder stringBuilder = new(); string cellControllerManager = $"http://{host}:{port}/CellControllerManager"; if (!restart && !stop && !start) { throw new Exception(); } else if (restart && stop && start) { throw new Exception(); } else if (restart) { updateInfoVerb = "Restarted"; verb = "RestartAllCellInstances"; } else if (stop) { updateInfoVerb = "Stopped"; verb = "StopAllCellInstancesResponse"; } else if (start) { updateInfoVerb = "Started"; verb = "StartAllCellInstances"; } else throw new Exception(); string headerMessageID621 = Guid.NewGuid().ToString(); string bodyIdentifier621 = Guid.NewGuid().ToString(); _ = stringBuilder.Append(""). Append("http://schemas.xmlsoap.org/ws/2005/02/rm/CreateSequence"). Append("urn:uuid:").Append(headerMessageID621).Append(""). Append("").Append(cellControllerManager).Append(""). Append(""). Append("http://www.w3.org/2005/08/addressing/anonymous"). Append("urn:uuid:").Append(bodyIdentifier621).Append(""). Append(""); xml = stringBuilder.ToString(); _ = stringBuilder.Clear(); webClient.Headers.Clear(); webClient.Headers.Add("Accept-Encoding: gzip, deflate"); webClient.Headers.Add("Content-Type: application/soap+xml; charset=utf-8"); xml = webClient.UploadString(cellControllerManager, xml); envelope = ParseXML(xml, throwExceptions: true); if (envelope is null || envelope.Body is null || envelope.Body.CreateSequenceResponse is null || string.IsNullOrEmpty(envelope.Body.CreateSequenceResponse.Identifier)) { throw new Exception("Invalid reply! Example [urn:uuid:f1aa1fa8-9099-48b6-b27f-50e6c098605b]"); } string headerSequenceIdentifier895 = envelope.Body.CreateSequenceResponse.Identifier["urn:uuid:".Length..]; string headerMessageID895 = Guid.NewGuid().ToString(); _ = stringBuilder.Append(""). Append(""). Append("urn:uuid:").Append(headerSequenceIdentifier895).Append(""). Append("1"). Append("http://tempuri.org/ICellControllerManager/").Append(verb).Append(""). Append("urn:uuid:").Append(headerMessageID895).Append(""). Append("http://www.w3.org/2005/08/addressing/anonymous"). Append("").Append(cellControllerManager).Append(""). Append(""). Append('<').Append(verb).Append(" xmlns=\"http://tempuri.org/\">"). Append(""). Append("").Append(cellName).Append(""). Append(""). Append("").Append(updateInfoVerb).Append(" by ").Append(verbBy).Append(""). Append("'). Append(""); xml = stringBuilder.ToString(); _ = stringBuilder.Clear(); webClient.Headers.Clear(); webClient.Headers.Add("Accept-Encoding: gzip, deflate"); webClient.Headers.Add("Content-Type: application/soap+xml; charset=utf-8"); xml = webClient.UploadString(cellControllerManager, xml); _ = ParseXML(xml, throwExceptions: true); string headerSequenceAcknowledgementIdentifier748 = bodyIdentifier621; string headerSequenceIdentifier748 = headerSequenceIdentifier895; _ = stringBuilder.Append(""). Append(""). Append("urn:uuid:").Append(headerSequenceAcknowledgementIdentifier748).Append(""). Append(""). Append("urn:uuid:").Append(headerSequenceIdentifier748).Append(""). Append("2"). Append("http://schemas.xmlsoap.org/ws/2005/02/rm/LastMessage"). Append("").Append(cellControllerManager).Append(""). Append(""); xml = stringBuilder.ToString(); _ = stringBuilder.Clear(); webClient.Headers.Clear(); webClient.Headers.Add("Accept-Encoding: gzip, deflate"); webClient.Headers.Add("Content-Type: application/soap+xml; charset=utf-8"); xml = webClient.UploadString(cellControllerManager, xml); _ = ParseXML(xml, throwExceptions: true); string headerSequenceAcknowledgementIdentifier707 = bodyIdentifier621; string headerMessageID707 = Guid.NewGuid().ToString(); string bodyTerminateSequenceIdentifier707 = headerSequenceIdentifier895; _ = stringBuilder.Append(""). Append(""). Append("urn:uuid:").Append(headerSequenceAcknowledgementIdentifier707).Append(""). Append(""). Append("http://schemas.xmlsoap.org/ws/2005/02/rm/TerminateSequence"). Append("urn:uuid:").Append(headerMessageID707).Append(""). Append("").Append(cellControllerManager).Append(""). Append(""). Append(""). Append("urn:uuid:").Append(bodyTerminateSequenceIdentifier707).Append(""). Append(""). Append(""); xml = stringBuilder.ToString(); _ = stringBuilder.Clear(); webClient.Headers.Clear(); webClient.Headers.Add("Accept-Encoding: gzip, deflate"); webClient.Headers.Add("Content-Type: application/soap+xml; charset=utf-8"); xml = webClient.UploadString(cellControllerManager, xml); _ = ParseXML(xml, throwExceptions: true); } }