- added DevHostport and DevStatus function

This commit is contained in:
zolliker
2012-06-19 06:31:56 +00:00
parent 36d1204da0
commit aa84a9d578
2 changed files with 54 additions and 7 deletions

View File

@ -22,6 +22,7 @@ struct DevSer {
DevAction *actions; /* the action queue */
DevAction *toKill; /* list of actions to be killed */
int steps;
AsconStatus status;
double startTime; /* fields for statistics */
double comCount;
long nComCount;
@ -228,7 +229,6 @@ void DevAsconStatistics(DevSer *self, double *avg, \
static int DevQueueTask(void *ds)
{
DevSer *devser = ds;
AsconStatus status;
DevAction *action;
char *sendData;
char *replyData = NULL;
@ -245,10 +245,10 @@ static int DevQueueTask(void *ds)
}
while (action != NULL) {
StartAscon(devser);
status = AsconTask(devser->ascon);
StartAscon(devser);
devser->status = AsconTask(devser->ascon);
AsconLog(devser);
if (status == AsconFailure) {
if (devser->status >= AsconFailure) {
replyData = AsconGetError(devser->ascon);
/**
* TODO: this may be a place to record the end time
@ -258,7 +258,7 @@ static int DevQueueTask(void *ds)
} else {
/* This is a follow up error and should not go into statistics */
}
} else if (status == AsconReady) {
} else if (devser->status == AsconReady) {
replyData = AsconRead(devser->ascon);
if(replyData != NULL){
LogResponse(devser,0);
@ -269,7 +269,7 @@ static int DevQueueTask(void *ds)
if (devser->steps > 0) { /* debugging mode */
devser->steps--;
}
sendData = action->hdl(action->data, replyData, (status == AsconFailure));
sendData = action->hdl(action->data, replyData, (devser->status != AsconReady));
if (sendData != NULL) {
AsconWrite(devser->ascon, sendData, 0);
LogStart(devser);
@ -304,6 +304,7 @@ DevSer *DevMake(SConnection * con, int argc, char *argv[])
devser->actions = NULL;
devser->toKill = NULL;
devser->steps = -1; /* no debugging by default */
devser->status = AsconUnconnected;
devser->startTime = -1;
TaskRegister(pServ->pTasker, DevQueueTask, NULL, NULL, devser, 0);
return devser;
@ -347,11 +348,12 @@ void DevDisconnect(DevSer * devser)
if (devser->ascon) {
AsconDisconnect(devser->ascon);
}
devser->status = AsconOffline;
}
void DevReconnect(DevSer * devser, char *hostport)
{
DevReset(devser);
/* DevReset(devser); */
if (devser->ascon) {
AsconReconnect(devser->ascon, hostport);
}
@ -563,3 +565,33 @@ char * DevList(DevSer * devser) {
DeleteDynString(result);
return str;
}
char *DevHostport(DevSer *devser) {
return AsconHostport(devser->ascon);
}
char *DevStatus(DevSer *devser) {
char *str, *pos;
static char buf[64];
switch (devser->status) {
case AsconOffline: return "disconnected";
case AsconUnconnected: return "unconnected";
/*
case AsconPending: return "busy";
case AsconReady: return "ready";
case AsconFailure: return AsconGetError(devser->ascon);
*/
}
str = AsconGetError(devser->ascon);
if (strncmp(str, "ASCERR: ", 8) == 0) {
str += 8;
}
pos = strchr(str, '(');
if (pos != 0) {
snprintf(buf, sizeof buf, "%s", str);
buf[pos-str] = 0;
str = buf;
}
return str;
}

View File

@ -183,4 +183,19 @@ void DevStatistics(DevSer *devser, double *avg, double *max,
*/
void DevAsconStatistics(DevSer *self, double *avg,
double *max, int *maxState, int *longCount);
/**
* \brief return host:port
* \param devser The device serializer to query
* \return the host and port
*/
char *DevHostport(DevSer *devser);
/**
* \brief return status of device server ("offline", "unconnected", "")
* \param devser The device serializer to query
* \return the status
*/
char *DevStatus(DevSer *devser);
#endif