This is Webservice SDK for mbed. LPCXpresso1769/LPC1768/FRDM-K64F/LPC4088
Fork of libMiMic by
mbed/mod/ModJsonRpc.cpp@72:c118a7aa37a3, 2014-06-13 (annotated)
- Committer:
- nyatla
- Date:
- Fri Jun 13 11:06:33 2014 +0000
- Revision:
- 72:c118a7aa37a3
- Child:
- 73:8c7dd6fd462e
mbedAPI???????
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
nyatla | 72:c118a7aa37a3 | 1 | #include "ModJsonRpc.h" |
nyatla | 72:c118a7aa37a3 | 2 | #include "../net/httpd/mod/NyLPC_cModWebSocket_protected.h" |
nyatla | 72:c118a7aa37a3 | 3 | #include "HttpdConnection.h" |
nyatla | 72:c118a7aa37a3 | 4 | |
nyatla | 72:c118a7aa37a3 | 5 | namespace MiMic |
nyatla | 72:c118a7aa37a3 | 6 | { |
nyatla | 72:c118a7aa37a3 | 7 | #define NUM_OF_OBJECTS 32 |
nyatla | 72:c118a7aa37a3 | 8 | |
nyatla | 72:c118a7aa37a3 | 9 | ModJsonRpc::ModJsonRpc(const char* i_path,const struct NyLPC_TJsonRpcClassDef** i_rpc_table):ModBaseClass(i_path) |
nyatla | 72:c118a7aa37a3 | 10 | { |
nyatla | 72:c118a7aa37a3 | 11 | this->_mod=NULL; |
nyatla | 72:c118a7aa37a3 | 12 | this->_rpc_table=i_rpc_table; |
nyatla | 72:c118a7aa37a3 | 13 | } |
nyatla | 72:c118a7aa37a3 | 14 | ModJsonRpc::ModJsonRpc() |
nyatla | 72:c118a7aa37a3 | 15 | { |
nyatla | 72:c118a7aa37a3 | 16 | this->_mod=NULL; |
nyatla | 72:c118a7aa37a3 | 17 | } |
nyatla | 72:c118a7aa37a3 | 18 | ModJsonRpc::~ModJsonRpc() |
nyatla | 72:c118a7aa37a3 | 19 | { |
nyatla | 72:c118a7aa37a3 | 20 | if(this->_mod!=NULL){ |
nyatla | 72:c118a7aa37a3 | 21 | NyLPC_cModJsonRpc_finalize(this->_mod); |
nyatla | 72:c118a7aa37a3 | 22 | this->_mod=NULL; |
nyatla | 72:c118a7aa37a3 | 23 | } |
nyatla | 72:c118a7aa37a3 | 24 | } |
nyatla | 72:c118a7aa37a3 | 25 | void ModJsonRpc::setParam(const char* i_path,const struct NyLPC_TJsonRpcClassDef** i_rpc_table) |
nyatla | 72:c118a7aa37a3 | 26 | { |
nyatla | 72:c118a7aa37a3 | 27 | ModBaseClass::setParam(i_path); |
nyatla | 72:c118a7aa37a3 | 28 | this->_rpc_table=i_rpc_table; |
nyatla | 72:c118a7aa37a3 | 29 | } |
nyatla | 72:c118a7aa37a3 | 30 | bool ModJsonRpc::execute(HttpdConnection& i_connection) |
nyatla | 72:c118a7aa37a3 | 31 | { |
nyatla | 72:c118a7aa37a3 | 32 | if(this->_mod!=NULL){ |
nyatla | 72:c118a7aa37a3 | 33 | return false; |
nyatla | 72:c118a7aa37a3 | 34 | } |
nyatla | 72:c118a7aa37a3 | 35 | this->_mod=(NyLPC_TcModJsonRpc_t*)malloc(sizeof(NyLPC_TcModJsonRpc_t)); |
nyatla | 72:c118a7aa37a3 | 36 | if(this->_mod==NULL){ |
nyatla | 72:c118a7aa37a3 | 37 | return false; |
nyatla | 72:c118a7aa37a3 | 38 | } |
nyatla | 72:c118a7aa37a3 | 39 | bool ret=false; |
nyatla | 72:c118a7aa37a3 | 40 | //initialize table |
nyatla | 72:c118a7aa37a3 | 41 | this->_objects=new void*[NUM_OF_OBJECTS]; |
nyatla | 72:c118a7aa37a3 | 42 | memset(this->_objects,sizeof(void*)*NUM_OF_OBJECTS,0); |
nyatla | 72:c118a7aa37a3 | 43 | |
nyatla | 72:c118a7aa37a3 | 44 | //initialize websocket |
nyatla | 72:c118a7aa37a3 | 45 | NyLPC_cModJsonRpc_initialize(this->_mod,this->_path,this->_rpc_table); |
nyatla | 72:c118a7aa37a3 | 46 | if(NyLPC_cModJsonRpc_canHandle(this->_mod,i_connection._ref_inst)){ |
nyatla | 72:c118a7aa37a3 | 47 | ret=NyLPC_cModJsonRpc_execute(this->_mod,i_connection._ref_inst)?true:false; |
nyatla | 72:c118a7aa37a3 | 48 | } |
nyatla | 72:c118a7aa37a3 | 49 | NyLPC_cModJsonRpc_finalize(this->_mod); |
nyatla | 72:c118a7aa37a3 | 50 | free(this->_mod); |
nyatla | 72:c118a7aa37a3 | 51 | this->_mod=NULL; |
nyatla | 72:c118a7aa37a3 | 52 | |
nyatla | 72:c118a7aa37a3 | 53 | for(int i=0;i<NUM_OF_OBJECTS;i++){ |
nyatla | 72:c118a7aa37a3 | 54 | if(this->_objects[i]!=NULL){ |
nyatla | 72:c118a7aa37a3 | 55 | delete this->_objects[i]; |
nyatla | 72:c118a7aa37a3 | 56 | } |
nyatla | 72:c118a7aa37a3 | 57 | } |
nyatla | 72:c118a7aa37a3 | 58 | return ret; |
nyatla | 72:c118a7aa37a3 | 59 | } |
nyatla | 72:c118a7aa37a3 | 60 | |
nyatla | 72:c118a7aa37a3 | 61 | void ModJsonRpc::dispatchRpcCall() |
nyatla | 72:c118a7aa37a3 | 62 | { |
nyatla | 72:c118a7aa37a3 | 63 | const union NyLPC_TJsonRpcParserResult* rpc_result; |
nyatla | 72:c118a7aa37a3 | 64 | for(;;){ |
nyatla | 72:c118a7aa37a3 | 65 | if(!NyLPC_cModJsonRpc_processRpcMessage(this->_mod)){ |
nyatla | 72:c118a7aa37a3 | 66 | break; |
nyatla | 72:c118a7aa37a3 | 67 | } |
nyatla | 72:c118a7aa37a3 | 68 | //メッセージ取得を試行 |
nyatla | 72:c118a7aa37a3 | 69 | rpc_result=NyLPC_cModJsonRpc_getMessage(this->_mod); |
nyatla | 72:c118a7aa37a3 | 70 | if(rpc_result==NULL){ |
nyatla | 72:c118a7aa37a3 | 71 | //nothing |
nyatla | 72:c118a7aa37a3 | 72 | continue; |
nyatla | 72:c118a7aa37a3 | 73 | } |
nyatla | 72:c118a7aa37a3 | 74 | if(NyLPC_TJsonRpcParserResult_hasMethodHandler(rpc_result)){ |
nyatla | 72:c118a7aa37a3 | 75 | if(NyLPC_TJsonRpcParserResult_callMethodHandler(rpc_result,this)){ |
nyatla | 72:c118a7aa37a3 | 76 | continue; |
nyatla | 72:c118a7aa37a3 | 77 | }else{ |
nyatla | 72:c118a7aa37a3 | 78 | //function failed. |
nyatla | 72:c118a7aa37a3 | 79 | break; |
nyatla | 72:c118a7aa37a3 | 80 | } |
nyatla | 72:c118a7aa37a3 | 81 | }else{ |
nyatla | 72:c118a7aa37a3 | 82 | //no handler |
nyatla | 72:c118a7aa37a3 | 83 | break; |
nyatla | 72:c118a7aa37a3 | 84 | } |
nyatla | 72:c118a7aa37a3 | 85 | } |
nyatla | 72:c118a7aa37a3 | 86 | NyLPC_cModJsonRpc_close(this->_mod,1000); |
nyatla | 72:c118a7aa37a3 | 87 | return; |
nyatla | 72:c118a7aa37a3 | 88 | } |
nyatla | 72:c118a7aa37a3 | 89 | bool ModJsonRpc::putResult(unsigned int i_id,const char* i_params_fmt,...) |
nyatla | 72:c118a7aa37a3 | 90 | { |
nyatla | 72:c118a7aa37a3 | 91 | bool ret; |
nyatla | 72:c118a7aa37a3 | 92 | va_list a; |
nyatla | 72:c118a7aa37a3 | 93 | va_start(a,i_params_fmt); |
nyatla | 72:c118a7aa37a3 | 94 | ret=NyLPC_cModJsonRpc_putResultV(this->_mod,i_id,i_params_fmt,a)?true:false; |
nyatla | 72:c118a7aa37a3 | 95 | va_end(a); |
nyatla | 72:c118a7aa37a3 | 96 | return ret; |
nyatla | 72:c118a7aa37a3 | 97 | } |
nyatla | 72:c118a7aa37a3 | 98 | bool ModJsonRpc::putError(unsigned int i_id,int i_code) |
nyatla | 72:c118a7aa37a3 | 99 | { |
nyatla | 72:c118a7aa37a3 | 100 | return NyLPC_cModJsonRpc_putError(this->_mod,i_id,i_code)?true:false; |
nyatla | 72:c118a7aa37a3 | 101 | } |
nyatla | 72:c118a7aa37a3 | 102 | |
nyatla | 72:c118a7aa37a3 | 103 | int ModJsonRpc::addObject(void* i_object) |
nyatla | 72:c118a7aa37a3 | 104 | { |
nyatla | 72:c118a7aa37a3 | 105 | for(int i=0;i<NUM_OF_OBJECTS;i++){ |
nyatla | 72:c118a7aa37a3 | 106 | if(this->_objects[i]==NULL){ |
nyatla | 72:c118a7aa37a3 | 107 | this->_objects[i]=i_object; |
nyatla | 72:c118a7aa37a3 | 108 | return i; |
nyatla | 72:c118a7aa37a3 | 109 | } |
nyatla | 72:c118a7aa37a3 | 110 | } |
nyatla | 72:c118a7aa37a3 | 111 | return -1; |
nyatla | 72:c118a7aa37a3 | 112 | } |
nyatla | 72:c118a7aa37a3 | 113 | void* ModJsonRpc::getObject(int i_oid) |
nyatla | 72:c118a7aa37a3 | 114 | { |
nyatla | 72:c118a7aa37a3 | 115 | return this->_objects[i_oid]; |
nyatla | 72:c118a7aa37a3 | 116 | } |
nyatla | 72:c118a7aa37a3 | 117 | |
nyatla | 72:c118a7aa37a3 | 118 | } |