protected override bool LookForBlock() { var opm = new Regex(@"(OP: *01\r?\n)+"); var rm = new Regex(@"[a-fA-F0-9]+\r?\n"); var ds = string.Join("", Data.ToArray()); if (opm.Match(ds).Success) { Data.Clear(); return(false); } var match = rm.Match(ds); if (match.Success) { var end = @"\r?\n"; var endM = new Regex(end); var endMatch = endM.Match(match.Value); var hexString = match.Value.Substring(0, endMatch.Index); Data.Clear(); LastBlockBytes = AxLEHelper.StringToByteArray(hexString); return(true); } return(false); }
protected override bool LookForBlock() { // Old "OP: 01\r\n", New: "OP: 01, 50, 8\r\n" var opm = new Regex(@"(OP: *01,? ?\d*,? ?\d*\r?\n)+"); var rm = new Regex(@"[a-fA-F0-9]+\r?\n"); var ds = string.Join("", Data.ToArray()); if (opm.Match(ds).Success) { Data.Clear(); return(false); } var match = rm.Match(ds); if (match.Success) { var end = @"\r?\n"; var endM = new Regex(end); var endMatch = endM.Match(match.Value); var endIndex = endMatch.Index; var nibbleCount = endIndex; if ((nibbleCount & 1) != 0) { Console.WriteLine($"WARNING: Packet contained odd number of nibbles, ignoring last: {nibbleCount}"); nibbleCount &= ~1; } var hexString = match.Value.Substring(0, nibbleCount); LastBlockBytes = AxLEHelper.StringToByteArray(hexString); Data.Clear(); // Consume line ending if (ds[endIndex] == '\r') { endIndex++; } if (ds[endIndex] == '\n') { endIndex++; } // Keep any residual characters for next packet if (endIndex < ds.Length) { Data.Add(ds.Substring(endIndex)); } return(true); } return(false); }
protected override bool LookForEnd() { // Check for end var regex = @"[a-fA-F0-9]*\r?\n"; var rm = new Regex(regex); var matches = rm.Matches(Data.Last()); if (matches.Count == 0) { return(false); } // Match entire block and process var ds = string.Join("", Data.ToArray()); regex = @"[a-fA-F0-9]+\r?\n"; rm = new Regex(regex); matches = rm.Matches(ds); if (matches.Count > 0) { var match = matches[0].Value; var end = @"\r?\n"; var endM = new Regex(end); var endMatch = endM.Matches(match)[0]; var hexString = match.Substring(0, endMatch.Index); BlockBytes = AxLEHelper.StringToByteArray(hexString); return(BlockBytes.Length == 512); } return(false); }