- 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 *actions; /* the action queue */
DevAction *toKill; /* list of actions to be killed */ DevAction *toKill; /* list of actions to be killed */
int steps; int steps;
AsconStatus status;
double startTime; /* fields for statistics */ double startTime; /* fields for statistics */
double comCount; double comCount;
long nComCount; long nComCount;
@ -228,7 +229,6 @@ void DevAsconStatistics(DevSer *self, double *avg, \
static int DevQueueTask(void *ds) static int DevQueueTask(void *ds)
{ {
DevSer *devser = ds; DevSer *devser = ds;
AsconStatus status;
DevAction *action; DevAction *action;
char *sendData; char *sendData;
char *replyData = NULL; char *replyData = NULL;
@ -245,10 +245,10 @@ static int DevQueueTask(void *ds)
} }
while (action != NULL) { while (action != NULL) {
StartAscon(devser); StartAscon(devser);
status = AsconTask(devser->ascon); devser->status = AsconTask(devser->ascon);
AsconLog(devser); AsconLog(devser);
if (status == AsconFailure) { if (devser->status >= AsconFailure) {
replyData = AsconGetError(devser->ascon); replyData = AsconGetError(devser->ascon);
/** /**
* TODO: this may be a place to record the end time * TODO: this may be a place to record the end time
@ -258,7 +258,7 @@ static int DevQueueTask(void *ds)
} else { } else {
/* This is a follow up error and should not go into statistics */ /* 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); replyData = AsconRead(devser->ascon);
if(replyData != NULL){ if(replyData != NULL){
LogResponse(devser,0); LogResponse(devser,0);
@ -269,7 +269,7 @@ static int DevQueueTask(void *ds)
if (devser->steps > 0) { /* debugging mode */ if (devser->steps > 0) { /* debugging mode */
devser->steps--; devser->steps--;
} }
sendData = action->hdl(action->data, replyData, (status == AsconFailure)); sendData = action->hdl(action->data, replyData, (devser->status != AsconReady));
if (sendData != NULL) { if (sendData != NULL) {
AsconWrite(devser->ascon, sendData, 0); AsconWrite(devser->ascon, sendData, 0);
LogStart(devser); LogStart(devser);
@ -304,6 +304,7 @@ DevSer *DevMake(SConnection * con, int argc, char *argv[])
devser->actions = NULL; devser->actions = NULL;
devser->toKill = NULL; devser->toKill = NULL;
devser->steps = -1; /* no debugging by default */ devser->steps = -1; /* no debugging by default */
devser->status = AsconUnconnected;
devser->startTime = -1; devser->startTime = -1;
TaskRegister(pServ->pTasker, DevQueueTask, NULL, NULL, devser, 0); TaskRegister(pServ->pTasker, DevQueueTask, NULL, NULL, devser, 0);
return devser; return devser;
@ -347,11 +348,12 @@ void DevDisconnect(DevSer * devser)
if (devser->ascon) { if (devser->ascon) {
AsconDisconnect(devser->ascon); AsconDisconnect(devser->ascon);
} }
devser->status = AsconOffline;
} }
void DevReconnect(DevSer * devser, char *hostport) void DevReconnect(DevSer * devser, char *hostport)
{ {
DevReset(devser); /* DevReset(devser); */
if (devser->ascon) { if (devser->ascon) {
AsconReconnect(devser->ascon, hostport); AsconReconnect(devser->ascon, hostport);
} }
@ -563,3 +565,33 @@ char * DevList(DevSer * devser) {
DeleteDynString(result); DeleteDynString(result);
return str; 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, void DevAsconStatistics(DevSer *self, double *avg,
double *max, int *maxState, int *longCount); 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 #endif