Files
cdev-1.7.2n/extensions/cdevGenericServer/tests/MonitorTest/MonitorTestServer.cc
2022-12-13 12:44:04 +01:00

175 lines
4.4 KiB
C++

#include <MonitorTestServer.h>
#include <MonitorTestAttrib.h>
// *****************************************************************************
// * This has to be added in order to support the CenterLine Compiler.
// *****************************************************************************
#if defined (__CENTERLINE__)
long va_alist;
#endif
MonitorTestServer::~MonitorTestServer ( void )
{
StringHashIterator iter(&attribHash);
MonitorTestAttrib * attrib = NULL;
char * key = NULL;
iter.first();
while((key=iter.key())!=NULL)
{
attrib = (MonitorTestAttrib *)iter.data();
iter++;
attribHash.remove(key);
if(attrib!=NULL) delete attrib;
}
}
void MonitorTestServer::populateTable ( void )
{
char device[10];
char attrib[10];
char key[20];
for(int i=0; i<10; i++)
{
for(int j=0; j<10; j++)
{
sprintf(device, "device%i", i);
sprintf(attrib, "attrib%i", j);
sprintf(key, "device%i attrib%i", i, j);
attribHash.insert(key, new MonitorTestAttrib(device, attrib));
}
}
}
void MonitorTestServer::processMessages ( void )
{
char key[255];
int saveMessageFlag;
int sendMessageFlag;
cdevMessage * message;
MonitorTestAttrib * attrib;
cdevData output;
while(dequeue(message)==0)
{
// *************************************************************
// * Note at this point a cdevTagMap has already been received
// * from the client. This tag map will have initialized all
// * of the tags that are required by the service.
// *************************************************************
if(!strcmp(message->getMessage(), "unregister"))
{
sendMessageFlag = 0;
removeClientMonitors(message->getClientID());
}
if(!strncmp(message->getMessage(), "get ", 4))
{
output.remove();
saveMessageFlag = 0;
sendMessageFlag = 1;
sprintf(key, "%s %s",
message->getDeviceList()[0],
&message->getMessage()[4]);
if((attrib = (MonitorTestAttrib *)attribHash.find(key))!=NULL)
{
attrib->getToData(&output, message->getContext());
output.insert("resultCode", CDEV_SUCCESS);
}
else output.insert("resultCode", CDEV_NOTFOUND);
}
else if(!strncmp(message->getMessage(), "set ", 4))
{
output.remove();
saveMessageFlag = 0;
sendMessageFlag = 1;
sprintf(key, "%s %s",
message->getDeviceList()[0],
&message->getMessage()[4]);
if((attrib = (MonitorTestAttrib *)attribHash.find(key))!=NULL)
{
output.insert("resultCode",
attrib->setFromData(message->getData()));
}
else output.insert("resultCode", CDEV_NOTFOUND);
}
else if(!strncmp(message->getMessage(), "monitorOn ", 10))
{
saveMessageFlag = 1;
sendMessageFlag = 0;
sprintf(key, "%s %s",
message->getDeviceList()[0],
&message->getMessage()[10]);
if((attrib = (MonitorTestAttrib *)attribHash.find(key))!=NULL)
{
attrib->insertMonitor(this, message);
}
}
else if(!strncmp(message->getMessage(), "monitorOff ", 11))
{
saveMessageFlag = 0;
sendMessageFlag = 1;
sprintf(key, "%s %s",
message->getDeviceList()[0],
&message->getMessage()[11]);
if((attrib = (MonitorTestAttrib *)attribHash.find(key))!=NULL)
{
attrib->removeMonitor(this, message);
}
}
else
{
saveMessageFlag = 0;
sendMessageFlag = 1;
output.insert("resultCode", CDEV_NOTFOUND);
}
if(sendMessageFlag)
{
message->setData(&output, 1);
enqueue(message);
}
if(!saveMessageFlag) delete message;
}
}
int MonitorTestServer::fireCallback ( cdevMessage * message )
{
int result = CDEV_SUCCESS;
cdevData * data = NULL;
if(message && (data = message->getData())!=NULL)
{
data->insert("resultCode", CDEV_SUCCESS);
result = enqueue(message);
}
return result;
}
int main(int argc, char ** argv)
{
fprintf(stdout, "\n\
=> **********************************************************************\n\
=> * This is a test server that is used to test the Monitoring *\n\
=> * capabilities of the cdevGenericServer engine. This server will be *\n\
=> * contacted with a list of monitor requests to which it will respond *\n\
=> **********************************************************************\n\n");
fflush(stdout);
char * name = "MonitorTestServer";
if(argc>1) name = argv[1];
MonitorTestServer server("MONITOR_TEST", name, 0, 60);
cdevServer::runServer();
return 0;
}