- added DevHostport and DevStatus function
This commit is contained in:
46
devser.c
46
devser.c
@ -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;
|
||||
}
|
||||
|
15
devser.h
15
devser.h
@ -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
|
||||
|
Reference in New Issue
Block a user