Merge pull request #129 from PepperDash/feature/add-multiple-delimiters-for-communicationGather

Feature/add multiple delimiters for communication gather
This commit is contained in:
Neil Dorin
2022-02-10 15:31:37 -07:00
committed by GitHub
3 changed files with 45 additions and 18 deletions

View File

@@ -48,7 +48,7 @@ namespace PepperDash.Core
/// </summary>
char Delimiter;
string StringDelimiter;
string[] StringDelimiters;
/// <summary>
/// Fires up a gather, given a IBasicCommunicaion port and char for de
@@ -68,9 +68,14 @@ namespace PepperDash.Core
/// <param name="port"></param>
/// <param name="delimiter"></param>
public CommunicationGather(ICommunicationReceiver port, string delimiter)
:this(port, new string[] { delimiter} )
{
}
public CommunicationGather(ICommunicationReceiver port, string[] delimiters)
{
Port = port;
StringDelimiter = delimiter;
StringDelimiters = delimiters;
port.TextReceived += Port_TextReceivedStringDelimiter;
}
@@ -137,17 +142,21 @@ namespace PepperDash.Core
// RX: \x0d\x0a+OK "value":"1234"\x0d\x0a
// Split: (2) DEVICE get version, +OK "value":"1234"
var lines = Regex.Split(str, StringDelimiter);
if (lines.Length > 1)
// Iterate the delimiters and fire an event for any matching delimiter
foreach (var delimiter in StringDelimiters)
{
var lines = Regex.Split(str, delimiter);
if (lines.Length == 1)
continue;
for (int i = 0; i < lines.Length - 1; i++)
{
string strToSend = null;
if (IncludeDelimiter)
strToSend = lines[i] + StringDelimiter;
strToSend = lines[i] + delimiter;
else
strToSend = lines[i];
handler(this, new GenericCommMethodReceiveTextArgs(strToSend));
handler(this, new GenericCommMethodReceiveTextArgs(strToSend, delimiter));
}
ReceiveBuffer = new StringBuilder(lines[lines.Length - 1]);
}

View File

@@ -130,4 +130,15 @@ namespace PepperDash.Core
Tx = 2,
Both = Rx | Tx
}
/// <summary>
/// The available settings for stream debugging response types
/// </summary>
[Flags]
public enum eStreamDebuggingDataTypeSettings
{
Bytes = 0,
Text = 1,
Both = Bytes | Text,
}
}

View File

@@ -110,11 +110,18 @@ namespace PepperDash.Core
public class GenericCommMethodReceiveTextArgs : EventArgs
{
public string Text { get; private set; }
public string Delimiter { get; private set; }
public GenericCommMethodReceiveTextArgs(string text)
{
Text = text;
}
public GenericCommMethodReceiveTextArgs(string text, string delimiter)
:this(text)
{
Delimiter = delimiter;
}
/// <summary>
/// Stupid S+ Constructor
/// </summary>