aboutsummaryrefslogtreecommitdiffstats
path: root/Software
diff options
context:
space:
mode:
Diffstat (limited to 'Software')
-rw-r--r--Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/operators/IMachineOperator.java9
-rw-r--r--Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/operators/MachineOperator.java9
-rw-r--r--Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/providers/IMachineIdentityProvider.java (renamed from Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/IMachineIdentityProvider.java)0
-rw-r--r--Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/providers/MachineIdentityProvider.java (renamed from Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/MachineIdentityProvider.java)0
-rw-r--r--Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/ExternalBridgeService.java137
-rw-r--r--Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/IExternalBridgeService.java53
-rw-r--r--Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/ISynchronizationService.java (renamed from Software/Android_Studio/Tango.Synchronization/src/main/java/com/twine/tango/synchronization/ITangoSynchronizer.java)6
-rw-r--r--Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/SynchronizationService.java (renamed from Software/Android_Studio/Tango.Synchronization/src/main/java/com/twine/tango/synchronization/TangoSynchronizer.java)45
-rw-r--r--Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/ApplicationModule.java30
-rw-r--r--Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/EventBusModule.java24
-rw-r--r--Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/NavigationModule.java20
-rw-r--r--Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/NotificationModule.java27
-rw-r--r--Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/ServicesModule.java8
-rw-r--r--Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/TransportModule.java25
14 files changed, 244 insertions, 149 deletions
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/IMachineIdentityProvider.java b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/providers/IMachineIdentityProvider.java
index 3e35be9d0..3e35be9d0 100644
--- 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/providers/IMachineIdentityProvider.java
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/providers/MachineIdentityProvider.java
index 29cb0c30c..29cb0c30c 100644
--- 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/providers/MachineIdentityProvider.java
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<HandlerAndType> 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 <T> void registerMessageHandler(IEventHandler<MessageReceivedArgs<T>> handler, MessageType messageType)
+ {
+ handlers.add(new HandlerAndType(handler, messageType));
+ }
+
+ @Override
+ public <T> void unRegisterMessageHandler(IEventHandler<MessageReceivedArgs<T>> 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<HandlerAndType> 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();
+ <T> void registerMessageHandler(IEventHandler<MessageReceivedArgs<T>> handler, MessageType messageType);
+ <T> void unRegisterMessageHandler(IEventHandler<MessageReceivedArgs<T>> handler);
+
+ public class MessageReceivedArgs<T>
+ {
+ 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.Synchronization/src/main/java/com/twine/tango/synchronization/ITangoSynchronizer.java b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/ISynchronizationService.java
index ef17439fd..631522fd0 100644
--- a/Software/Android_Studio/Tango.Synchronization/src/main/java/com/twine/tango/synchronization/ITangoSynchronizer.java
+++ b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/ISynchronizationService.java
@@ -1,4 +1,6 @@
-package com.twine.tango.synchronization;
+package com.twine.tango.integration.services;
+
+import java.io.IOException;
import io.reactivex.Completable;
@@ -6,7 +8,7 @@ import io.reactivex.Completable;
/**
* Represents the Tango application local to remote synchronization engine.
*/
-public interface ITangoSynchronizer
+public interface ISynchronizationService
{
/**
* Synchronizes the local database with the remote database through the remote machine service.
diff --git a/Software/Android_Studio/Tango.Synchronization/src/main/java/com/twine/tango/synchronization/TangoSynchronizer.java b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/SynchronizationService.java
index e0cb01ef1..ed15c9b7b 100644
--- a/Software/Android_Studio/Tango.Synchronization/src/main/java/com/twine/tango/synchronization/TangoSynchronizer.java
+++ b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/SynchronizationService.java
@@ -1,24 +1,33 @@
-package com.twine.tango.synchronization;
+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.IMachineIdentityProvider;
+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 TangoSynchronizer implements ITangoSynchronizer
+public class SynchronizationService implements ISynchronizationService
{
private IMachineIdentityProvider machineIdentityProvider;
+ private IExternalBridgeService bridgeService;
/**
@@ -26,9 +35,19 @@ public class TangoSynchronizer implements ITangoSynchronizer
*
* @param machineIdentityProvider the machine identity provider
*/
- public TangoSynchronizer(IMachineIdentityProvider machineIdentityProvider)
+ @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<CalculateRequest> e)
+ {
+ CalculateResponse response = CalculateResponse.newBuilder().setSum(e.getMessage().getA() + e.getMessage().getB()).build();
+ TangoMessage<CalculateResponse> tangoMessage = MessageFactory.createTangoMessage(CalculateResponse.class, response, e.getContainer().getToken());
+ bridgeService.sendResponse(tangoMessage);
}
@Override
@@ -36,31 +55,31 @@ public class TangoSynchronizer implements ITangoSynchronizer
{
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) ->
+
+ }, (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));
- }
-}