- Refactored hdb callbacks
SKIPPED: psi/julcho.c
This commit is contained in:
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user