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. UseSyncClient
to access functionality, this class may change without notice.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
SyncClientImpl.ObjectsMessageBuilderImpl
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
awaitFirstLogin(long millisToWait)
Waits until the sync client receives a response to its first (connection and) login attempt or until the given time has expired.boolean
cancelUpdates()
Asks the server to pause sync updates.void
close()
Closes and cleans up all resources used by this sync client.protected void
finalize()
Users of this class should explicitly callclose()
instead to avoid expensive finalization.long
getLastLoginCode()
Response code of last login attempt.long
getRoundtripTimeNanos()
Returns the estimated roundtrip time in nanoseconds to the server and back.long
getServerTimeDiffNanos()
Returns the estimated difference in nanoseconds between the server time and the local timestamp.long
getServerTimeNanos()
Estimates the current server timestamp in nanoseconds based on the last known server time.java.lang.String
getServerUrl()
Gets the sync server URL this client is connected to.SyncState
getSyncState()
Gets the current state of this sync client.boolean
isLoggedIn()
Flag indicating if the sync client was started.boolean
isStarted()
Flag indicating if the sync client was started.void
notifyConnectionAvailable()
Lets the sync client know that a working network connection is available.boolean
requestFullSync()
Temporary only, try not to use it.boolean
requestFullSyncAndUpdates()
Temporary only, try not to use it.boolean
requestUpdates()
Asks the sync server to resume sync updates.boolean
requestUpdatesOnce()
Asks the server to send sync updates until this sync client is up-to-date, then pauses sync updates again.void
setLoginCredentials(SyncCredentials credentials)
Updates the login credentials.void
setSyncChangeListener(SyncChangeListener changesListener)
Sets aSyncChangeListener
.void
setSyncCompletedListener(SyncCompletedListener listener)
Sets a listener to observe Sync completed events.void
setSyncConnectionListener(SyncConnectionListener listener)
Sets a listener to observe Sync connection events.void
setSyncListener(SyncListener listener)
Sets a listener to observe all Sync events.void
setSyncLoginListener(SyncLoginListener listener)
Sets a listener to observe login events.void
setSyncTimeListener(SyncTimeListener timeListener)
Sets aSyncTimeListener
.void
start()
Starts the client.ObjectsMessageBuilder
startObjectsMessage(long flags, java.lang.String topic)
Experimental.void
stop()
Stops the client.
-
-
-
Method Detail
-
getServerUrl
public java.lang.String getServerUrl()
Description copied from interface:SyncClient
Gets the sync server URL this client is connected to.- Specified by:
getServerUrl
in interfaceSyncClient
-
getLastLoginCode
public long getLastLoginCode()
Description copied from interface:SyncClient
Response code of last login attempt. One ofSyncLoginCodes
.- Specified by:
getLastLoginCode
in interfaceSyncClient
-
isLoggedIn
public boolean isLoggedIn()
Description copied from interface:SyncClient
Flag indicating if the sync client was started. Logged in clients can sync with the sync destination to exchange data.- Specified by:
isLoggedIn
in interfaceSyncClient
-
getServerTimeNanos
public long getServerTimeNanos()
Description copied from interface:SyncClient
Estimates the current server timestamp in nanoseconds based on the last known server time.- Specified by:
getServerTimeNanos
in 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:SyncClient
Returns 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:
getServerTimeDiffNanos
in 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:SyncClient
Returns the estimated roundtrip time in nanoseconds to the server and back. This is measured during login.- Specified by:
getRoundtripTimeNanos
in 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:SyncClient
Sets a listener to observe login events. Replaces a previously set listener. Set tonull
to remove the listener.- Specified by:
setSyncLoginListener
in interfaceSyncClient
-
setSyncCompletedListener
public void setSyncCompletedListener(@Nullable SyncCompletedListener listener)
Description copied from interface:SyncClient
Sets a listener to observe Sync completed events. Replaces a previously set listener. Set tonull
to remove the listener.- Specified by:
setSyncCompletedListener
in interfaceSyncClient
-
setSyncChangeListener
public void setSyncChangeListener(@Nullable SyncChangeListener changesListener)
Description copied from interface:SyncClient
Sets aSyncChangeListener
. Replaces a previously set listener. Set tonull
to remove the listener.- Specified by:
setSyncChangeListener
in interfaceSyncClient
-
setSyncTimeListener
public void setSyncTimeListener(@Nullable SyncTimeListener timeListener)
Description copied from interface:SyncClient
Sets aSyncTimeListener
. Replaces a previously set listener. Set tonull
to remove the listener.- Specified by:
setSyncTimeListener
in interfaceSyncClient
-
setSyncConnectionListener
public void setSyncConnectionListener(@Nullable SyncConnectionListener listener)
Description copied from interface:SyncClient
Sets a listener to observe Sync connection events. Replaces a previously set listener. Set tonull
to remove the listener.- Specified by:
setSyncConnectionListener
in interfaceSyncClient
-
setSyncListener
public void setSyncListener(@Nullable SyncListener listener)
Description copied from interface:SyncClient
Sets a listener to observe all Sync events. Replaces all other previously set listeners, except aSyncChangeListener
. Set tonull
to remove the listener.- Specified by:
setSyncListener
in interfaceSyncClient
-
setLoginCredentials
public void setLoginCredentials(SyncCredentials credentials)
Description copied from interface:SyncClient
Updates the login credentials. This should not be required during regular use. The original credentials were passed when building sync client.- Specified by:
setLoginCredentials
in interfaceSyncClient
-
awaitFirstLogin
public boolean awaitFirstLogin(long millisToWait)
Description copied from interface:SyncClient
Waits 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:
awaitFirstLogin
in interfaceSyncClient
- Returns:
- true if a response was received in the given time window.
-
start
public void start()
Description copied from interface:SyncClient
Starts the client. It will connect to the server, log in (authenticate) and start syncing.- Specified by:
start
in interfaceSyncClient
-
isStarted
public boolean isStarted()
Description copied from interface:SyncClient
Flag indicating if the sync client was started. Started clients try to connect, login, and sync with the sync destination.- Specified by:
isStarted
in interfaceSyncClient
-
stop
public void stop()
Description copied from interface:SyncClient
Stops the client. Does nothing if the sync client is already stopped.- Specified by:
stop
in interfaceSyncClient
-
close
public void close()
Description copied from interface:SyncClient
Closes 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:
close
in interfacejava.lang.AutoCloseable
- Specified by:
close
in interfacejava.io.Closeable
- Specified by:
close
in interfaceSyncClient
-
finalize
protected void finalize() throws java.lang.Throwable
Users of this class should explicitly callclose()
instead to avoid expensive finalization.- Overrides:
finalize
in classjava.lang.Object
- Throws:
java.lang.Throwable
-
requestFullSync
@Experimental public boolean requestFullSync()
Temporary only, try not to use it.- Specified by:
requestFullSync
in 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:SyncClient
Asks the sync server to resume sync updates. This is useful if sync updates were turned off withrequestUpdatesMode(MANUAL)
.- Specified by:
requestUpdates
in 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:SyncClient
Asks 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:
requestUpdatesOnce
in 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:SyncClient
Asks the server to pause sync updates.- Specified by:
cancelUpdates
in 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:SyncClient
Lets the sync client know that a working network connection is available.This can help speed up reconnecting to the sync server.
- Specified by:
notifyConnectionAvailable
in interfaceSyncClient
-
startObjectsMessage
public ObjectsMessageBuilder startObjectsMessage(long flags, @Nullable java.lang.String topic)
Description copied from interface:SyncClient
Experimental. 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:
startObjectsMessage
in interfaceSyncClient
-
-