Purpose of Command Submission Client
This example illustrates a client that submits a command to a host system in response to an attribute change event.
Code
using System;
using Spo.SPDlib;
using System.Windows.Forms;
namespace ExamplesOfAPIUsage
{
class MyAlertPrgram
{
// create a SPD class instance
static SPD m_spd = new SPD();
// Additional class member attributes declaration...
[STAThread]
static void Main(string[] args)
{
// Initialize the API.
// Application name = "command submission example"
// No application qualifier.
m_spd.SPDInitClient("command submission example", null);
// Register a callback to handle attribute change events.
// No passback data is specified.
m_spd.SPDHandleEvent(SPD.SPD_eventType.SPD_attributeChangeEvent,
new SPD.SPD_eventCallback(attributeChangeEventCB), null);
// Client enters event processing
Application.Run();
} // function: Main
// Callback that handles attribute change events
static void attributeChangeEventCB(SPD.SPD_eventType type,
SPD.SPD_event this_event, object passback)
{
//////string traceMsg;
// Handle attribute change events
if (type == SPD.SPD_eventType.SPD_attributeChangeEvent)
{
// Determine if attribute change means a command should be sent.
// Following is an example to get access to attribute and attribute
// values for attribute change event report.
for (int naix = 0; naix < this_event.variableCount; naix++)
{
// Go thru the attribute list and determine if a command should
// be send. To get access to attribute and attribute values, do:
// this_event.variableData[naix].attribute == <attr>
// this_event.variableData[naix].attr_value == <value>
}
// Send a command to the host that reported the attribute change.
// Register callback for command ack.
m_spd.SPDCommand("host", "who, "who", null, new
SPD.SPD_commandCallback(commandEventCB), null, null, null, null);
} // attribute change event
else
{
// Process other event types (or error if none registered)
} // not attribute change event
} // function: alarmEventCB
// callback that handles command acknowledgement
static void commandEventCB(string host_class, string host, string command,
object reserveValue, SPD.SPD_commandStatusType status, object passback)
{
switch (status)
{
case SPD.SPD_commandStatusType.SPD_commandSuccess:
// command was submitted
break;
case SPD.SPD_commandStatusType.SPD_unknownHost:
case SPD.SPD_commandStatusType.SPD_unreachableHost:
// something went wrong - command did not make it
break;
} // end of switch
} // function: commandEventCB
}// class: MyProgram
}// namespace: ClientSampleProgramData Flow Diagram
This illustration shows the flow of information for the command submission client.