You can implement SyncNow for message-based synchronization applications for Windows or Windows Mobile using the Sybase.Persistence.CallbackHandler. The onConnectionStatus methods provide the implementation.
A sample SyncNow method looks like:
public void SyncNow()
{
int connStatus = Sybase.Persistence.MessagingClient.ConnectionStatus;
int MAX_WAIT_TIME_OUT = 300; // 5 minutes
int timeout = 0;
while (connStatus != DeviceConnectionStatus.CONNECTED)
{
timeout++;
Thread.Sleep(1000);
if (timeout >= MAX_WAIT_TIME_OUT)
{
throw new Sybase.Persistence.PersistenceException("Waiting timeout: " + MAX_WAIT_TIME_OUT + " seconds");
}
connStatus = Sybase.Persistence.MessagingClient.ConnectionStatus;
}
if (!DsTestDB.IsSubscribed())
{
DsTestDB.LoginToSync("test", "test123");
DsTestDB.Subscribe();
}
DsTestDB.BeginSynchronize();
int MAX_SYNC_TIMEOUT = 3600; // one hour ?
timeout = 0;
while (!TestMain.syncFinished)
{
timeout++;
Thread.Sleep(1000);
if (timeout >= MAX_SYNC_TIMEOUT)
{
throw new Sybase.Persistence.PersistenceException("Waiting SYNC timeout: " + MAX_SYNC_TIMEOUT + "seconds");
}
}
}
public class TextResponseHandler : DefaultCallbackHandler
{
public override void OnConnectionStatusChange(int connStatus, int connType, int errorCode, string errorMessage)
{
Console.WriteLine("Device Connection status changed to : " + connStatus);
if (errorMessage != null && errorMessage.Length > 0)
{
Console.WriteLine("Connection error: " + errorMessage);
}
}
public override SynchronizationAction OnSynchronize(Sybase.Collections.GenericList<ISynchronizationGroup> groups, Sybase.Persistence.SynchronizationContext context)
{
Console.WriteLine("synchronize request processed returned. ");
SynchronizationStatus status = context.Status;
if (status == SynchronizationStatus.FINISHING)
{
Console.WriteLine("synchronizeResult");
}
else if (status == SynchronizationStatus.ERROR)
{
Console.WriteLine("synchronizeFailed");
}
lock (typeof(TestMain))
{
TestMain.syncFinished = true;
}
return SynchronizationAction.CONTINUE;
}
......
}
public override void OnConnectionStatusChange(int connStatus, int connType, int errorCode, string errorMessage)
{
Console.WriteLine("Device Connection status changed to : " + connStatus);
if (errorMessage != null && errorMessage.Length > 0)
{
Console.WriteLine("Connection error: " + errorMessage);
}
}