void CSyncSource::syncClientChanges() { const char* arUpdateTypes[] = {"create", "update", "delete"}; for( int i = 0; i < 3 && getSync().isContinueSync(); i++ ) { String strUrl = getUrl() + "/" + arUpdateTypes[i]; strUrl += "objects"; String strQuery = CSyncEngine::SYNC_SOURCE_FORMAT() + "&client_id=" + getSync().getClientID(); m_arSyncBlobs.removeAllElements(); String strBody; makePushBody(strBody, arUpdateTypes[i]); if ( strBody.length() > 0 ) { LOG(INFO) + "Push client changes to server. Source: " + getName() + "Size :" + strBody.length(); LOG(TRACE) + "Push body: " + strBody; NetResponse( resp, getNet().pushData(strUrl+strQuery,strBody, &getSync()) ); if ( !resp.isOK() ) { getSync().setState(CSyncEngine::esStop); m_nErrCode = RhoRuby.ERR_REMOTESERVER; continue; } } if ( m_arSyncBlobs.size() > 0 ) { LOG(INFO) + "Push blobs to server. Source: " + getName() + "Count :" + m_arSyncBlobs.size(); //oo conflicts if ( i < 1 ) //create getDB().executeSQL("UPDATE changed_values SET sent=2 WHERE source_id=? and update_type=? and (attrib_type IS NULL or attrib_type!=?) and sent=1", getID(), arUpdateTypes[i], "blob.file" ); else // getDB().executeSQL("DELETE FROM changed_values WHERE source_id=? and update_type=? and (attrib_type IS NULL or attrib_type!=? and sent=1)", getID(), arUpdateTypes[i], "blob.file" ); syncClientBlobs(strUrl+strQuery); }else if ( strBody.length() > 0 ) { //oo conflicts if ( i < 1 ) //create getDB().executeSQL("UPDATE changed_values SET sent=2 WHERE source_id=? and update_type=? and sent=1", getID(), arUpdateTypes[i] ); else // getDB().executeSQL("DELETE FROM changed_values WHERE source_id=? and update_type=? and sent=1", getID(), arUpdateTypes[i] ); } } }
void CSyncSource::syncServerChanges() { LOG(INFO) + "Sync server changes source ID :" + getID(); while( getSync().isContinueSync() ) { setCurPageCount(0); String strUrl = getProtocol().getServerQueryUrl(""); String strQuery = getProtocol().getServerQueryBody(getName(), getSync().getClientID(), getSync().getSyncPageSize()); if ( !m_bTokenFromDB && getToken() > 1 ) strQuery += "&token=" + convertToStringA(getToken()); LOG(INFO) + "Pull changes from server. Url: " + (strUrl+strQuery); PROF_START("Net"); NetResponse(resp,getNet().pullData(strUrl+strQuery, &getSync())); PROF_STOP("Net"); if ( !resp.isOK() ) { getSync().stopSync(); m_nErrCode = RhoAppAdapter.getErrorFromResponse(resp); m_strError = resp.getCharData(); continue; } const char* szData = resp.getCharData(); //const char* szData = "[{\"version\":3},{\"token\":\"\"},{\"count\":0},{\"progress_count\":28},{\"total_count\":28},{\"source-error\":{\"login-error\":{\"message\":\"s currently connected from another machine\"}}}]"; //const char* szData = "[{\"version\":3},{\"token\":\"\"},{\"count\":0},{\"progress_count\":0},{\"total_count\":0},{\"create-error\":{\"0_broken_object_id\":{\"name\":\"wrongname\",\"an_attribute\":\"error create\"},\"0_broken_object_id-error\":{\"message\":\"error create\"}}}]"; //const char* szData = "[{\"version\":3},{\"token\":\"35639160294387\"},{\"count\":3},{\"progress_count\":0},{\"total_count\":3},{\"metadata\":\"{\\\"foo\\\":\\\"bar\\\"}\",\"insert\":{\"1\":{\"price\":\"199.99\",\"brand\":\"Apple\",\"name\":\"iPhone\"}}}]"; //LOG(INFO) + szData; PROF_START("Parse"); CJSONArrayIterator oJsonArr(szData); PROF_STOP("Parse"); processServerResponse_ver3(oJsonArr); if (getSync().getSourceOptions().getBoolProperty(getID(), "pass_through")) processToken(0); if ( getToken() == 0 ) break; } if ( getSync().isSchemaChanged() ) getSync().stopSync(); }
void CSyncSource::syncServerChanges() { LOG(INFO) + "Sync server changes source ID :" + getID(); while( getSync().isContinueSync() ) { setCurPageCount(0); String strUrl = getUrl(); if ( m_strAction.length() > 0 ) strUrl = CFilePath::join( strUrl, m_strAction); String strQuery = getSync().SYNC_SOURCE_FORMAT() + "&client_id=" + getSync().getClientID() + "&p_size=" + getSync().SYNC_PAGE_SIZE() + "&version=" + convertToStringA(getSync().SYNC_VERSION()); if ( m_strParams.length() > 0 ) strQuery += m_strParams; if( m_strUrlParams.length() > 0 ) strQuery += "&" + m_strUrlParams; if ( getAskParams().length() > 0 ) { strUrl += getSync().SYNC_ASK_ACTION(); strQuery += "&question=" + getAskParams(); } if ( !m_bTokenFromDB && getToken() > 1 ) strQuery += "&ack_token=" + convertToStringA(getToken()); LOG(INFO) + "Pull changes from server. Url: " + (strUrl+strQuery); PROF_START("Net"); NetResponse(resp,getNet().pullData(strUrl+strQuery, &getSync())); PROF_STOP("Net"); if ( !resp.isOK() ) { getSync().stopSync(); if (resp.isResponseRecieved()) m_nErrCode = RhoRuby.ERR_REMOTESERVER; else m_nErrCode = RhoRuby.ERR_NETWORK; continue; } processServerData(resp.getCharData()); //String strData = //"[{count:10},{version:1},{total_count: 5425},{token: 123},{s:\"RhoDeleteSource\",ol:[{o:\"rho_del_obj\",av:[{i:55550425},{i:75665819},{i:338165272},{i:402396629},{i:521753981},{i:664143530},{i:678116186},{i:831092394},{i:956041217},{i:970452458}]}]}]"; /*"[{count: 124},{version: 1},{total_count: 5425},{token: 123}," "{s:\"Product\",ol:[" "{oo:\"123\",o:\"2ed2e0c7-8c4c-99c6-1b37-498d250bb8e7\",av:[" "{a:\"first_name\",i:47354289,v:\"Lars. \n\n Burgess\", t:\"blob\"}," "{a:\"second_name\",i:55555,v:\"Burgess\"}]}," "{oo:\"456\", e:\"Something went wrong creating this record on the backend: code 7\"}" "]}]"; */ /*"[{count: 1},{version: 1},{total_count: 1},{token: 123}," "{s:\"Product\",ol:[" "{oo:\"94\", e:\"Something went wrong creating this record on the backend: code 7\"}" "]}]";*/ /*"[{count: 1},{version: 1},{total_count: 1},{token: 123}," "{s:\"Product\",ol:[" "{o:\"94\", av:[" "{a:\"TEST\",i:55555,v:\"Geny\"}]}," "]}]"; //u:\"query\", processServerData(strData.c_str()); */ if ( getAskParams().length() > 0 || getCurPageCount() == 0 ) break; } }