* ここで指定した書式文字列は、"そのまま"パラメータ部に表示されます。文字列を返す場合は、次のように\"でエスケープしてください。\r
* '0,1,2,-1,\"result\",3'\r
*/\r
-NyLPC_TBool NyLPC_cModJsonRpc_putResult(NyLPC_TcModJsonRpc_t* i_inst,NyLPC_TUInt32 i_id,NyLPC_TInt32 i_result,const NyLPC_TChar* i_params_fmt,...)\r
+NyLPC_TBool NyLPC_cModJsonRpc_putResult(NyLPC_TcModJsonRpc_t* i_inst,NyLPC_TUInt32 i_id,const NyLPC_TChar* i_params_fmt,...)\r
+{\r
+ NyLPC_TBool r;\r
+ va_list a;\r
+ //書き込み文字数の事前計算\r
+ va_start(a,i_params_fmt);\r
+ r=NyLPC_cModJsonRpc_putResultV(i_inst,i_id,i_params_fmt,a);\r
+ va_end(a);\r
+ return r;\r
+}\r
+\r
+/**\r
+ * @param i_params_fmt\r
+ * パラメータ部のフォーマット文字列です。NyLPC_cFormatWriterと同等の構文を使用できます。\r
+ * ここで指定した書式文字列は、"そのまま"パラメータ部に表示されます。文字列を返す場合は、次のように\"でエスケープしてください。\r
+ * '0,1,2,-1,\"result\",3'\r
+ */\r
+NyLPC_TBool NyLPC_cModJsonRpc_putResultV(NyLPC_TcModJsonRpc_t* i_inst,NyLPC_TUInt32 i_id,const NyLPC_TChar* i_params_fmt,va_list i_a)\r
{\r
NyLPC_TBool r;\r
va_list a;\r
NyLPC_TInt16 l;\r
\r
//書き込み文字数の事前計算\r
- va_start(a,i_params_fmt);\r
- l=NyLPC_cModWebSocket_testFormat(&i_inst->super,"{\"result\":%d,\"params\":[",i_result);\r
+ NyLPC_va_copy(a,i_a);\r
+ l=NyLPC_cModWebSocket_testFormat(&i_inst->super,"{\"jsonrpc\":\"2.0\",\"result\":[");\r
l+=NyLPC_cModWebSocket_testFormatV(&i_inst->super,i_params_fmt,a);\r
l+=NyLPC_cModWebSocket_testFormat(&i_inst->super,"],\"id\":%d}",i_id);\r
va_end(a);\r
\r
//バルク書き込み\r
- va_start(a,i_params_fmt);\r
NyLPC_cModWebSocket_startBulkWrite(&i_inst->super,l);\r
- r=NyLPC_cModWebSocket_writeBulkFormat(&i_inst->super,"{\"result\":%d,\"params\":[",i_result);\r
- r=r&&NyLPC_cModWebSocket_writeBulkFormatV(&i_inst->super,i_params_fmt,a);\r
+ r=NyLPC_cModWebSocket_writeBulkFormat(&i_inst->super,"{\"jsonrpc\":\"2.0\",\"result\":[");\r
+ r=r&&NyLPC_cModWebSocket_writeBulkFormatV(&i_inst->super,i_params_fmt,i_a);\r
r=r&&NyLPC_cModWebSocket_writeBulkFormat(&i_inst->super,"],\"id\":%d}",i_id);\r
r=r&&NyLPC_cModWebSocket_endBulkWrite(&i_inst->super);\r
- va_end(a);\r
return r;\r
}\r
\r
+struct CodeMsgTbl{\r
+ const char* n;\r
+ NyLPC_TInt32 id;\r
+};\r
+\r
+const static struct CodeMsgTbl _table[]=\r
+{\r
+ {"Parse error",NyLPC_TJsonRpcErrorCode_PARSE_ERROR},\r
+ {"Invalid Request",NyLPC_TJsonRpcErrorCode_INVALID_REQUEST},\r
+ {"Method not found",NyLPC_TJsonRpcErrorCode_METHOD_NOT_FOUND},\r
+ {"Invalid params",NyLPC_TJsonRpcErrorCode_INVALID_PARAMS},\r
+ {"Internal error",NyLPC_TJsonRpcErrorCode_INTERNAL_ERROR},\r
+ {"Server error",NyLPC_TJsonRpcErrorCode_SERVER_ERROR_BASE}\r
+};\r
+static const NyLPC_TChar* code2msg(NyLPC_TInt32 i_id)\r
+{\r
+ int i;\r
+ for(i=0;i<6;i++){\r
+ if(i_id==_table[i].id){\r
+ return _table[i].n;\r
+ }\r
+ }\r
+ return _table[6].n;\r
+}\r
+\r
+NyLPC_TBool NyLPC_cModJsonRpc_putError(NyLPC_TcModJsonRpc_t* i_inst,NyLPC_TUInt32 i_id,NyLPC_TInt32 i_code)\r
+{\r
+ return NyLPC_cModWebSocket_writeFormat(&i_inst->super,"{\"jsonrpc\":\"2.0\",\"error\":{\"code\": %d, \"message\": \"%s\"},\"id\":%d}",i_code,code2msg(i_code),i_id);\r
+}\r