public bool OpcodePartialMatch() { var opcodeFile = NetworkController.Instance.LoadOpcodeCheck; NetworkController.Instance.LoadOpcodeCheck = null; var file = new System.IO.StreamReader(opcodeFile); string line; bool matched = true; while ((line = file.ReadLine()) != null) { line = line.Replace("=", ""); var match = Regex.Match(line, @"(?i)^\s*([a-z_0-9]+)\s+(\d+)\s*$"); Enum.TryParse(match.Groups[1].Value, out OpcodeEnum opcodeName); OpcodeId opcodeId = OpcodeId.Parse(match.Groups[2].Value); if (KnownOpcode.ContainsKey(opcodeId) && KnownOpcode[opcodeId] != opcodeName) { Console.WriteLine("Incorrect match type 1 for " + KnownOpcode[opcodeId] + " : " + opcodeId); matched = false; } else if (ReverseKnownOpcode.ContainsKey(opcodeName) && ReverseKnownOpcode[opcodeName] != opcodeId) { Console.WriteLine("Incorrect match type 2 for " + opcodeName + " : " + opcodeId); matched = false; } else if (!ReverseKnownOpcode.ContainsKey(opcodeName) && !KnownOpcode.ContainsKey(opcodeId)) { // Stay silent if the parser didn't found every opcode. // TODO: add option for strict match: aka -> this case generate error if (NetworkController.Instance.StrictCheck) { Console.WriteLine("Missing match for " + opcodeName + " : " + opcodeId); matched = false; } } else { Console.WriteLine("Correct match for " + KnownOpcode[opcodeId] + " : " + opcodeId); } } file.Close(); return(matched); }
public void OpcodeLoadKnown() { var opcodeFile = NetworkController.Instance.LoadOpcodeForViewing; NetworkController.Instance.LoadOpcodeForViewing = null; KnownOpcode.Clear(); ReverseKnownOpcode.Clear(); NetworkController.Instance.UiUpdateKnownOpcode.Clear(); var file = new System.IO.StreamReader(opcodeFile); string line; while ((line = file.ReadLine()) != null) { line = line.Replace("=", ""); var match = Regex.Match(line, @"(?i)^\s*([a-z_0-9]+)\s+(\d+)\s*$"); Enum.TryParse(match.Groups[1].Value, out OpcodeEnum opcodeName); OpcodeId opcodeId = OpcodeId.Parse(match.Groups[2].Value); SetOpcode(opcodeId, opcodeName); } file.Close(); _viewOnly = true; }