C++

Сначала следуйте инструкциям по компиляции и установке LiteSync из исходного кода или используйте предварительно скомпилированные бинарные файлы для вашей платформы. Вы можете начать с бесплатной версии.


Пример кода
#include <sqlite_modern_cpp.h>
#include <thread>
#include <chrono>
#include <iostream>

using namespace sqlite;

int main() {
  try {
    // открываем базу данных
    database db("file:app.db?node=secondary&connect=tcp://server:port");

    // ждем, пока база данных будет готова
    while(1) {
      string status;
      db << "pragma sync_status" >> status;
      std::cout << "статус : " << status << std::endl;
      if (status.find("\"db_is_ready\": true") != string::npos) break;
      std::this_thread::sleep_for(std::chrono::seconds(1));
    }

    // теперь мы можем использовать соединение с БД
    ...
  }
  catch (std::exception& e) {
    std::cerr << e.what() << std::endl;
  }
}


Уведомление об обновлении

Ваше приложение может получать уведомления, когда локальная база данных обновляется в результате синхронизации с удаленными узлами. Уведомление осуществляется через пользовательскую функцию.

db.define("update_notification", [](std::string changes) {
  std::cout << "получено обновление: " << changes << std::endl;
});


Уведомление о транзакции

Ваше приложение может получать уведомления, когда локальные транзакции синхронизируются с удаленными узлами. Уведомление осуществляется через пользовательскую функцию. Если значение в аргументе `result` не "OK", то оно содержит сообщение об ошибке.

db.define("transaction_notification", [](std::string sql, std::string result) {
  std::cout << "Транзакция синхронизирована (" << result << "): " << sql << std::endl;
});


Статус синхронизации

Ваше приложение может проверять статус синхронизации локальной базы данных с удаленными узлами.

std::string status;
db << "pragma sync_status" >> status;
std::cout << "статус синхронизации: " << status << std::endl;


ВНИМАНИЕ: Функции уведомления вызываются рабочим потоком. Приложение НЕ ДОЛЖНО использовать соединение с базой данных внутри функций уведомления, и оно должно возвращать управление как можно быстрее! Приложение может передать уведомление в основной поток перед возвратом.




Сборка

g++ -o app app.cpp -std=c++14 -llitesync