Now, I fiddling with the message writitng code, I get all remote object

messages but in the wrong order. They are sent in the right order, though.
Have to chnage the code to use one connection asynchronously for everything only.
This commit is contained in:
2015-05-04 08:02:37 +02:00
parent 5d0e05d77b
commit aef2a36b60
2 changed files with 38 additions and 10 deletions

View File

@ -17,7 +17,7 @@
*
* COPRYRIGHT: see file COPYRIGHT
*
* Mark Koennecke, February 2015
* Mark Koennecke, February-May 2015
**/
#include <unistd.h>
#include <time.h>
@ -209,8 +209,8 @@ static void ConnectRemoteObject(pRemoteOBJ self)
return;
}
self->readHandle = ANETconnect(self->host, self->port);
self->writeHandle = ANETconnect(self->host, self->port);
self->readHandle = ANETconnect(self->host, self->port);
self->transactHandle = ANETconnect(self->host, self->port);
if(self->readHandle < 0 || self->writeHandle < 0 || self->transactHandle < 0){
self->connected = 0;
@ -566,15 +566,15 @@ static int WriteResponseTask(void *pData)
}
pText = ANETreadPtr(self->writeHandle,&length);
if(length > 0){
while(length > 0){
json_tokener_reset(self->jtok);
message = json_tokener_parse_ex(self->jtok,pText,length);
tokerr = self->jtok->err;
if(tokerr == json_tokener_continue){
return 1;
} else if(tokerr != json_tokener_success) {
traceIO("RO","JSON parsing error %s on %s from %s",
json_tokener_errors[tokerr], pText, self->host);
traceIO("RO","JSON parsing error %s on %s from %s %d",
json_tokener_errors[tokerr], pText, self->host, self->jtok->char_offset);
ANETreadConsume(self->writeHandle,length);
return 1;
}
@ -614,6 +614,8 @@ static int WriteResponseTask(void *pData)
return 1;
}
pText = (char *)json_object_get_string(data);
traceIO("RO","Received:%s:%d:%d:%s",self->host,transID,eOut,pText);
status = LLDnodePtr2First(self->writeList);
while(status == 1){
@ -625,6 +627,9 @@ static int WriteResponseTask(void *pData)
SCDeleteConnection(WD.pCon);
LLDblobDelete(self->writeList);
return 1;
} else if(strstr(pText,"COMEND") != NULL && WD.waitTask == 1) {
/* skip */
return 1;
} else if(strstr(pText,"TASKSTART") != NULL){
WD.waitTask = 1 ;
LLDblobDelete(self->writeList);
@ -641,7 +646,7 @@ static int WriteResponseTask(void *pData)
}
status = LLDnodePtr2Next(self->writeList);
}
pText = ANETreadPtr(self->writeHandle,&length);
}
return 1;
@ -695,6 +700,7 @@ static hdbCallbackReturn ROWriteCallback(pHdb currentNode, void *userData,
write
*/
traceIO("RO","%s:%d: Sending %s ", self->host, self->port, command);
LLDblobAppend(self->writeList,&WD,sizeof(writeData));
status = ANETwrite(self->writeHandle,command,strlen(command));
free(command);
DeleteDynString(data);
@ -704,7 +710,6 @@ static hdbCallbackReturn ROWriteCallback(pHdb currentNode, void *userData,
}
return hdbAbort;
}
LLDblobAppend(self->writeList,&WD,sizeof(writeData));
return hdbContinue;
}