This is Webservice SDK for mbed. LPCXpresso1769/LPC1768/FRDM-K64F/LPC4088
Fork of libMiMic by
mbed/mod/ModJsonRpc.h@115:fa79286d8ea4, 2017-02-24 (annotated)
- Committer:
- furutani
- Date:
- Fri Feb 24 04:43:41 2017 +0000
- Revision:
- 115:fa79286d8ea4
- Parent:
- 85:416f8bbbdf54
Delete missing include line.; Add parameter "timeout" to TCPSocket::connect(), precv().; Fix to send ARP request to default gateway when connecting to IP address of different segment.;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
nyatla | 72:c118a7aa37a3 | 1 | #include "NyLPC_net.h" |
nyatla | 72:c118a7aa37a3 | 2 | #include "ModBaseClass.h" |
nyatla | 72:c118a7aa37a3 | 3 | #include "HttpdConnection.h" |
nyatla | 72:c118a7aa37a3 | 4 | #include "Httpd.h" |
nyatla | 72:c118a7aa37a3 | 5 | #include "Net.h" |
nyatla | 85:416f8bbbdf54 | 6 | |
nyatla | 72:c118a7aa37a3 | 7 | |
nyatla | 72:c118a7aa37a3 | 8 | namespace MiMic |
nyatla | 72:c118a7aa37a3 | 9 | { |
nyatla | 72:c118a7aa37a3 | 10 | class HttpdConnection; |
nyatla | 72:c118a7aa37a3 | 11 | |
nyatla | 72:c118a7aa37a3 | 12 | /** |
nyatla | 72:c118a7aa37a3 | 13 | * This class is Websocket module. |
nyatla | 72:c118a7aa37a3 | 14 | * The class provides 3 services. |
nyatla | 72:c118a7aa37a3 | 15 | * <ul> |
nyatla | 72:c118a7aa37a3 | 16 | * <li>d.xml - a device description.</li> |
nyatla | 72:c118a7aa37a3 | 17 | * <li>control/xx - soap handler</li> |
nyatla | 72:c118a7aa37a3 | 18 | * <li>event/xx -event handler.</li> |
nyatla | 72:c118a7aa37a3 | 19 | * </ul> |
nyatla | 72:c118a7aa37a3 | 20 | */ |
nyatla | 72:c118a7aa37a3 | 21 | class ModJsonRpc:ModBaseClass |
nyatla | 72:c118a7aa37a3 | 22 | { |
nyatla | 76:b375b3d750d8 | 23 | public: |
nyatla | 85:416f8bbbdf54 | 24 | typedef struct TcJsonRpcEx{ |
nyatla | 85:416f8bbbdf54 | 25 | NyLPC_TcModJsonRpc_t super; |
nyatla | 85:416f8bbbdf54 | 26 | ModJsonRpc* cppmod_ptr; |
nyatla | 85:416f8bbbdf54 | 27 | }TcJsonRpcEx_t; |
nyatla | 85:416f8bbbdf54 | 28 | public: |
nyatla | 76:b375b3d750d8 | 29 | class BasicRpcObject |
nyatla | 76:b375b3d750d8 | 30 | { |
nyatla | 76:b375b3d750d8 | 31 | public: |
nyatla | 76:b375b3d750d8 | 32 | void* obj; |
nyatla | 76:b375b3d750d8 | 33 | BasicRpcObject(void* i_ptr) : obj(i_ptr){}; |
nyatla | 76:b375b3d750d8 | 34 | virtual ~BasicRpcObject(){} |
nyatla | 76:b375b3d750d8 | 35 | }; |
nyatla | 76:b375b3d750d8 | 36 | template< class T > class RpcObject : public BasicRpcObject{ |
nyatla | 76:b375b3d750d8 | 37 | public: |
nyatla | 76:b375b3d750d8 | 38 | RpcObject(T* i_ptr) : BasicRpcObject(i_ptr){}; |
nyatla | 76:b375b3d750d8 | 39 | virtual ~RpcObject(){delete (static_cast<T*>(this->obj));} |
nyatla | 76:b375b3d750d8 | 40 | }; |
nyatla | 76:b375b3d750d8 | 41 | template< class T > class RpcArray : public BasicRpcObject{ |
nyatla | 76:b375b3d750d8 | 42 | public: |
nyatla | 76:b375b3d750d8 | 43 | RpcArray(T* i_ptr) : BasicRpcObject(i_ptr){}; |
nyatla | 76:b375b3d750d8 | 44 | virtual ~RpcArray(){delete[] (static_cast<T*>(this->obj));} |
nyatla | 76:b375b3d750d8 | 45 | }; |
nyatla | 72:c118a7aa37a3 | 46 | private: |
nyatla | 72:c118a7aa37a3 | 47 | public: |
nyatla | 72:c118a7aa37a3 | 48 | const static int PARSE_ERROR=NyLPC_TJsonRpcErrorCode_PARSE_ERROR; |
nyatla | 72:c118a7aa37a3 | 49 | const static int INVALID_REQUEST=NyLPC_TJsonRpcErrorCode_INVALID_REQUEST; |
nyatla | 72:c118a7aa37a3 | 50 | const static int METHOD_NOT_FOUND=NyLPC_TJsonRpcErrorCode_METHOD_NOT_FOUND; |
nyatla | 72:c118a7aa37a3 | 51 | const static int INVALID_PARAMS=NyLPC_TJsonRpcErrorCode_INVALID_PARAMS; |
nyatla | 72:c118a7aa37a3 | 52 | const static int INTERNAL_ERROR=NyLPC_TJsonRpcErrorCode_INTERNAL_ERROR; |
nyatla | 72:c118a7aa37a3 | 53 | const static int SERVER_ERROR_BASE=NyLPC_TJsonRpcErrorCode_SERVER_ERROR_BASE; |
nyatla | 72:c118a7aa37a3 | 54 | private: |
nyatla | 76:b375b3d750d8 | 55 | BasicRpcObject** _objects; |
nyatla | 72:c118a7aa37a3 | 56 | const struct NyLPC_TJsonRpcClassDef** _rpc_table; |
nyatla | 72:c118a7aa37a3 | 57 | protected: |
nyatla | 85:416f8bbbdf54 | 58 | TcJsonRpcEx_t* _mod; |
nyatla | 72:c118a7aa37a3 | 59 | public: |
nyatla | 72:c118a7aa37a3 | 60 | ModJsonRpc(); |
nyatla | 72:c118a7aa37a3 | 61 | /** |
nyatla | 72:c118a7aa37a3 | 62 | * @param i_rpc_table |
nyatla | 72:c118a7aa37a3 | 63 | * An address of Json RPC functions table. |
nyatla | 72:c118a7aa37a3 | 64 | */ |
nyatla | 72:c118a7aa37a3 | 65 | ModJsonRpc(const char* i_path,const struct NyLPC_TJsonRpcClassDef** i_rpc_table); |
nyatla | 72:c118a7aa37a3 | 66 | virtual ~ModJsonRpc(); |
nyatla | 81:e5e4f2264d24 | 67 | bool isStarted(); |
nyatla | 72:c118a7aa37a3 | 68 | void setParam(const char* i_path,const struct NyLPC_TJsonRpcClassDef** i_rpc_table); |
nyatla | 72:c118a7aa37a3 | 69 | /** |
nyatla | 72:c118a7aa37a3 | 70 | * This function prepares Json rpc loop with websocket negotiation. |
nyatla | 72:c118a7aa37a3 | 71 | * @return |
nyatla | 72:c118a7aa37a3 | 72 | * true if successful;otherwishe false. |
nyatla | 72:c118a7aa37a3 | 73 | */ |
nyatla | 72:c118a7aa37a3 | 74 | bool execute(HttpdConnection& i_connection); |
nyatla | 75:2a18df0ef111 | 75 | void dispatchRpc(); |
nyatla | 72:c118a7aa37a3 | 76 | |
nyatla | 72:c118a7aa37a3 | 77 | public: |
nyatla | 72:c118a7aa37a3 | 78 | //for development |
nyatla | 76:b375b3d750d8 | 79 | int addObject(BasicRpcObject* i_object); |
nyatla | 85:416f8bbbdf54 | 80 | bool removeObject(int i_id); |
nyatla | 85:416f8bbbdf54 | 81 | |
nyatla | 85:416f8bbbdf54 | 82 | void* getObject(int i_oid); |
nyatla | 85:416f8bbbdf54 | 83 | bool putResult(unsigned int i_id); |
nyatla | 72:c118a7aa37a3 | 84 | bool putResult(unsigned int i_id,const char* i_params_fmt,...); |
nyatla | 72:c118a7aa37a3 | 85 | bool putError(unsigned int i_id,int i_code); |
nyatla | 72:c118a7aa37a3 | 86 | }; |
nyatla | 76:b375b3d750d8 | 87 | } |