rho::String js_barcode1_enumerate(const rho::String& strID, CJSONArrayIterator& oParams) { CMethodResult oRes; if ( !oParams.isEnd() ) { oRes.setError("Barcode1::enumerate - wrong number of arguments"); return oRes.toJSON(); } CBarcode1::enumerate(oRes); rho::Vector<rho::String>& arIDs = oRes.getStringArray(); for( int i = 0; i < arIDs.size(); i++ ) { if ( !CBarcode1::getBarcodes().containsKey(arIDs[i]) ) { IBarcode1* pObj = CBarcode1::create(arIDs[i]); CBarcode1::getBarcodes().put(arIDs[i], pObj ); } } return oRes.toJSON(); }
rho::String js_barcode1_getProps(const rho::String& strID, CJSONArrayIterator& oParams) { //If method has call_in_ui_thread attribute, then call method in UI thread if no return value or callback present //If method has call_in_thread attribute, then call method in separate thread if no return value or callback present //If method calles with callback, then call method in separate thread boolean bCallInUIThread = false; boolean bCallInThread = false; rho::String strObjID = strID; if ( strObjID.length() == 0 ) strObjID = CBarcode1::getDefaultID(); IBarcode1* pObj = CBarcode1::getBarcodes()[strObjID]; CMethodResult oRes; if ( oParams.isEnd() ) { pObj->getProps(oRes); return oRes.toJSON(); } CJSONEntry oParam1 = oParams.getCurItem(); oParams.next(); if ( oParams.isEnd() ) { if ( oParam1.isNull() ) { pObj->getProps(oRes); }else if ( oParam1.isString() ) { pObj->getProps(oParam1.getString(), oRes); }else if ( oParam1.isArray() ) { rho::Vector<rho::String> ar; CJSONArrayIterator arParam(oParam1); for( ; !arParam.isEnd(); arParam.next() ) { ar.addElement( arParam.getCurItem().getString() ); } pObj->getProps(ar, oRes ); }else { oRes.setArgError("Type error: argument 1 should be String or Array"); //see SWIG Ruby_Format_TypeError } }else { CJSONEntry oParam2 = oParams.getCurItem(); oRes.setCallInUIThread(bCallInUIThread); oRes.setJSCallback( oParam2.getString() ); oParams.next(); if ( !oParams.isEnd() ) { CJSONEntry oParam3 = oParams.getCurItem(); if ( !oParam3.isString() ) { oRes.setArgError("Type error: argument 3 should be String"); //see SWIG Ruby_Format_TypeError return oRes.toJSON(); } oRes.setCallbackParam( oParam3.getString() ); } rho::common::IRhoRunnable* pFunctor = 0; if ( oParam1.isNull() ) { pFunctor = new rho::common::CInstanceClassFunctor1<IBarcode1*, void (IBarcode1::*)(CMethodResult&), CMethodResult> ( pObj, &IBarcode1::getProps, oRes ); }else if ( oParam1.isString() ) { oRes.setStringParam( oParam1.getString() ); pFunctor = new rho::common::CInstanceClassFunctor2<IBarcode1*, void (IBarcode1::*)(const rho::String&, CMethodResult&), rho::String, CMethodResult> ( pObj, &IBarcode1::getProps, oParam1.getString(), oRes ); }else if ( oParam1.isArray() ) { rho::Vector<rho::String> ar; CJSONArrayIterator arParam(oParam1); for( ; !arParam.isEnd(); arParam.next() ) { ar.addElement( arParam.getCurItem().getString() ); } pFunctor = new rho::common::CInstanceClassFunctor2<IBarcode1*, void (IBarcode1::*)(const rho::Vector<rho::String>&, CMethodResult&), rho::Vector<rho::String>, CMethodResult> ( pObj, &IBarcode1::getProps, ar, oRes ); }else { oRes.setArgError("Type error: argument 1 should be String or Array"); //see SWIG Ruby_Format_TypeError return oRes.toJSON(); } if ( bCallInUIThread ) rho_wm_impl_performOnUiThread( pFunctor ); else //call in separate thread CBarcode1::addCommandToQueue( pFunctor ); } return oRes.toJSON(); }
void CSyncSource::processServerResponse_ver3(CJSONArrayIterator& oJsonArr) { PROF_START("Data1"); int nVersion = 0; if ( !oJsonArr.isEnd() && oJsonArr.getCurItem().hasName("version") ) { nVersion = oJsonArr.getCurItem().getInt("version"); oJsonArr.next(); } if ( nVersion != getProtocol().getVersion() ) { LOG(ERROR) + "Sync server send data with incompatible version. Client version: " + convertToStringA(getProtocol().getVersion()) + "; Server response version: " + convertToStringA(nVersion) + ". Source name: " + getName(); getSync().stopSync(); m_nErrCode = RhoAppAdapter.ERR_SYNCVERSION; return; } if ( !oJsonArr.isEnd() && oJsonArr.getCurItem().hasName("token")) { processToken(oJsonArr.getCurItem().getUInt64("token")); oJsonArr.next(); } if ( !oJsonArr.isEnd() && oJsonArr.getCurItem().hasName("source") ) { //skip it. it uses in search only oJsonArr.next(); } if ( !oJsonArr.isEnd() && oJsonArr.getCurItem().hasName("count") ) { setCurPageCount(oJsonArr.getCurItem().getInt("count")); oJsonArr.next(); } if ( !oJsonArr.isEnd() && oJsonArr.getCurItem().hasName("refresh_time") ) { setRefreshTime(oJsonArr.getCurItem().getInt("refresh_time")); oJsonArr.next(); } if ( !oJsonArr.isEnd() && oJsonArr.getCurItem().hasName("progress_count") ) { //TODO: progress_count //setTotalCount(oJsonArr.getCurItem().getInt("progress_count")); oJsonArr.next(); } if ( !oJsonArr.isEnd() && oJsonArr.getCurItem().hasName("total_count") ) { setTotalCount(oJsonArr.getCurItem().getInt("total_count")); oJsonArr.next(); } //if ( getServerObjectsCount() == 0 ) // getNotify().fireSyncNotification(this, false, RhoAppAdapter.ERR_NONE, ""); if ( getToken() == 0 ) { //oo conflicts getDB().executeSQL("DELETE FROM changed_values where source_id=? and sent>=3", getID() ); // } LOG(INFO) + "Got " + getCurPageCount() + "(Processed: " + getServerObjectsCount() + ") records of " + getTotalCount() + " from server. Source: " + getName() + ". Version: " + nVersion; PROF_STOP("Data1"); if ( !oJsonArr.isEnd() && getSync().isContinueSync() ) { CJSONEntry oCmds = oJsonArr.getCurItem(); PROF_START("Data"); //TODO: use isUIWaitDB inside processSyncCommand // if ( getDB().isUIWaitDB() ) // { // LOG(INFO) + "Commit transaction because of UI request."; // getDB().endTransaction(); // getDB().startTransaction(); // } if ( oCmds.hasName("schema-changed") ) { getSync().setSchemaChanged(true); }else if ( oCmds.hasName("source-error") ) { CJSONEntry errSrc = oCmds.getEntry("source-error"); CJSONStructIterator errIter(errSrc); for( ; !errIter.isEnd(); errIter.next() ) { m_nErrCode = RhoAppAdapter.ERR_CUSTOMSYNCSERVER; m_strError = errIter.getCurValue().getString("message"); m_strErrorType = errIter.getCurKey(); } }else if ( oCmds.hasName("search-error") ) { CJSONEntry errSrc = oCmds.getEntry("search-error"); CJSONStructIterator errIter(errSrc); for( ; !errIter.isEnd(); errIter.next() ) { m_nErrCode = RhoAppAdapter.ERR_CUSTOMSYNCSERVER; m_strError = errIter.getCurValue().getString("message"); m_strErrorType = errIter.getCurKey(); } }else if ( oCmds.hasName("create-error") ) { m_nErrCode = RhoAppAdapter.ERR_CUSTOMSYNCSERVER; m_strErrorType = "create-error"; }else if ( oCmds.hasName("update-error") ) { m_nErrCode = RhoAppAdapter.ERR_CUSTOMSYNCSERVER; m_strErrorType = "update-error"; }else if ( oCmds.hasName("delete-error") ) { m_nErrCode = RhoAppAdapter.ERR_CUSTOMSYNCSERVER; m_strErrorType = "delete-error"; }else { getDB().startTransaction(); if (getSync().getSourceOptions().getBoolProperty(getID(), "pass_through")) { if ( m_bSchemaSource ) getDB().executeSQL( (String("DELETE FROM ") + getName()).c_str() ); else getDB().executeSQL("DELETE FROM object_values WHERE source_id=?", getID() ); } if ( oCmds.hasName("metadata") && getSync().isContinueSync() ) { String strMetadata = oCmds.getString("metadata"); getDB().executeSQL("UPDATE sources SET metadata=? WHERE source_id=?", strMetadata, getID() ); } if ( oCmds.hasName("links") && getSync().isContinueSync() ) processSyncCommand("links", oCmds.getEntry("links") ); if ( oCmds.hasName("delete") && getSync().isContinueSync() ) processSyncCommand("delete", oCmds.getEntry("delete") ); if ( oCmds.hasName("insert") && getSync().isContinueSync() ) processSyncCommand("insert", oCmds.getEntry("insert") ); PROF_STOP("Data"); PROF_START("DB"); getDB().endTransaction(); PROF_STOP("DB"); getNotify().fireObjectsNotification(); } } PROF_START("Data1"); if ( getCurPageCount() > 0 ) getNotify().fireSyncNotification(this, false, RhoAppAdapter.ERR_NONE, ""); PROF_STOP("Data1"); }