#ifndef cwUI_H #define cwUI_H #include "cwUiDecls.h" namespace cw { namespace ui { typedef handle handle_t; enum { kHttpProtocolId = 1, kUiProtocolId = 2 }; typedef enum { kInvalidOpId, kConnectOpId, kInitOpId, kValueOpId, kEchoOpId, kIdleOpId, kDisconnectOpId } opId_t; typedef enum { kInvalidTId, kBoolTId, kIntTId, kUIntTId, kFloatTId, kDoubleTId, kStringTId } dtypeId_t; enum { kRootUuId = 0, kRootAppId, }; typedef struct { dtypeId_t tid; union { bool b; int i; unsigned u; float f; double d; const char* s; } u; } value_t; typedef struct appIdMap_str { unsigned parentAppId; unsigned appId; const char* eleName; } appIdMap_t; typedef rc_t (*uiCallback_t)( void* cbArg, unsigned wsSessId, opId_t opId, unsigned parentAppId, unsigned uuId, unsigned appId, const value_t* value ); typedef rc_t (*sendCallback_t)( void* cbArg, unsigned wsSessId, const void* msg, unsigned msgByteN ); rc_t create( handle_t& h, sendCallback_t sendCbFunc, void* sendCbArg, uiCallback_t uiCbFunc, void* uiCbArg, const appIdMap_t* appIdMapA = nullptr, unsigned appIdMapN = 0, unsigned fmtBufByteN = 4096 ); rc_t destroy( handle_t& h ); unsigned sessionIdCount(handle_t h); const unsigned* sessionIdArray(handle_t h); rc_t onConnect( handle_t h, unsigned wsSessId ); rc_t onDisconnect( handle_t h, unsigned wsSessId ); rc_t onReceive( handle_t h, unsigned wsSessId, const void* msg, unsigned byteN ); unsigned findElementAppId( handle_t h, unsigned parentUuId, const char* eleName ); unsigned findElementUuId( handle_t h, unsigned parentUuId, const char* eleName ); unsigned findElementUuId( handle_t h, unsigned parentUuId, unsigned appId ); const char* findElementName( handle_t h, unsigned uuId ); unsigned findElementAppId( handle_t h, unsigned uuId ); // Return the uuid of the first matching 'eleName'. unsigned findElementUuId( handle_t h, const char* eleName ); rc_t createFromObject( handle_t h, const object_t* o, unsigned wsSessId, unsigned parentUuId=kInvalidId, const char* eleName=nullptr); rc_t createFromFile( handle_t h, const char* fn, unsigned wsSessId, unsigned parentUuId=kInvalidId); rc_t createFromText( handle_t h, const char* text, unsigned wsSessId, unsigned parentUuId=kInvalidId); rc_t createDiv( handle_t h, unsigned& uuIdRef, unsigned wsSessId, unsigned parentUuId, const char* eleName, unsigned appId, const char* clas, const char* title ); rc_t createTitle( handle_t h, unsigned& uuIdRef, unsigned wsSessId, unsigned parentUuId, const char* eleName, unsigned appId, const char* clas, const char* title ); rc_t createButton( handle_t h, unsigned& uuIdRef, unsigned wsSessId, unsigned parentUuId, const char* eleName, unsigned appId, const char* clas, const char* title ); rc_t createCheck( handle_t h, unsigned& uuIdRef, unsigned wsSessId, unsigned parentUuId, const char* eleName, unsigned appId, const char* clas, const char* title, bool value ); rc_t createSelect( handle_t h, unsigned& uuIdRef, unsigned wsSessId, unsigned parentUuId, const char* eleName, unsigned appId, const char* clas, const char* title ); rc_t createOption( handle_t h, unsigned& uuIdRef, unsigned wsSessId, unsigned parentUuId, const char* eleName, unsigned appId, const char* clas, const char* title ); rc_t createString( handle_t h, unsigned& uuIdRef, unsigned wsSessId, unsigned parentUuId, const char* eleName, unsigned appId, const char* clas, const char* title, const char* value ); rc_t createNumber( handle_t h, unsigned& uuIdRef, unsigned wsSessId, unsigned parentUuId, const char* eleName, unsigned appId, const char* clas, const char* title, double value, unsigned decPl ); rc_t createNumber( handle_t h, unsigned& uuIdRef, unsigned wsSessId, unsigned parentUuId, const char* eleName, unsigned appId, const char* clas, const char* title, double value, double minValue, double maxValue, double stepValue, unsigned decPl ); rc_t createProgress( handle_t h, unsigned& uuIdRef, unsigned wsSessId, unsigned parentUuId, const char* eleName, unsigned appId, const char* clas, const char* title, double value, double minValue, double maxValue ); rc_t createText( handle_t h, unsigned& uuIdRef, unsigned wsSessId, unsigned parentUuId, const char* eleName, unsigned appId, const char* clas, const char* title ); // Register parent/child/name app id's rc_t registerAppIdMap( handle_t h, const appIdMap_t* map, unsigned mapN ); rc_t sendValueBool( handle_t h, unsigned wsSessId, unsigned uuId, bool value ); rc_t sendValueInt( handle_t h, unsigned wsSessId, unsigned uuId, int value ); rc_t sendValueUInt( handle_t h, unsigned wsSessId, unsigned uuId, unsigned value ); rc_t sendValueFloat( handle_t h, unsigned wsSessId, unsigned uuId, float value ); rc_t sendValueDouble( handle_t h, unsigned wsSessId, unsigned uuId, double value ); rc_t sendValueString( handle_t h, unsigned wsSessId, unsigned uuId, const char* value ); namespace ws { typedef handle handle_t; rc_t create( handle_t& h, unsigned port, const char* physRootDir, void* cbArg, uiCallback_t uiCbFunc, const appIdMap_t* appIdMapA = nullptr, unsigned appIdMapN = 0, websock::cbFunc_t wsCbFunc = nullptr, const char* dfltPageFn = "index.html", unsigned websockTimeOutMs = 50, unsigned rcvBufByteN = 1024, unsigned xmtBufByteN = 1024, unsigned fmtBufByteN = 4096 ); rc_t destroy( handle_t& h ); // This function should be called periodically to send and receive // queued messages to and from the websocket. rc_t exec( handle_t h, unsigned timeOutMs ); // This function executes the internal default websock callback function. // It is useful if the user provides a custom websock callback function // and wants to fallback to the default websock->ui interaction. rc_t onReceive( handle_t h, unsigned protocolId, unsigned sessionId, websock::msgTypeId_t msg_type, const void* msg, unsigned byteN ); websock::handle_t websockHandle( handle_t h ); ui::handle_t uiHandle( handle_t h ); } namespace srv { typedef struct args_str { const char* physRootDir; const char* dfltHtmlPageFn; unsigned port; unsigned timeOutMs; unsigned recvBufByteN; unsigned xmitBufByteN; unsigned fmtBufByteN; } args_t; typedef handle handle_t; rc_t create( handle_t& h, const args_t& args, void* cbArg, uiCallback_t uiCbFunc, const appIdMap_t* appIdMapA = nullptr, unsigned appIdMapN = 0, websock::cbFunc_t wsCbFunc = nullptr ); rc_t create( handle_t& h, unsigned port, const char* physRootDir, void* cbArg, uiCallback_t uiCbFunc, const appIdMap_t* appIdMapA = nullptr, unsigned appIdMapN = 0, websock::cbFunc_t wsCbFunc = nullptr, const char* dfltPageFn = "index.html", unsigned websockTimeOutMs = 50, unsigned rcvBufByteN = 1024, unsigned xmtBufByteN = 1024, unsigned fmtBufByteN = 4096 ); rc_t destroy( handle_t& h ); rc_t start( handle_t h ); rc_t stop( handle_t h ); thread::handle_t threadHandle( handle_t h ); websock::handle_t websockHandle( handle_t h ); ui::handle_t uiHandle( handle_t h ); } } } #endif