mbedからGluinサーバへ接続するライブラリです
Diff: DxClient.h
- Revision:
- 0:735163979ecf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DxClient.h Sat Feb 14 00:28:40 2015 +0000 @@ -0,0 +1,173 @@ +/** +* @author Satoshi Komorita +* +* @section LICENSE +* +* Copyright (c) 2014 Satoshi Komorita +* +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in +* all copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +* THE SOFTWARE. +* +* @section DESCRIPTION +* Simple websocket client +* +*/ + +#ifndef DXCLIENT_H +#define DXCLIENT_H + +#include "mbed.h" +#include "EthernetInterface.h" +#include "Websocket.h" + +#define MAX_USERNAME 32 +#define MAX_PASSWORD 32 +#define MAX_DEVICEID 64 + +#define MAX_PROPLEN 128 +#define MAX_PROPNAMELEN 32 +#define MAX_PROPSVALLEN 64 + +#define MAX_MESSAGELEN 512 +#define MAX_MESSAGEIDLEN 32 + +#define MAX_DEV_DESCRIPTION 64 +#define MAX_DEV_NAME 32 + +typedef enum { + DX_STRING, + DX_INTEGER, + DX_FLOAT, + DX_BOOLEAN +} dx_prop_type; +typedef enum { + DX_UPONLY, + DX_DOWNONLY, + DX_UPDOWN +} dx_prop_direction; +typedef enum { + DX_WRITEONLY, + DX_READONLY, + DX_READWRITE +} dx_prop_mode; +typedef struct { + char name[MAX_PROPNAMELEN]; + dx_prop_type type; + dx_prop_mode mode; + dx_prop_direction direction; + char s_val[MAX_PROPSVALLEN]; + float f_val; + bool b_val; +} dx_prop; + +typedef struct { + int numofprops; + dx_prop *props; +} dx_props; + +typedef bool ( *REQUEST_HANDLER )( dx_props *props); + +class DxClient +{ + public: + + /** + * Constructor + * @param url The DxClient url in the form "ws://ip_domain[:port]/path" (by default: port = 80) + * @param deviceid is uniqued ID identifing this device. + */ + DxClient(char * url, char* deviceid, float seed); + + /* + * Set Auth User and Password + * this method should be called before connect(); + */ + void set_user(char* user, char *pass); + + void set_device_description(char* desc); + void set_device_name(char* name); + + /** + * Connect to the websocket url + *@return true if the connection is established, false otherwise + */ + bool connect(); + + /** + * close websocket connection + *@return true if the connection is established, false otherwise + */ + bool close(); + + /* + * send device_register_requsest message to server + */ + bool register_device(dx_props* props); + + /* + * send device_unregister_requsest message to server + */ + bool deregister_device(); + + /* + * send device_update_request to server + */ + bool update_device(dx_props *props); + + /* + * send device_keepalive_request to server + */ + bool keepalive_device(void); + + /* + * handle device_get_request from server + */ + void set_get_requset_handler(REQUEST_HANDLER handler); + + /* + * handle device_get_request from server + */ + void set_set_requset_handler(REQUEST_HANDLER handler); + + + bool handle_messages(void); + + private: + + Websocket m_ws; + + char m_user[MAX_USERNAME]; + char m_pass[MAX_PASSWORD]; + char m_deviceid[MAX_DEVICEID]; + char m_dev_description[MAX_DEV_DESCRIPTION]; + char m_dev_name[MAX_DEV_NAME]; + + REQUEST_HANDLER m_func_get_request; + REQUEST_HANDLER m_func_set_request; +// bool (*m_func_set_handler)(dx_props *props); + + bool dx_user_auth_request(); + bool dx_device_set_response( dx_props *props, const char* mesid); + bool dx_device_get_response( dx_props *props, const char* mesid); + bool dx_error_response( const char* mesid); + + +}; + + +#endif