Package io.objectbox.sync
Class SyncClientImpl
- java.lang.Object
-
- io.objectbox.sync.SyncClientImpl
-
- All Implemented Interfaces:
SyncClient,java.io.Closeable,java.lang.AutoCloseable
@Internal public final class SyncClientImpl extends java.lang.Object implements SyncClient
Internal sync client implementation. UseSyncClientto access functionality, this class may change without notice.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private classSyncClientImpl.InternalSyncClientListenerMethods on this class must match those expected by JNI implementation.static classSyncClientImpl.ObjectsMessageBuilderImpl
-
Field Summary
Fields Modifier and Type Field Description private BoxStoreboxStoreprivate SyncCompletedListenercompletedListenerprivate SyncConnectionListenerconnectionListenerprivate ConnectivityMonitorconnectivityMonitorprivate longhandleprivate SyncClientImpl.InternalSyncClientListenerinternalListenerprivate longlastLoginCodeprivate SyncLoginListenerloginListenerprivate java.lang.StringserverUrlprivate booleanstartedprivate SyncTimeListenertimeListener
-
Constructor Summary
Constructors Constructor Description SyncClientImpl(SyncBuilder builder)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description booleanawaitFirstLogin(long millisToWait)Waits until the sync client receives a response to its first (connection and) login attempt or until the given time has expired.booleancancelUpdates()Asks the server to pause sync updates.voidclose()Closes and cleans up all resources used by this sync client.protected voidfinalize()Users of this class should explicitly callclose()instead to avoid expensive finalization.private longgetHandle()longgetLastLoginCode()Response code of last login attempt.longgetRoundtripTimeNanos()Returns the estimated roundtrip time in nanoseconds to the server and back.longgetServerTimeDiffNanos()Returns the estimated difference in nanoseconds between the server time and the local timestamp.longgetServerTimeNanos()Estimates the current server timestamp in nanoseconds based on the last known server time.java.lang.StringgetServerUrl()Gets the sync server URL this client is connected to.SyncStategetSyncState()Gets the current state of this sync client.booleanisLoggedIn()Flag indicating if the sync client was started.booleanisStarted()Flag indicating if the sync client was started.private voidnativeAddLoginCredentials(long handle, long credentialsType, byte[] credentials, boolean complete)private voidnativeAddLoginCredentialsUserPassword(long handle, long credentialsType, java.lang.String username, java.lang.String password, boolean complete)private booleannativeCancelUpdates(long handle)(Optional) Pause sync updates.private static longnativeCreate(long storeHandle, java.lang.String uri, java.lang.String[] certificateDirsOrPaths)Creates a native sync client for the given store handle ready to connect to the server at the given URI.private voidnativeDelete(long handle)private intnativeGetState(long handle)Returns the currentSyncStatevalue.private voidnativeObjectsMessageAddBytes(long builderHandle, long optionalId, byte[] bytes, boolean isFlatBuffer)private voidnativeObjectsMessageAddString(long builderHandle, long optionalId, java.lang.String string)private booleannativeObjectsMessageSend(long syncClientHandle, long builderHandle)Do not usebuilderHandleafterwards.private longnativeObjectsMessageStart(long flags, java.lang.String topic)Returns a handle to the message builder.private booleannativeRequestFullSync(long handle, boolean subscribeForPushes)private booleannativeRequestUpdates(long handle, boolean subscribeForPushes)private longnativeRoundtripTime(long handle)private longnativeServerTime(long handle)The current server timestamp approximation based on the last server time we've received and local steady clock.private longnativeServerTimeDiff(long handle)Returns the difference between the current local timestamp and the current server timestamp approximation as given by nativeServerTime().private voidnativeSetListener(long handle, SyncClientImpl.InternalSyncClientListener listener)private voidnativeSetLoginInfo(long handle, long credentialsType, byte[] credentials)private voidnativeSetLoginInfoUserPassword(long handle, long credentialsType, java.lang.String username, java.lang.String password)private voidnativeSetRequestUpdatesMode(long handle, boolean autoRequestUpdates, boolean subscribeForPushes)private voidnativeSetSyncChangesListener(long handle, SyncChangeListener advancedListener)private voidnativeSetUncommittedAcks(long handle, boolean uncommittedAcks)private voidnativeStart(long handle)private voidnativeStop(long handle)private booleannativeTriggerReconnect(long handle)Hints to the native client that an active network connection is available.voidnotifyConnectionAvailable()Lets the sync client know that a working network connection is available.booleanrequestFullSync()Temporary only, try not to use it.booleanrequestFullSyncAndUpdates()Temporary only, try not to use it.booleanrequestUpdates()Asks the sync server to resume sync updates.booleanrequestUpdatesOnce()Asks the server to send sync updates until this sync client is up-to-date, then pauses sync updates again.voidsetLoginCredentials(SyncCredentials credentials)Updates the login credentials.voidsetLoginCredentials(SyncCredentials[] multipleCredentials)Updates the login credentials.voidsetSyncChangeListener(SyncChangeListener changesListener)Sets aSyncChangeListener.voidsetSyncCompletedListener(SyncCompletedListener listener)Sets a listener to observe Sync completed events.voidsetSyncConnectionListener(SyncConnectionListener listener)Sets a listener to observe Sync connection events.voidsetSyncListener(SyncListener listener)Sets a listener to observe all Sync events.voidsetSyncLoginListener(SyncLoginListener listener)Sets a listener to observe login events.voidsetSyncTimeListener(SyncTimeListener timeListener)Sets aSyncTimeListener.voidstart()Starts the client.ObjectsMessageBuilderstartObjectsMessage(long flags, java.lang.String topic)Experimental.voidstop()Stops the client.
-
-
-
Field Detail
-
boxStore
@Nullable private BoxStore boxStore
-
serverUrl
private final java.lang.String serverUrl
-
internalListener
private final SyncClientImpl.InternalSyncClientListener internalListener
-
connectivityMonitor
@Nullable private final ConnectivityMonitor connectivityMonitor
-
handle
private volatile long handle
-
loginListener
@Nullable private volatile SyncLoginListener loginListener
-
completedListener
@Nullable private volatile SyncCompletedListener completedListener
-
connectionListener
@Nullable private volatile SyncConnectionListener connectionListener
-
timeListener
@Nullable private volatile SyncTimeListener timeListener
-
lastLoginCode
private volatile long lastLoginCode
-
started
private volatile boolean started
-
-
Constructor Detail
-
SyncClientImpl
SyncClientImpl(SyncBuilder builder)
-
-
Method Detail
-
getHandle
private long getHandle()
-
getServerUrl
public java.lang.String getServerUrl()
Description copied from interface:SyncClientGets the sync server URL this client is connected to.- Specified by:
getServerUrlin interfaceSyncClient
-
getLastLoginCode
public long getLastLoginCode()
Description copied from interface:SyncClientResponse code of last login attempt. One ofSyncLoginCodes.- Specified by:
getLastLoginCodein interfaceSyncClient
-
isLoggedIn
public boolean isLoggedIn()
Description copied from interface:SyncClientFlag indicating if the sync client was started. Logged in clients can sync with the sync destination to exchange data.- Specified by:
isLoggedInin interfaceSyncClient
-
getServerTimeNanos
public long getServerTimeNanos()
Description copied from interface:SyncClientEstimates the current server timestamp in nanoseconds based on the last known server time.- Specified by:
getServerTimeNanosin interfaceSyncClient- Returns:
- unix timestamp in nanoseconds (since epoch); or 0 if there has not been a server contact yet and thus the server's time is unknown
-
getServerTimeDiffNanos
public long getServerTimeDiffNanos()
Description copied from interface:SyncClientReturns the estimated difference in nanoseconds between the server time and the local timestamp. urns the difference in nanoseconds between the current local time of this client Equivalent to calculatingSyncClient.getServerTimeNanos()- "current time" (nanos since epoch), except for when the server time is unknown, then the result is zero.- Specified by:
getServerTimeDiffNanosin interfaceSyncClient- Returns:
- time difference in nanoseconds; e.g. positive if server time is ahead of local time; or 0 if there has not been a server contact yet and thus the server's time is unknown
-
getRoundtripTimeNanos
public long getRoundtripTimeNanos()
Description copied from interface:SyncClientReturns the estimated roundtrip time in nanoseconds to the server and back. This is measured during login.- Specified by:
getRoundtripTimeNanosin interfaceSyncClient- Returns:
- roundtrip time in nanoseconds; or 0 if there has not been a server contact yet and thus the roundtrip time could not be estimated
-
getSyncState
public SyncState getSyncState()
Gets the current state of this sync client. Throws ifclose()was called.
-
setSyncLoginListener
public void setSyncLoginListener(@Nullable SyncLoginListener listener)Description copied from interface:SyncClientSets a listener to observe login events. Replaces a previously set listener. Set tonullto remove the listener.- Specified by:
setSyncLoginListenerin interfaceSyncClient
-
setSyncCompletedListener
public void setSyncCompletedListener(@Nullable SyncCompletedListener listener)Description copied from interface:SyncClientSets a listener to observe Sync completed events. Replaces a previously set listener. Set tonullto remove the listener.- Specified by:
setSyncCompletedListenerin interfaceSyncClient
-
setSyncChangeListener
public void setSyncChangeListener(@Nullable SyncChangeListener changesListener)Description copied from interface:SyncClientSets aSyncChangeListener. Replaces a previously set listener. Set tonullto remove the listener.- Specified by:
setSyncChangeListenerin interfaceSyncClient
-
setSyncTimeListener
public void setSyncTimeListener(@Nullable SyncTimeListener timeListener)Description copied from interface:SyncClientSets aSyncTimeListener. Replaces a previously set listener. Set tonullto remove the listener.- Specified by:
setSyncTimeListenerin interfaceSyncClient
-
setSyncConnectionListener
public void setSyncConnectionListener(@Nullable SyncConnectionListener listener)Description copied from interface:SyncClientSets a listener to observe Sync connection events. Replaces a previously set listener. Set tonullto remove the listener.- Specified by:
setSyncConnectionListenerin interfaceSyncClient
-
setSyncListener
public void setSyncListener(@Nullable SyncListener listener)Description copied from interface:SyncClientSets a listener to observe all Sync events. Replaces all other previously set listeners, except aSyncChangeListener. Set tonullto remove the listener.- Specified by:
setSyncListenerin interfaceSyncClient
-
setLoginCredentials
public void setLoginCredentials(SyncCredentials credentials)
Description copied from interface:SyncClientUpdates the login credentials. This should not be required during regular use. The original credentials were passed when building sync client.- Specified by:
setLoginCredentialsin interfaceSyncClient
-
setLoginCredentials
public void setLoginCredentials(SyncCredentials[] multipleCredentials)
Description copied from interface:SyncClientUpdates the login credentials. This should not be required during regular use. It allows passing login credentials that the client can use to authenticate with the server.- Specified by:
setLoginCredentialsin interfaceSyncClient
-
awaitFirstLogin
public boolean awaitFirstLogin(long millisToWait)
Description copied from interface:SyncClientWaits until the sync client receives a response to its first (connection and) login attempt or until the given time has expired. UseSyncClient.isLoggedIn()orSyncClient.getLastLoginCode()afterwards to determine if login was successful. Starts the sync if it is not already.- Specified by:
awaitFirstLoginin interfaceSyncClient- Returns:
- true if a response was received in the given time window.
-
start
public void start()
Description copied from interface:SyncClientStarts the client. It will connect to the server, log in (authenticate) and start syncing.- Specified by:
startin interfaceSyncClient
-
isStarted
public boolean isStarted()
Description copied from interface:SyncClientFlag indicating if the sync client was started. Started clients try to connect, login, and sync with the sync destination.- Specified by:
isStartedin interfaceSyncClient
-
stop
public void stop()
Description copied from interface:SyncClientStops the client. Does nothing if the sync client is already stopped.- Specified by:
stopin interfaceSyncClient
-
close
public void close()
Description copied from interface:SyncClientCloses and cleans up all resources used by this sync client. It can no longer be used afterwards, build a new sync client instead. Does nothing if this sync client has already been closed.- Specified by:
closein interfacejava.lang.AutoCloseable- Specified by:
closein interfacejava.io.Closeable- Specified by:
closein interfaceSyncClient
-
finalize
protected void finalize() throws java.lang.ThrowableUsers of this class should explicitly callclose()instead to avoid expensive finalization.- Overrides:
finalizein classjava.lang.Object- Throws:
java.lang.Throwable
-
requestFullSync
@Experimental public boolean requestFullSync()
Temporary only, try not to use it.- Specified by:
requestFullSyncin interfaceSyncClient- Returns:
- 'true' if the request was likely sent (e.g. the sync client is in "logged in" state) or 'false' if the request was not sent (and will not be sent in the future).
-
requestFullSyncAndUpdates
@Experimental public boolean requestFullSyncAndUpdates()
Temporary only, try not to use it.
-
requestUpdates
public boolean requestUpdates()
Description copied from interface:SyncClientAsks the sync server to resume sync updates. This is useful if sync updates were turned off withrequestUpdatesMode(MANUAL).- Specified by:
requestUpdatesin interfaceSyncClient- Returns:
- 'true' if the request was likely sent (e.g. the sync client is in "logged in" state) or 'false' if the request was not sent (and will not be sent in the future)
- See Also:
SyncClient.cancelUpdates()
-
requestUpdatesOnce
public boolean requestUpdatesOnce()
Description copied from interface:SyncClientAsks the server to send sync updates until this sync client is up-to-date, then pauses sync updates again. This is useful if sync updates were turned off withrequestUpdatesMode(MANUAL).- Specified by:
requestUpdatesOncein interfaceSyncClient- Returns:
- 'true' if the request was likely sent (e.g. the sync client is in "logged in" state) or 'false' if the request was not sent (and will not be sent in the future)
-
cancelUpdates
public boolean cancelUpdates()
Description copied from interface:SyncClientAsks the server to pause sync updates.- Specified by:
cancelUpdatesin interfaceSyncClient- Returns:
- 'true' if the request was likely sent (e.g. the sync client is in "logged in" state) or 'false' if the request was not sent (and will not be sent in the future)
- See Also:
SyncClient.requestUpdates()
-
notifyConnectionAvailable
public void notifyConnectionAvailable()
Description copied from interface:SyncClientLets the sync client know that a working network connection is available.This can help speed up reconnecting to the sync server.
- Specified by:
notifyConnectionAvailablein interfaceSyncClient
-
startObjectsMessage
public ObjectsMessageBuilder startObjectsMessage(long flags, @Nullable java.lang.String topic)
Description copied from interface:SyncClientExperimental. This API might change or be removed in the future.Start building a message of Objects with optional flags (set to 0) and topic (set to null).
Use like
syncClient.startObjectsMessage(0, "some-topic") .addString(1, "Hello!") .addBytes(2, "Hello!".getBytes(StandardCharsets.UTF_8), false) .send();- Specified by:
startObjectsMessagein interfaceSyncClient
-
nativeCreate
private static long nativeCreate(long storeHandle, java.lang.String uri, @Nullable java.lang.String[] certificateDirsOrPaths)Creates a native sync client for the given store handle ready to connect to the server at the given URI. Uses certificate authorities trusted by the host if no trusted certificate paths are passed.
-
nativeDelete
private void nativeDelete(long handle)
-
nativeStart
private void nativeStart(long handle)
-
nativeStop
private void nativeStop(long handle)
-
nativeSetLoginInfo
private void nativeSetLoginInfo(long handle, long credentialsType, @Nullable byte[] credentials)
-
nativeSetLoginInfoUserPassword
private void nativeSetLoginInfoUserPassword(long handle, long credentialsType, java.lang.String username, java.lang.String password)
-
nativeAddLoginCredentials
private void nativeAddLoginCredentials(long handle, long credentialsType, @Nullable byte[] credentials, boolean complete)
-
nativeAddLoginCredentialsUserPassword
private void nativeAddLoginCredentialsUserPassword(long handle, long credentialsType, java.lang.String username, java.lang.String password, boolean complete)
-
nativeSetListener
private void nativeSetListener(long handle, @Nullable SyncClientImpl.InternalSyncClientListener listener)
-
nativeSetSyncChangesListener
private void nativeSetSyncChangesListener(long handle, @Nullable SyncChangeListener advancedListener)
-
nativeSetRequestUpdatesMode
private void nativeSetRequestUpdatesMode(long handle, boolean autoRequestUpdates, boolean subscribeForPushes)- Parameters:
subscribeForPushes- Pass true to automatically receive updates for future changes.
-
nativeSetUncommittedAcks
private void nativeSetUncommittedAcks(long handle, boolean uncommittedAcks)- Parameters:
uncommittedAcks- Default is false.
-
nativeGetState
private int nativeGetState(long handle)
Returns the currentSyncStatevalue.
-
nativeRequestUpdates
private boolean nativeRequestUpdates(long handle, boolean subscribeForPushes)- Parameters:
subscribeForPushes- Pass true to automatically receive updates for future changes.
-
nativeRequestFullSync
private boolean nativeRequestFullSync(long handle, boolean subscribeForPushes)- Parameters:
subscribeForPushes- Pass true to automatically receive updates for future changes.
-
nativeCancelUpdates
private boolean nativeCancelUpdates(long handle)
(Optional) Pause sync updates.
-
nativeTriggerReconnect
private boolean nativeTriggerReconnect(long handle)
Hints to the native client that an active network connection is available. Returns true if the native client was disconnected (and will try to re-connect).
-
nativeServerTime
private long nativeServerTime(long handle)
The current server timestamp approximation based on the last server time we've received and local steady clock.- Returns:
- unix timestamp in nanoseconds
-
nativeServerTimeDiff
private long nativeServerTimeDiff(long handle)
Returns the difference between the current local timestamp and the current server timestamp approximation as given by nativeServerTime(). Equivalent to calculating: nanosSinceEpoch - nativeServerTime().- Returns:
- unix timestamp difference in nanoseconds
-
nativeRoundtripTime
private long nativeRoundtripTime(long handle)
-
nativeObjectsMessageStart
private long nativeObjectsMessageStart(long flags, @Nullable java.lang.String topic)Returns a handle to the message builder.
-
nativeObjectsMessageAddString
private void nativeObjectsMessageAddString(long builderHandle, long optionalId, java.lang.String string)- See Also:
nativeObjectsMessageSend(long, long)
-
nativeObjectsMessageAddBytes
private void nativeObjectsMessageAddBytes(long builderHandle, long optionalId, byte[] bytes, boolean isFlatBuffer)- See Also:
nativeObjectsMessageSend(long, long)
-
nativeObjectsMessageSend
private boolean nativeObjectsMessageSend(long syncClientHandle, long builderHandle)Do not usebuilderHandleafterwards.
-
-