++C

أولاً اتبع التعليمات لتجميع وتثبيت LiteSync من الكود المصدري أو استخدم الملفات الثنائية المجمعة مسبقاً لمنصتك. يمكنك البدء بالنسخة المجانية.


مثال على الكود
#include <sqlite_modern_cpp.h>
#include <thread>
#include <chrono>
#include <iostream>

using namespace sqlite;

int main() {
  try {
    // open the database
    database db("file:app.db?node=secondary&connect=tcp://server:port");

    // wait until the database is ready
    while(1) {
      string status;
      db << "pragma sync_status" >> status;
      std::cout << "status : " << status << std::endl;
      if (status.find("\"db_is_ready\": true") != string::npos) break;
      std::this_thread::sleep_for(std::chrono::seconds(1));
    }

    // now we can use the db connection
    ...
  }
  catch (std::exception& e) {
    std::cerr << e.what() << std::endl;
  }
}


إشعار التحديث

يمكن إشعار تطبيقك عندما يتم تحديث قاعدة البيانات المحلية نتيجة للتزامن مع العقد البعيدة. يتم الإشعار عبر دالة يحددها المستخدم.

db.define("update_notification", [](std::string changes) {
  std::cout << "update received: " << changes << std::endl;
});


إشعار المعاملات

يمكن إشعار تطبيقك عندما تتم مزامنة المعاملات المحلية مع العقد البعيدة. يتم الإشعار عبر دالة يحددها المستخدم. إذا كانت القيمة في وسيط `result` ليست "OK" فإنها تحتوي على رسالة الخطأ.

db.define("transaction_notification", [](std::string sql, std::string result) {
  std::cout << "Transaction synchronized (" << result << "): " << sql << std::endl;
});


حالة التزامن

يمكن لتطبيقك التحقق من حالة تزامن قاعدة البيانات المحلية مع العقد البعيدة.

std::string status;
db << "pragma sync_status" >> status;
std::cout << "sync status: " << status << std::endl;


تنبيه: يتم استدعاء دوال الإشعار بواسطة مؤشر العامل. يجب على التطبيق عدم استخدام اتصال قاعدة البيانات داخل دوال الإشعار ويجب أن يعود بأسرع وقت ممكن! يمكن للتطبيق نقل الإشعار إلى المؤشر الرئيسي قبل العودة.




البناء

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