From ceac40d058a8554638aa3fa39d4697f3fbfe62f8 Mon Sep 17 00:00:00 2001 From: Roy Date: Sun, 24 Dec 2017 02:26:55 +0200 Subject: Implemented android external bridge service. Implemented external bridge authentication. Implemented machine connection view in machine studio. Modified Transport layer on android to Tango result. --- .../integration/IMachineIdentityProvider.java | 15 --- .../tango/integration/MachineIdentityProvider.java | 15 --- .../integration/operators/IMachineOperator.java | 9 ++ .../integration/operators/MachineOperator.java | 9 ++ .../providers/IMachineIdentityProvider.java | 15 +++ .../providers/MachineIdentityProvider.java | 15 +++ .../services/ExternalBridgeService.java | 137 +++++++++++++++++++++ .../services/IExternalBridgeService.java | 53 ++++++++ .../services/ISynchronizationService.java | 19 +++ .../services/SynchronizationService.java | 90 ++++++++++++++ .../tango/stubs/ui/dagger/ApplicationModule.java | 30 ----- .../tango/stubs/ui/dagger/EventBusModule.java | 24 ---- .../tango/stubs/ui/dagger/NavigationModule.java | 20 --- .../tango/stubs/ui/dagger/NotificationModule.java | 27 ---- .../tango/stubs/ui/dagger/ServicesModule.java | 8 -- .../tango/stubs/ui/dagger/TransportModule.java | 25 ---- .../tango/synchronization/ITangoSynchronizer.java | 17 --- .../tango/synchronization/TangoSynchronizer.java | 71 ----------- 18 files changed, 347 insertions(+), 252 deletions(-) delete mode 100644 Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/IMachineIdentityProvider.java delete mode 100644 Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/MachineIdentityProvider.java create mode 100644 Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/operators/IMachineOperator.java create mode 100644 Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/operators/MachineOperator.java create mode 100644 Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/providers/IMachineIdentityProvider.java create mode 100644 Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/providers/MachineIdentityProvider.java create mode 100644 Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/ExternalBridgeService.java create mode 100644 Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/IExternalBridgeService.java create mode 100644 Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/ISynchronizationService.java create mode 100644 Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/SynchronizationService.java delete mode 100644 Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/ApplicationModule.java delete mode 100644 Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/EventBusModule.java delete mode 100644 Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/NavigationModule.java delete mode 100644 Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/NotificationModule.java delete mode 100644 Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/ServicesModule.java delete mode 100644 Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/TransportModule.java delete mode 100644 Software/Android_Studio/Tango.Synchronization/src/main/java/com/twine/tango/synchronization/ITangoSynchronizer.java delete mode 100644 Software/Android_Studio/Tango.Synchronization/src/main/java/com/twine/tango/synchronization/TangoSynchronizer.java diff --git a/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/IMachineIdentityProvider.java b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/IMachineIdentityProvider.java deleted file mode 100644 index 3e35be9d0..000000000 --- a/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/IMachineIdentityProvider.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.twine.tango.integration; - - -/** - * Represents a Tabgo machine identity provider. - */ -public interface IMachineIdentityProvider -{ - /** - * Gets tango machine unique serial number. - * - * @return the serial number - */ - String getSerialNumber(); -} diff --git a/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/MachineIdentityProvider.java b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/MachineIdentityProvider.java deleted file mode 100644 index 29cb0c30c..000000000 --- a/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/MachineIdentityProvider.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.twine.tango.integration; - - -/** - * Represents the default machine identity provider implementation. - */ -public class MachineIdentityProvider implements IMachineIdentityProvider -{ - - @Override - public String getSerialNumber() - { - return "1234"; - } -} diff --git a/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/operators/IMachineOperator.java b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/operators/IMachineOperator.java new file mode 100644 index 000000000..7d69ce8ad --- /dev/null +++ b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/operators/IMachineOperator.java @@ -0,0 +1,9 @@ +package com.twine.tango.integration.operators; + +/** + * Created by Roy on 12/23/2017. + */ + +public interface IMachineOperator +{ +} diff --git a/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/operators/MachineOperator.java b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/operators/MachineOperator.java new file mode 100644 index 000000000..0eb73cab3 --- /dev/null +++ b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/operators/MachineOperator.java @@ -0,0 +1,9 @@ +package com.twine.tango.integration.operators; + +/** + * Created by Roy on 12/23/2017. + */ + +public class MachineOperator +{ +} diff --git a/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/providers/IMachineIdentityProvider.java b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/providers/IMachineIdentityProvider.java new file mode 100644 index 000000000..3e35be9d0 --- /dev/null +++ b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/providers/IMachineIdentityProvider.java @@ -0,0 +1,15 @@ +package com.twine.tango.integration; + + +/** + * Represents a Tabgo machine identity provider. + */ +public interface IMachineIdentityProvider +{ + /** + * Gets tango machine unique serial number. + * + * @return the serial number + */ + String getSerialNumber(); +} diff --git a/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/providers/MachineIdentityProvider.java b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/providers/MachineIdentityProvider.java new file mode 100644 index 000000000..29cb0c30c --- /dev/null +++ b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/providers/MachineIdentityProvider.java @@ -0,0 +1,15 @@ +package com.twine.tango.integration; + + +/** + * Represents the default machine identity provider implementation. + */ +public class MachineIdentityProvider implements IMachineIdentityProvider +{ + + @Override + public String getSerialNumber() + { + return "1234"; + } +} diff --git a/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/ExternalBridgeService.java b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/ExternalBridgeService.java new file mode 100644 index 000000000..f1702ee9e --- /dev/null +++ b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/ExternalBridgeService.java @@ -0,0 +1,137 @@ +package com.twine.tango.integration.services; + +import android.os.SystemClock; + +import com.elvishew.xlog.XLog; +import com.twine.tango.core.IEventHandler; +import com.twine.tango.pmr.MessageFactory; +import com.twine.tango.pmr.common.MessageContainerOuterClass.MessageContainer; +import com.twine.tango.pmr.common.MessageTypeOuterClass.MessageType; +import com.twine.tango.transport.adapters.TcpTransportAdapter; +import com.twine.tango.transport.transporters.ProtoTransporter; + +import java.io.IOException; +import java.net.ServerSocket; +import java.net.Socket; +import java.util.ArrayList; +import java.util.List; + +import static br.com.zbra.androidlinq.Linq.stream; + +/** + * Created by Roy on 12/22/2017. + */ + +public class TangoBridgeService extends ProtoTransporter implements ITangoBridgeService +{ + private ServerSocket listener; + private boolean isStarted; + private List handlers; + + public TangoBridgeService() + { + handlers = new ArrayList<>(); + } + + @Override + public boolean isStarted() + { + return isStarted; + } + + @Override + public void start() throws IOException + { + listener = new ServerSocket(1984); + Thread listenerThread = new Thread(this::listenerThreadMethod); + listenerThread.start(); + } + + @Override + public void stop() + { + isStarted = false; + try + { + listener.close(); + } catch (IOException e) + { + e.printStackTrace(); + } + } + + @Override + public void registerMessageHandler(IEventHandler> handler, MessageType messageType) + { + handlers.add(new HandlerAndType(handler, messageType)); + } + + @Override + public void unRegisterMessageHandler(IEventHandler> handler) + { + HandlerAndType h = stream(handlers).singleOrNull(x -> x.handler == handler); + if (h != null) + { + handlers.remove(h); + } + } + + private void listenerThreadMethod() + { + while (isStarted) + { + try + { + Socket newSocket = listener.accept(); + + if (newSocket != null) + { + getAdapters().clear(); + getAdapters().add(new TcpTransportAdapter(newSocket)); + connect(); + } + + } catch (IOException e) + { + + } + + SystemClock.sleep(100); + } + } + + @Override + protected void onRequestReceived(MessageContainer request) + { + super.onRequestReceived(request); + + try + { + Object message = MessageFactory.parseMessageFromContainerAgnostic(request); + + List receivers = stream(handlers).where((x) -> x.messageType == request.getType()).toList(); + + for (HandlerAndType receiver : receivers) + { + //noinspection unchecked + receiver.handler.invoke(this, message); + } + + } catch (Exception e) + { + XLog.e(e); + } + } + + private class HandlerAndType + { + IEventHandler handler; + MessageType messageType; + + public HandlerAndType(IEventHandler handler, MessageType messageType) + { + this.handler = handler; + this.messageType = messageType; + } + } +} diff --git a/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/IExternalBridgeService.java b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/IExternalBridgeService.java new file mode 100644 index 000000000..32abe3365 --- /dev/null +++ b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/IExternalBridgeService.java @@ -0,0 +1,53 @@ +package com.twine.tango.integration.services; + +import com.twine.tango.core.IEventHandler; +import com.twine.tango.pmr.common.MessageContainerOuterClass.MessageContainer; +import com.twine.tango.pmr.common.MessageTypeOuterClass.MessageType; +import com.twine.tango.transport.ITransporter; + +import java.io.IOException; + +/** + * Created by Roy on 12/22/2017. + */ + +public interface ITangoBridgeService extends ITransporter +{ + boolean isStarted(); + void start() throws IOException; + void stop(); + void registerMessageHandler(IEventHandler> handler, MessageType messageType); + void unRegisterMessageHandler(IEventHandler> handler); + + public class MessageReceivedArgs + { + private MessageContainer container; + private T message; + + public MessageReceivedArgs(MessageContainer container, T message) + { + this.container = container; + this.message = message; + } + + public MessageContainer getContainer() + { + return container; + } + + public void setContainer(MessageContainer container) + { + this.container = container; + } + + public T getMessage() + { + return message; + } + + public void setMessage(T message) + { + this.message = message; + } + } +} diff --git a/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/ISynchronizationService.java b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/ISynchronizationService.java new file mode 100644 index 000000000..631522fd0 --- /dev/null +++ b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/ISynchronizationService.java @@ -0,0 +1,19 @@ +package com.twine.tango.integration.services; + +import java.io.IOException; + +import io.reactivex.Completable; + + +/** + * Represents the Tango application local to remote synchronization engine. + */ +public interface ISynchronizationService +{ + /** + * Synchronizes the local database with the remote database through the remote machine service. + * + * @return the completable. + */ + Completable synchronizeDB(); +} diff --git a/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/SynchronizationService.java b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/SynchronizationService.java new file mode 100644 index 000000000..ed15c9b7b --- /dev/null +++ b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/SynchronizationService.java @@ -0,0 +1,90 @@ +package com.twine.tango.integration.services; + +import com.elvishew.xlog.XLog; +import com.google.protobuf.ByteString; +import com.snatik.storage.Storage; +import com.twine.tango.core.ContextHelper; +import com.twine.tango.dal.TangoDB; +import com.twine.tango.integration.providers.IMachineIdentityProvider; +import com.twine.tango.integration.services.IExternalBridgeService.MessageReceivedArgs; +import com.twine.tango.pmr.MessageFactory; +import com.twine.tango.pmr.TangoMessage; +import com.twine.tango.pmr.common.MessageTypeOuterClass.MessageType; +import com.twine.tango.pmr.stubs.CalculateRequestOuterClass.CalculateRequest; +import com.twine.tango.pmr.stubs.CalculateResponseOuterClass.CalculateResponse; +import com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequest; +import com.twine.tango.web.WebApiFactory; +import com.twine.tango.web.ISynchronizationAPI; + +import javax.inject.Inject; + +import io.reactivex.Completable; + + +/** + * Represents the Tango application local to remote synchronization engine. + */ +public class SynchronizationService implements ISynchronizationService +{ + private IMachineIdentityProvider machineIdentityProvider; + private IExternalBridgeService bridgeService; + + + /** + * Instantiates a new Tango synchronizer. + * + * @param machineIdentityProvider the machine identity provider + */ + @Inject + public SynchronizationService(IMachineIdentityProvider machineIdentityProvider, IExternalBridgeService bridgeService) + { + this.machineIdentityProvider = machineIdentityProvider; + this.bridgeService = bridgeService; + this.bridgeService.registerMessageHandler(this::handleCalculateRequest, MessageType.CalculateRequest); + } + + private void handleCalculateRequest(Object o, MessageReceivedArgs e) + { + CalculateResponse response = CalculateResponse.newBuilder().setSum(e.getMessage().getA() + e.getMessage().getB()).build(); + TangoMessage tangoMessage = MessageFactory.createTangoMessage(CalculateResponse.class, response, e.getContainer().getToken()); + bridgeService.sendResponse(tangoMessage); + } + + @Override + public Completable synchronizeDB() + { + return Completable.create((emitter) -> + { + + //Backup DataBase. + TangoDB.backup(); + + Storage storage = new Storage(ContextHelper.getApplicationContext()); + + //Read current DB file bytes. + byte[] data = storage.readFile(TangoDB.getDataBasePath()); + + //Create synchronization web api. + ISynchronizationAPI synchAPI = WebApiFactory.getSynchronizationAPI(); + + //Create synchronization response. + SynchronizeDBRequest request = SynchronizeDBRequest.newBuilder() + .setSerialNumber(machineIdentityProvider.getSerialNumber()) + .setLocalDB(ByteString.copyFrom(data)) + .build(); + + synchAPI.synchronize(request).singleOrError().subscribe((response) -> + { + + TangoDB.replace(response.getRemoteDB().toByteArray()); + emitter.onComplete(); + + }, (ex) -> + { + XLog.e(ex); + emitter.onError(ex); + }); + + }); + } +} diff --git a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/ApplicationModule.java b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/ApplicationModule.java deleted file mode 100644 index ce664f835..000000000 --- a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/ApplicationModule.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.twine.tango.stubs.ui.dagger; - -import android.app.Application; -import android.content.Context; - -import javax.inject.Singleton; - -import dagger.Module; -import dagger.Provides; - -/** - * Created by Roy on 11/6/2017. - */ - -@Module -public class ApplicationModule { - - private Application application; - - public ApplicationModule(Application application) { - this.application = application; - } - - @Provides - @Singleton - public Context provideContext() - { - return application; - } -} diff --git a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/EventBusModule.java b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/EventBusModule.java deleted file mode 100644 index 3aeb461f7..000000000 --- a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/EventBusModule.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.twine.tango.stubs.ui.dagger; - -import com.squareup.otto.Bus; -import com.squareup.otto.ThreadEnforcer; - -import javax.inject.Singleton; - -import dagger.Module; -import dagger.Provides; - -/** - * Created by Roy on 11/6/2017. - */ - -@Module -public class EventBusModule { - - @Provides - @Singleton - public Bus provideEventBus() - { - return new Bus(ThreadEnforcer.MAIN); - } -} diff --git a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/NavigationModule.java b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/NavigationModule.java deleted file mode 100644 index 674157858..000000000 --- a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/NavigationModule.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.twine.tango.stubs.ui.dagger; - -import android.content.Context; -import com.twine.tango.sharedui.navigation.AndroidNavigationProvider; -import com.twine.tango.sharedui.navigation.INavigationProvider; -import javax.inject.Singleton; - -import dagger.Module; -import dagger.Provides; - -@Module -public class NavigationModule -{ - @Provides - @Singleton - public INavigationProvider provideNavigation() - { - return new AndroidNavigationProvider(); - } -} diff --git a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/NotificationModule.java b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/NotificationModule.java deleted file mode 100644 index 69d6d8f62..000000000 --- a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/NotificationModule.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.twine.tango.stubs.ui.dagger; - -import android.content.Context; - -import com.twine.tango.sharedui.notifications.AndroidNotificationProvider; -import com.twine.tango.sharedui.notifications.INotificationProvider; - -import javax.inject.Singleton; - -import dagger.Module; -import dagger.Provides; - -/** - * Created by Roy on 11/6/2017. - */ - -@Module -public class NotificationModule { - - @Provides - @Singleton - public INotificationProvider provideNotificationProvider(Context context) - { - return new AndroidNotificationProvider(context); - } - -} diff --git a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/ServicesModule.java b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/ServicesModule.java deleted file mode 100644 index 2227cbf1e..000000000 --- a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/ServicesModule.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.twine.tango.stubs.ui.dagger; - -/** - * Created by Roy on 11/6/2017. - */ - -public class ServicesModule { -} diff --git a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/TransportModule.java b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/TransportModule.java deleted file mode 100644 index eaca13ecb..000000000 --- a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/TransportModule.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.twine.tango.stubs.ui.dagger; - -import com.twine.tango.transport.ITransportAdapter; -import com.twine.tango.transport.ITransporter; -import com.twine.tango.transport.adapters.TcpTransportAdapter; -import com.twine.tango.transport.transporters.ProtoTransporter; -import javax.inject.Singleton; -import dagger.Module; -import dagger.Provides; - -/** - * Created by Roy on 11/14/2017. - */ - -@Module -public class TransportModule -{ - - @Provides - @Singleton - public ITransporter provideTransporter() - { - return new ProtoTransporter(new TcpTransportAdapter("10.0.2.2", 9999)); - } -} diff --git a/Software/Android_Studio/Tango.Synchronization/src/main/java/com/twine/tango/synchronization/ITangoSynchronizer.java b/Software/Android_Studio/Tango.Synchronization/src/main/java/com/twine/tango/synchronization/ITangoSynchronizer.java deleted file mode 100644 index ef17439fd..000000000 --- a/Software/Android_Studio/Tango.Synchronization/src/main/java/com/twine/tango/synchronization/ITangoSynchronizer.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.twine.tango.synchronization; - -import io.reactivex.Completable; - - -/** - * Represents the Tango application local to remote synchronization engine. - */ -public interface ITangoSynchronizer -{ - /** - * Synchronizes the local database with the remote database through the remote machine service. - * - * @return the completable. - */ - Completable synchronizeDB(); -} diff --git a/Software/Android_Studio/Tango.Synchronization/src/main/java/com/twine/tango/synchronization/TangoSynchronizer.java b/Software/Android_Studio/Tango.Synchronization/src/main/java/com/twine/tango/synchronization/TangoSynchronizer.java deleted file mode 100644 index e0cb01ef1..000000000 --- a/Software/Android_Studio/Tango.Synchronization/src/main/java/com/twine/tango/synchronization/TangoSynchronizer.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.twine.tango.synchronization; - -import com.elvishew.xlog.XLog; -import com.google.protobuf.ByteString; -import com.snatik.storage.Storage; -import com.twine.tango.core.ContextHelper; -import com.twine.tango.dal.TangoDB; -import com.twine.tango.integration.IMachineIdentityProvider; -import com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequest; -import com.twine.tango.web.WebApiFactory; -import com.twine.tango.web.ISynchronizationAPI; - -import io.reactivex.Completable; - - -/** - * Represents the Tango application local to remote synchronization engine. - */ -public class TangoSynchronizer implements ITangoSynchronizer -{ - private IMachineIdentityProvider machineIdentityProvider; - - - /** - * Instantiates a new Tango synchronizer. - * - * @param machineIdentityProvider the machine identity provider - */ - public TangoSynchronizer(IMachineIdentityProvider machineIdentityProvider) - { - this.machineIdentityProvider = machineIdentityProvider; - } - - @Override - public Completable synchronizeDB() - { - return Completable.create((emitter) -> - { - - //Backup DataBase. - TangoDB.backup(); - - Storage storage = new Storage(ContextHelper.getApplicationContext()); - - //Read current DB file bytes. - byte[] data = storage.readFile(TangoDB.getDataBasePath()); - - //Create synchronization web api. - ISynchronizationAPI synchAPI = WebApiFactory.getSynchronizationAPI(); - - //Create synchronization response. - SynchronizeDBRequest request = SynchronizeDBRequest.newBuilder() - .setSerialNumber(machineIdentityProvider.getSerialNumber()) - .setLocalDB(ByteString.copyFrom(data)) - .build(); - - synchAPI.synchronize(request).singleOrError().subscribe((response) -> - { - - TangoDB.replace(response.getRemoteDB().toByteArray()); - emitter.onComplete(); - - },(ex) -> - { - XLog.e(ex); - emitter.onError(ex); - }); - - }); - } -} -- cgit v1.3.1