Jun Furutani / libMiMic

Fork of libMiMic by Ryo Iizuka

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;