Agora Java API Reference for Android
NGIAgoraSyncClient.h
1 // Copyright (c) 2020 Agora.io. All rights reserved
2 
3 // This program is confidential and proprietary to Agora.io.
4 // And may not be copied, reproduced, modified, disclosed to others, published
5 // or used, in whole or in part, without the express prior written permission
6 // of Agora.io.
7 
8 #pragma once // NOLINT(build/header_guard)
9 #include "AgoraRefPtr.h"
10 #include "AgoraBase.h"
11 #include <functional>
12 #include <api/aosl_ref.h>
13 
14 namespace agora {
15 namespace base {
16 
17 enum SyncClientError {
18  kOk = 0,
19  kFail = -1,
20  kConnectSyncFailed = -2,
21  kConnectDatabaseFailed = -3,
22  kDisconnectDatabaseFailed = -4,
23  kDatabaseNotConnected = -5,
24  kCreateCollectionFailed = -6,
25  kCollectionNotCreated = -7,
26  kCollectionExisted = -8,
27  kInvalidParams = -9,
28  kNotLoggedIn = -10,
29  kQueryDocFailed = -11,
30  kDocNotCreated = -12,
31 };
32 
33 typedef void(*syncClientCallback)(SyncClientError, void*);
34 typedef void(*dataBaseOpCallback)(SyncClientError, const char*, void*);
35 typedef void(*collectionOpCallback)(SyncClientError, const char*, const char*, void*);
36 typedef void(*queryDocCallback)(SyncClientError error, const char* resultJson, size_t count, bool more, void* userData);
37 
38 enum SyncEventType {
39  kInserted = 0,
40  kPut = 1,
41  kDeleted = 2,
42 
43  kToBeInserted = 3,
44  kToBePut = 4,
45  kToBeDeleted = 5,
46 
47  kTransactionBegin = 6,
48  kTransactionEnd = 7,
49  kDocSyncEnd = 8,
50 };
51 
56  public:
57  struct CollectionEvent {
58  SyncEventType type;
59  const char* path;
60  const char* value;
61  };
62  virtual void onCollectionEvent(const char* previousJson, const char* curJson, const char* collection, const char* docName,
63  const CollectionEvent* events, int eventSize) = 0;
64  virtual void onDatabaseEvent(const char* databaseName, SyncClientError error) = 0;
65  virtual void onDataException(const char* databaseName, const char* collectionName) = 0;
66  virtual ~ISyncClientObserver() {};
67 };
68 
72 struct SyncConfig {
73  const char* appId;
74  /* shakehand interval in seconds, 0 means enable manual shake hand */
75  uint32_t shakehand_interval;
76  /* connection timeout in seconds */
77  uint32_t connection_timeout;
78  /* compact interval in seconds */
79  uint32_t compact_interval;
80  SyncConfig() : shakehand_interval(1), connection_timeout(10), compact_interval(3600 * 1000) {}
81 };
82 
84 protected:
85  virtual ~ISyncClient() {}
86 public:
87 
88  virtual int32_t registerSyncClientObserver(ISyncClientObserver* observer, void(*safeDeleter)(ISyncClientObserver*) = OPTIONAL_NULLPTR, aosl_ref_t ares = AOSL_REF_INVALID) = 0;
89  virtual int32_t unregisterSyncClientObserver(ISyncClientObserver* observer) = 0;
90  // client operations
91  virtual int32_t login(const char* token, const char* channelName, user_id_t userId, syncClientCallback callback, void* userData, aosl_ref_t ares = AOSL_REF_INVALID) = 0;
92  virtual int32_t queryDoc(const char* database, const char* coll, const char* range_start, const char* range_end, int64_t limits, bool doc_only, bool count_only, queryDocCallback callback, void* userData, aosl_ref_t ares = AOSL_REF_INVALID) = 0;
93  virtual int32_t logout(aosl_ref_t ares = AOSL_REF_INVALID) = 0;
94  virtual int32_t renewToken(const char* token, aosl_ref_t ares = AOSL_REF_INVALID) = 0;
95 
96  // database operations
97  virtual int32_t connectDatabase(const char* database, dataBaseOpCallback callback, void* userData, aosl_ref_t ares = AOSL_REF_INVALID) = 0;
98  virtual int32_t disconnectDatabase(const char* database,
99  dataBaseOpCallback callback, void* userData, aosl_ref_t ares = AOSL_REF_INVALID) = 0;
100  virtual int32_t createCollection(const char* database, const char* collection,
101  const char** readable, int readSize,
102  collectionOpCallback callback, void* userData, aosl_ref_t ares = AOSL_REF_INVALID) = 0;
103  virtual int32_t deleteCollection(const char* database, const char* collection,
104  collectionOpCallback callback, void* userData, aosl_ref_t ares = AOSL_REF_INVALID) = 0;
105 
106  // collection operations
107  virtual int32_t subscribe(const char* database, const char* collection,
108  util::AString& snapshotJson) = 0;
109  virtual int32_t unsubscribe(const char* database, const char* collection, aosl_ref_t ares = AOSL_REF_INVALID) = 0;
110  virtual int32_t putDoc(const char* database, const char* collection,
111  const char* docName, aosl_ref_t ares = AOSL_REF_INVALID) = 0;
112  virtual int32_t deleteDoc(const char* database, const char* collection,
113  const char* docName, aosl_ref_t ares = AOSL_REF_INVALID) = 0;
114  virtual int32_t getDocs(const char* database, const char* collection,
115  util::AString* docNames, uint32_t docSize) = 0;
116 
117  // document operations
118  virtual int32_t putDocValue(const char* database, const char* collection,
119  const char* docName, const char* jsonValue, aosl_ref_t ares = AOSL_REF_INVALID) = 0;
120  virtual int32_t updateDocValue(const char* database, const char* collection,
121  const char* docName, const char* path,
122  const char* jsonValue, aosl_ref_t ares = AOSL_REF_INVALID) = 0;
123  virtual int32_t deleteDocValue(const char* database, const char* collection,
124  const char* docName, const char* path, aosl_ref_t ares = AOSL_REF_INVALID) = 0;
125  virtual int32_t deleteDocValues(const char* database, const char* collection, const char* docName,
126  const char** path, uint32_t pathSize,
127  aosl_ref_t ares = AOSL_REF_INVALID) = 0;
128  virtual int32_t getDocValue(const char* database, const char* collection,
129  const char* docName, util::AString& jsonValue) = 0;
130  virtual int32_t hasPath(const char* database, const char* collection,
131  const char* docName, const char* path, bool& result) = 0;
132  virtual int32_t keepAliveDoc(const char* database, const char* collection,
133  const char* docName, uint32_t ttl, aosl_ref_t ares = AOSL_REF_INVALID) = 0;
134 
135  // sync operations
136  virtual int32_t shakehand(aosl_ref_t ares = AOSL_REF_INVALID) = 0;
137 };
138 }// namespace base
139 }// namespace agora
agora::base::ISyncClientObserver
Definition: NGIAgoraSyncClient.h:55
agora::base::SyncConfig
Definition: NGIAgoraSyncClient.h:72
agora::base::ISyncClientObserver::CollectionEvent
Definition: NGIAgoraSyncClient.h:57
agora::RefCountInterface
Definition: AgoraRefPtr.h:31
agora::util::CopyableAutoPtr
Definition: AgoraBase.h:156
agora::base::ISyncClient
Definition: NGIAgoraSyncClient.h:83