- Refactored hdb callbacks

SKIPPED:
	psi/julcho.c
This commit is contained in:
koennecke
2008-03-10 11:06:07 +00:00
parent 6b10e0a4e9
commit f512f47b02
14 changed files with 1440 additions and 829 deletions

View File

@@ -202,11 +202,36 @@ static void SctSetDirty(SctChain *sc) {
sc->doit = 1;
}
static int SctUpdateCallback(void *user, void *conn, pHdb node, hdbValue value) {
SctParData *data = user;
static hdbCallbackReturn SctUpdateCallback(pHdb node, void *userData,
pHdbMessage message) {
SctParData *data = userData;
SConnection *con;
char path[MAX_HDB_PATH];
pDynString str;
pHdbPtrMessage pm = NULL;
pHdbDataMessage mm = NULL;
pHdbDataSearch dsm = NULL;
hdbValue value;
if((pm = GetKillPtrMessage(message)) != NULL){
if(data->sct == pm->pPtr){
return hdbKill;
}
return hdbContinue;
}
if((dsm = GetHdbDataSearchMessage(message)) != NULL){
if(dsm->testFunc == SctUpdateCallback && dsm->testPtr == data->sct){
dsm->result = userData;
return hdbAbort;
}
return hdbContinue;
}
if((mm = GetHdbUpdateMessage(message)) == NULL) {
return hdbContinue;
}
value = *(mm->v);
if (data->inprogress) {
if (data->sct->operation == sct_complete_keyword) {
@@ -220,15 +245,33 @@ static int SctUpdateCallback(void *user, void *conn, pHdb node, hdbValue value)
SCStorePop(data->conCtx);
}
}
return 1;
return hdbContinue;;
}
static int SctSetCallback(void *user, void *conn, pHdb node, hdbValue value) {
SctParData *data = user;
static hdbCallbackReturn SctSetCallback(pHdb node, void *userData,
pHdbMessage message) {
SctParData *data = userData;
SConnection *oldCon;
char path[MAX_HDB_PATH];
pDynString str;
pHdb target;
SConnection *conn = NULL;
pHdbPtrMessage pm = NULL;
pHdbDataMessage mm = NULL;
hdbValue value;
if((pm = GetKillPtrMessage(message)) != NULL){
if(data->sct == pm->pPtr){
return hdbKill;
}
return hdbContinue;
}
if((mm = GetHdbSetMessage(message)) == NULL) {
return hdbContinue;
}
value = *(mm->v);
conn = mm->callData;
if (data->setChain) {
if (data->pending) {
@@ -247,16 +290,25 @@ static int SctSetCallback(void *user, void *conn, pHdb node, hdbValue value) {
if (target) {
UpdateHipadabaPar(target, value, NULL);
}
return 1;
return hdbContinue;
}
return 1;
return hdbContinue;
}
static int SctReadCallback(void *user, void *conn, pHdb node, hdbValue value) {
SctParData *data = user;
static hdbCallbackReturn SctReadCallback(pHdb node, void *userData,
pHdbMessage message) {
SctParData *data = userData;
pHdbPtrMessage pm = NULL;
if((pm = GetKillPtrMessage(message)) != NULL){
if(data->sct == pm->pPtr){
return hdbKill;
}
return hdbContinue;
}
/* not used ? */
return 1;
return hdbContinue;
}
int SctCallDynamicScript(Sct *sct, char *name, char *script) {
@@ -372,7 +424,7 @@ static int SctExec(SConnection *con, SicsInterp *sics, void *object, int argc, c
if (node == 0) goto quit;
memset(&newValue,0,sizeof(hdbValue));
if (keyword == sct_take_keyword) {
data = FindHdbCallbackData(node, HCBUPDATE, SctUpdateCallback, sct);
data = FindHdbCallbackData(node, SctUpdateCallback, sct);
result = NULL;
if (data) {
if (data->pending) {
@@ -750,7 +802,7 @@ int SctAddNode2Script(Sct *sct, SctChain *sc, pHdb node, SConnection *con) {
pHdb child;
hdbValue hval;
data = FindHdbCallbackData(node, HCBUPDATE, SctUpdateCallback, sct);
data = FindHdbCallbackData(node,SctUpdateCallback, sct);
if (data == NULL) {
data = calloc(1, sizeof(*data));
assert(data);
@@ -762,17 +814,17 @@ int SctAddNode2Script(Sct *sct, SctChain *sc, pHdb node, SConnection *con) {
data->conCtx = NULL;
data->refCnt = 3; /* insert 3 times */
cb = MakeHipadabaCallback(SctUpdateCallback, data, SctFreeParData, -1, sct);
cb = MakeHipadabaCallback(SctUpdateCallback, data, SctFreeParData);
assert(cb);
AppendHipadabaCallback(node, HCBUPDATE, cb);
AppendHipadabaCallback(node,cb);
cb = MakeHipadabaCallback(SctSetCallback, data, SctFreeParData, -1, sct);
cb = MakeHipadabaCallback(SctSetCallback, data, SctFreeParData);
assert(cb);
AppendHipadabaCallback(node, HCBSET, cb);
AppendHipadabaCallback(node,cb);
cb = MakeHipadabaCallback(SctReadCallback, data, SctFreeParData, -1, sct);
cb = MakeHipadabaCallback(SctReadCallback, data, SctFreeParData);
assert(cb);
AppendHipadabaCallback(node, HCBREAD, cb);
AppendHipadabaCallback(node,cb);
} else {
if (data->sct != sct) {
SCPrintf(con, eError, "ERROR: node is already attached to another script context controller");