vshed.Tasks

View project on GitHub

vshed.Tasks

Configurable task runner for exteranl calls

Example - Enumerating Task Items

Configuraiton File

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="Tasks" type="vshed.Tasks.Tasks, vshed.Tasks" requirePermission="false"/>
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
  </startup>
  <Tasks>
    <Task Type="Process" 
          Name="ipconfig Fail" 
          FileName="ipconfig" 
          Arguments="/all" 
          SuccessRegex="\s{3}Connection-specific DNS Suffix[\s,\.]*: \R\s{3}Description[\s,\.]*: PANTECH UML290 Mobile Broadband.*\R\s{3}(Physical Address)[\s,\.]*: (..-..-..-..-..-..)\R\s{3}DHCP Enabled[\s,\.]*: (:?No|Yes)\R\s{3}Autoconfiguration Enabled[\s,\.]*: Yes\R\s{3}Link-local IPv6 Address[\s,\.]*: .{1,4}::.{1,4}:.{1,4}:.{1,4}:.......\(Preferred\) \R\s{3}(IPv4 Address)[\s,\.]*: (\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\(Preferred\) \R\s{3}(Subnet Mask)[\s,\.]*: (\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\R\s{3}(Default Gateway)[\s,\.]*: (\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})" 
          />
    <Task Type="Process" 
          Name="ipconfig Success" 
          FileName="ipconfig" 
          Arguments="/all" 
          SuccessRegex="(IPv4 Address)[\s,\.]*: (\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})" 
          />
    <Task Type="Process" Name="Pause" FileName="timeout" Arguments="/t 60" />
    <Task Type="Process" Name="Pause2" FileName="ping " Arguments="localhost -n 60" />
    <Task Type="SerialCommand" 
          Name="Get Cellular Modem Number" 
          Command="AT+CNUM" 
          SuccessRegex="OK" PortName="COM 3"
          BaudRate="9600" 
          DataBits="8" 
          Parity="None" 
          StopBits="One" 
          Encoding="ISO-8859-1" 
          DtrEnable="true" 
          RtsEnable="true" 
          />
    <Task Type="SerialCommand" 
          Name="Get Cellular Modem IMEI" 
          Command="AT+CGSN" SuccessRegex="OK" 
          PortName="COM 3" 
          BaudRate="9600" 
          DataBits="8" Parity="None" 
          StopBits="One" 
          Encoding="ISO-8859-1" 
          DtrEnable="true" 
          RtsEnable="true" 
          />
    <Task Type="SerialCommand" 
          Name="Get Cellular Modem ICCID" 
          Command="AT+ICCID" SuccessRegex="OK" 
          PortName="COM 3" 
          BaudRate="9600" DataBits="8" 
          Parity="None" 
          StopBits="One" Encoding="ISO-8859-1" 
          DtrEnable="true" 
          RtsEnable="true" />
    <Processes>
      <Process Name="Pause3" FileName="ping " Arguments="localhost -n 60" />
      <Process Name="Pause2" FileName="ping " Arguments="localhost -n 60" />
    </Processes>
    <SerialCommands>
      <SerialCommand Name="Get Cellular Modem ICCID3" 
                     Command="AT+ICCID" SuccessRegex="OK" 
                     PortName="COM 3" 
                     BaudRate="9600" DataBits="8" 
                     Parity="None" StopBits="One" 
                     Encoding="ISO-8859-1" 
                     DtrEnable="true" 
                     RtsEnable="true" />
    </SerialCommands>
  </Tasks>
</configuration>

Code

vshed.Tasks.Tasks Settings = ConfigurationManager.GetSection("Tasks") as vshed.Tasks.Tasks;
Settings.Processes["Confirming Network is Up"].Start();
System.Diagnostics.Debug.WriteLine(String.Format("Processes: {0}", Settings.Processes.Count));
foreach (var p in Settings.Processes) 
  System.Diagnostics.Debug.WriteLine(String.Format("  {0}", p.ToString()));
System.Diagnostics.Debug.WriteLine(String.Format("SerialCommands: {0}", Settings.SerialCommands.Count));
foreach (var p in Settings.SerialCommands) 
  System.Diagnostics.Debug.WriteLine(String.Format("  {0}", p.ToString()));

Debug Output

Processes: 5
  Pause3
  Pause2
  ipconfig Fail
  ipconfig Success
  Pause
SerialCommands: 4
  Get Cellular Modem ICCID3
  Get Cellular Modem Number
  Get Cellular Modem IMEI
  Get Cellular Modem ICCID