- 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 *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;
|
||||||
|
}
|
||||||
|
15
devser.h
15
devser.h
@ -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
|
||||||
|
Reference in New Issue
Block a user