Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of libMiMic by
Diff: mbed/mod/ModJsonRpc.cpp
- Revision:
- 85:416f8bbbdf54
- Parent:
- 81:e5e4f2264d24
diff -r a5f5973591d8 -r 416f8bbbdf54 mbed/mod/ModJsonRpc.cpp
--- a/mbed/mod/ModJsonRpc.cpp Fri Jul 04 02:10:40 2014 +0000
+++ b/mbed/mod/ModJsonRpc.cpp Fri Jul 04 14:28:46 2014 +0000
@@ -4,7 +4,7 @@
namespace MiMic
{
- #define NUM_OF_OBJECTS 32
+ #define NUM_OF_OBJECTS 16
ModJsonRpc::BasicRpcObject** newObjectArray()
{
ModJsonRpc::BasicRpcObject** r=new ModJsonRpc::BasicRpcObject*[NUM_OF_OBJECTS];
@@ -33,7 +33,7 @@
ModJsonRpc::~ModJsonRpc()
{
if(this->_mod!=NULL){
- NyLPC_cModJsonRpc_finalize(this->_mod);
+ NyLPC_cModJsonRpc_finalize(&(this->_mod->super));
free(this->_mod);
deleteObjectArray(this->_objects);
this->_mod=NULL;
@@ -54,23 +54,23 @@
i_connection.unlockHttpd();
return false;
}
- this->_mod=(NyLPC_TcModJsonRpc_t*)malloc(sizeof(NyLPC_TcModJsonRpc_t));
+ this->_mod=(TcJsonRpcEx_t*)malloc(sizeof(TcJsonRpcEx_t));
i_connection.unlockHttpd();
-
if(this->_mod==NULL){
return false;
}
+ this->_mod->cppmod_ptr=this;
//initialize websocket
- NyLPC_cModJsonRpc_initialize(this->_mod,this->_path,this->_rpc_table);
- if(NyLPC_cModJsonRpc_canHandle(this->_mod,i_connection._ref_inst)){
- if(NyLPC_cModJsonRpc_execute(this->_mod,i_connection._ref_inst)){
+ NyLPC_cModJsonRpc_initialize(&(this->_mod->super),this->_path,this->_rpc_table);
+ if(NyLPC_cModJsonRpc_canHandle(&(this->_mod->super),i_connection._ref_inst)){
+ if(NyLPC_cModJsonRpc_execute(&(this->_mod->super),i_connection._ref_inst)){
//initialize object array
this->_objects=newObjectArray();
return true;
}
}
- NyLPC_cModJsonRpc_finalize(this->_mod);
+ NyLPC_cModJsonRpc_finalize(&(this->_mod->super));
free(this->_mod);
i_connection.lockHttpd();
this->_mod=NULL;
@@ -85,17 +85,17 @@
return;
}
for(;;){
- if(!NyLPC_cModJsonRpc_processRpcMessage(this->_mod)){
+ if(!NyLPC_cModJsonRpc_processRpcMessage(&(this->_mod->super))){
break;
}
//メッセージ取得を試行
- rpc_result=NyLPC_cModJsonRpc_getMessage(this->_mod);
+ rpc_result=NyLPC_cModJsonRpc_getMessage(&(this->_mod->super));
if(rpc_result==NULL){
//nothing
continue;
}
if(NyLPC_TJsonRpcParserResult_hasMethodHandler(rpc_result)){
- if(NyLPC_TJsonRpcParserResult_callMethodHandler(rpc_result,this)){
+ if(NyLPC_TJsonRpcParserResult_callMethodHandler(rpc_result,this->_mod)){
continue;
}else{
//function failed.
@@ -106,25 +106,29 @@
break;
}
}
- NyLPC_cModJsonRpc_close(this->_mod,1000);
- NyLPC_cModJsonRpc_finalize(this->_mod);
+ NyLPC_cModJsonRpc_close(&(this->_mod->super),1000);
+ NyLPC_cModJsonRpc_finalize(&(this->_mod->super));
deleteObjectArray(this->_objects);
free(this->_mod);
this->_mod=NULL;
return;
}
+ bool ModJsonRpc::putResult(unsigned int i_id)
+ {
+ return this->putResult(i_id,"");
+ }
bool ModJsonRpc::putResult(unsigned int i_id,const char* i_params_fmt,...)
{
bool ret;
va_list a;
va_start(a,i_params_fmt);
- ret=NyLPC_cModJsonRpc_putResultV(this->_mod,i_id,i_params_fmt,a)?true:false;
+ ret=NyLPC_cModJsonRpc_putResultV(&(this->_mod->super),i_id,i_params_fmt,a)?true:false;
va_end(a);
return ret;
}
bool ModJsonRpc::putError(unsigned int i_id,int i_code)
{
- return NyLPC_cModJsonRpc_putError(this->_mod,i_id,i_code)?true:false;
+ return NyLPC_cModJsonRpc_putError(&(this->_mod->super),i_id,i_code)?true:false;
}
int ModJsonRpc::addObject(BasicRpcObject* i_object)
@@ -137,6 +141,17 @@
}
return -1;
}
+ bool ModJsonRpc::removeObject(int i_id)
+ {
+ if(0<=i_id && i_id<NUM_OF_OBJECTS){
+ if(this->_objects[i_id]!=NULL){
+ delete this->_objects[i_id];
+ this->_objects[i_id]=NULL;
+ return true;
+ }
+ }
+ return false;
+ }
void* ModJsonRpc::getObject(int i_oid)
{
return this->_objects[i_oid]->obj;
