C
أولاً اتبع التعليمات لترجمة وتثبيت LiteSync من الكود المصدري أو استخدم الملفات الثنائية المترجمة مسبقاً لمنصتك. يمكنك البدء بالنسخة المجانية.
مثال على الكود
وحدة litesync لديها نفس واجهة برمجة التطبيقات (API) مثل مكتبة SQLite3
#include <sqlite3.h>
char *uri = "file:app.db?node=secondary&connect=tcp://server:port";
int main() {
sqlite3 *db;
sqlite3_open(uri, &db); /* فتح قاعدة البيانات */
/* التحقق من جاهزية قاعدة البيانات */
while(1){
char *json_str = sqlite3_query_value_str(db, "PRAGMA sync_status", NULL);
bool db_is_ready = strstr(json_str, "\"db_is_ready\": true") > 0;
sqlite3_free(json_str);
if (db_is_ready) break;
sleep_ms(250);
}
/* الآن يمكننا استخدام اتصال قاعدة البيانات */
...
}
char * sqlite3_query_value_str(sqlite3 *db, char *sql, char **ppErrMsg) {
char *ptr = NULL;
sqlite3_stmt *stmt;
int rc;
if (ppErrMsg) *ppErrMsg = NULL;
rc = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL);
if (rc != SQLITE_OK) {
if (ppErrMsg) *ppErrMsg = sqlite3_strdup(sqlite3_errmsg(db));
return NULL;
}
if (sqlite3_step(stmt) == SQLITE_ROW) {
char *text = (char *)sqlite3_column_text(stmt, 0);
if (text) {
ptr = sqlite3_strdup(text);
}
}
sqlite3_finalize(stmt);
return ptr;
}
إشعار التحديث
يمكن إشعار تطبيقك عندما يتم تحديث قاعدة البيانات المحلية نتيجة للتزامن مع العقد البعيدة. يتم الإشعار عبر دالة يحددها المستخدم.
static void on_db_update(sqlite3_context *context, int argc, sqlite3_value **argv){
char* changes = sqlite3_value_text(argv[0]);
printf("تم استلام التحديث: %s\n", changes);
}
sqlite3_create_function(db, "update_notification", 1, SQLITE_UTF8, NULL, &on_db_update, NULL, NULL);
إشعار المعاملات
يمكن إشعار تطبيقك عندما تتم مزامنة المعاملات المحلية مع العقد البعيدة. يتم الإشعار عبر دالة يحددها المستخدم. إذا كانت القيمة في وسيط `result` ليست "OK" فإنها تحتوي على رسالة الخطأ.
static void on_transaction_sync(sqlite3_context *context, int argc, sqlite3_value **argv){
char* sql = sqlite3_value_text(argv[0]);
char* result = sqlite3_value_text(argv[1]);
printf("تمت مزامنة المعاملة (%s): %s\n", result, sql);
}
sqlite3_create_function(db, "transaction_notification", 2, SQLITE_UTF8, NULL, &on_transaction_sync, NULL, NULL);
حالة المزامنة
يمكن لتطبيقك التحقق من حالة مزامنة قاعدة البيانات المحلية مع العقد البعيدة.
char *json_str = sqlite3_query_value_str(db, "PRAGMA sync_status", NULL);
printf("حالة المزامنة: %s\n", json_str);
sqlite3_free(json_str);
تنبيه: يتم استدعاء دوال الإشعار بواسطة مؤشر العامل. يجب على التطبيق عدم استخدام اتصال قاعدة البيانات داخل دوال الإشعار ويجب أن يعود بأسرع وقت ممكن! يمكن للتطبيق نقل الإشعار إلى المؤشر الرئيسي قبل العودة.
البناء
gcc -o app app.c -llitesync