aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Android_Studio
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Android_Studio')
-rw-r--r--Software/Android_Studio/Tango.DAL/src/main/res/raw/tangodbbin557056 -> 557056 bytes
-rw-r--r--Software/Android_Studio/Tango.Integration/build.gradle4
-rw-r--r--Software/Android_Studio/Tango.Integration/src/main/AndroidManifest.xml1
-rw-r--r--Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/operators/IMachineOperator.java12
-rw-r--r--Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/operators/MachineOperator.java20
-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)2
-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)2
-rw-r--r--Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/ExternalBridgeService.java278
-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)46
-rw-r--r--Software/Android_Studio/Tango.NativeBridge/build.gradle7
-rw-r--r--Software/Android_Studio/Tango.PMR/src/main/java/com/twine/tango/pmr/MessageFactory.java45
-rw-r--r--Software/Android_Studio/Tango.PMR/src/main/java/com/twine/tango/pmr/common/MessageTypeOuterClass.java36
-rw-r--r--Software/Android_Studio/Tango.PMR/src/main/java/com/twine/tango/pmr/integration/ExternalBridgeUdpDiscoveryPacketOuterClass.java580
-rw-r--r--Software/Android_Studio/Tango.PMR/src/main/java/com/twine/tango/pmr/integration/ExternalClientLoginRequestOuterClass.java579
-rw-r--r--Software/Android_Studio/Tango.PMR/src/main/java/com/twine/tango/pmr/integration/ExternalClientLoginResponseOuterClass.java644
-rw-r--r--Software/Android_Studio/Tango.PMR/src/main/res/raw/packages.txt1
-rw-r--r--Software/Android_Studio/Tango.SharedUI/build.gradle4
-rw-r--r--Software/Android_Studio/Tango.Stubs.UI/build.gradle2
-rw-r--r--Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/App.java4
-rw-r--r--Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/ApplicationComponent.java2
-rw-r--r--Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/IntegrationModule.java50
-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
-rw-r--r--Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/ViewModelsModule.java11
-rw-r--r--Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/main/MainActivityVM.java36
-rw-r--r--Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/stub/StubFragmentVM.java9
-rw-r--r--Software/Android_Studio/Tango.Stubs/src/main/java/com/twine/tango/stubs/stubs/Calculate.java2
-rw-r--r--Software/Android_Studio/Tango.Stubs/src/main/java/com/twine/tango/stubs/stubs/Progress.java2
-rw-r--r--Software/Android_Studio/Tango.Synchronization/build.gradle2
-rw-r--r--Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/ITransportAdapter.java26
-rw-r--r--Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/ITransporter.java8
-rw-r--r--Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/TransportAdapterBase.java84
-rw-r--r--Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/TransporterBase.java52
-rw-r--r--Software/Android_Studio/Tango.UnitTesting/build.gradle1
-rw-r--r--Software/Android_Studio/Tango.UnitTesting/src/androidTest/java/com/twine/tango/unittesting/Synchronization_TST.java10
-rw-r--r--Software/Android_Studio/settings.gradle2
38 files changed, 2503 insertions, 153 deletions
diff --git a/Software/Android_Studio/Tango.DAL/src/main/res/raw/tangodb b/Software/Android_Studio/Tango.DAL/src/main/res/raw/tangodb
index 00c79da9c..0419b065c 100644
--- a/Software/Android_Studio/Tango.DAL/src/main/res/raw/tangodb
+++ b/Software/Android_Studio/Tango.DAL/src/main/res/raw/tangodb
Binary files differ
diff --git a/Software/Android_Studio/Tango.Integration/build.gradle b/Software/Android_Studio/Tango.Integration/build.gradle
index dc482d641..255fce0f6 100644
--- a/Software/Android_Studio/Tango.Integration/build.gradle
+++ b/Software/Android_Studio/Tango.Integration/build.gradle
@@ -43,4 +43,8 @@ dependencies {
compile globalDependencies.dagger
compile globalDependencies.daggerAndroid
implementation project(':Tango.PMR')
+ implementation project(':Tango.Transport')
+ implementation project(':Tango.Core')
+ implementation project(':Tango.DAL')
+ implementation project(':Tango.Web')
}
diff --git a/Software/Android_Studio/Tango.Integration/src/main/AndroidManifest.xml b/Software/Android_Studio/Tango.Integration/src/main/AndroidManifest.xml
index b57dcb665..81958ad3d 100644
--- a/Software/Android_Studio/Tango.Integration/src/main/AndroidManifest.xml
+++ b/Software/Android_Studio/Tango.Integration/src/main/AndroidManifest.xml
@@ -2,5 +2,6 @@
package="com.twine.tango.integration">
<uses-permission android:name="android.permission.INTERNET"/>
+ <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
</manifest>
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..9963f295b
--- /dev/null
+++ b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/operators/IMachineOperator.java
@@ -0,0 +1,12 @@
+package com.twine.tango.integration.operators;
+
+import com.twine.tango.transport.ITransporter;
+
+/**
+ * Created by Roy on 12/23/2017.
+ */
+
+public interface IMachineOperator extends ITransporter
+{
+
+}
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..f23c8c705
--- /dev/null
+++ b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/operators/MachineOperator.java
@@ -0,0 +1,20 @@
+package com.twine.tango.integration.operators;
+
+import com.twine.tango.transport.ITransportAdapter;
+import com.twine.tango.transport.transporters.ProtoTransporter;
+
+/**
+ * Created by Roy on 12/23/2017.
+ */
+
+public class MachineOperator extends ProtoTransporter implements IMachineOperator
+{
+ public MachineOperator()
+ {
+ }
+
+ public MachineOperator(ITransportAdapter adapter)
+ {
+ super(adapter);
+ }
+}
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..547a17e50 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
@@ -1,4 +1,4 @@
-package com.twine.tango.integration;
+package com.twine.tango.integration.providers;
/**
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..b4f2d3c4d 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
@@ -1,4 +1,4 @@
-package com.twine.tango.integration;
+package com.twine.tango.integration.providers;
/**
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..709d5a271
--- /dev/null
+++ b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/ExternalBridgeService.java
@@ -0,0 +1,278 @@
+package com.twine.tango.integration.services;
+
+import android.content.Context;
+import android.net.DhcpInfo;
+import android.net.wifi.WifiManager;
+import android.os.StrictMode;
+import android.os.SystemClock;
+import android.provider.SyncStateContract.Constants;
+import android.util.Log;
+
+import com.elvishew.xlog.XLog;
+import com.google.protobuf.GeneratedMessageV3;
+import com.twine.tango.core.ContextHelper;
+import com.twine.tango.core.IEventHandler;
+import com.twine.tango.integration.operators.IMachineOperator;
+import com.twine.tango.integration.providers.IMachineIdentityProvider;
+import com.twine.tango.pmr.MessageFactory;
+import com.twine.tango.pmr.TangoMessage;
+import com.twine.tango.pmr.common.MessageContainerOuterClass.MessageContainer;
+import com.twine.tango.pmr.common.MessageTypeOuterClass.MessageType;
+import com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.ExternalBridgeUdpDiscoveryPacket;
+import com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.ExternalClientLoginRequest;
+import com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.ExternalClientLoginResponse;
+import com.twine.tango.transport.ITransportAdapter;
+import com.twine.tango.transport.adapters.TcpTransportAdapter;
+import com.twine.tango.transport.transporters.ProtoTransporter;
+
+import java.io.IOException;
+import java.net.DatagramPacket;
+import java.net.DatagramSocket;
+import java.net.InetAddress;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.inject.Inject;
+
+import static br.com.zbra.androidlinq.Linq.stream;
+
+/**
+ * Created by Roy on 12/22/2017.
+ */
+
+public class ExternalBridgeService extends ProtoTransporter implements IExternalBridgeService
+{
+ private ServerSocket listener;
+ private boolean isStarted;
+ private List<HandlerAndType> handlers;
+ private IMachineIdentityProvider identityProvider;
+ private IMachineOperator machineOperator;
+
+ @Inject
+ public ExternalBridgeService(IMachineIdentityProvider identityProvider, IMachineOperator machineOperator)
+ {
+ this.identityProvider = identityProvider;
+ this.machineOperator = machineOperator;
+ handlers = new ArrayList<>();
+ }
+
+ @Override
+ public boolean isStarted()
+ {
+ return isStarted;
+ }
+
+ @Override
+ public void start() throws IOException
+ {
+ listener = new ServerSocket(1984);
+ isStarted = true;
+ Thread listenerThread = new Thread(this::listenerThreadMethod);
+ Thread discoveryThread = new Thread(this::discoveryThreadMethod);
+ listenerThread.start();
+ discoveryThread.start();
+ }
+
+ private void discoveryThreadMethod()
+ {
+ // Hack Prevent crash (sending should be done using an async task)
+ StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
+ StrictMode.setThreadPolicy(policy);
+
+ byte[] packet = ExternalBridgeUdpDiscoveryPacket.newBuilder().setSerialNumber(identityProvider.getSerialNumber()).build().toByteArray();
+
+ while (isStarted)
+ {
+ try
+ {
+ DatagramSocket socket = new DatagramSocket();
+ socket.setBroadcast(true);
+
+ //First try to send to emulator host...
+ DatagramPacket sendPacket = new DatagramPacket(packet, packet.length, InetAddress.getByName("10.0.2.2"), 8888);
+ socket.send(sendPacket);
+
+ //This will not work on the emulator as far as I know.
+ //TODO: This needs to be tested on a real device!
+ sendPacket = new DatagramPacket(packet, packet.length, InetAddress.getByName("255.255.255.255"), 8888);
+ socket.send(sendPacket);
+
+ } catch (IOException e)
+ {
+ XLog.e(e);
+ }
+
+ SystemClock.sleep(5000);
+ }
+ }
+
+ private InetAddress getBroadcastAddress() throws IOException
+ {
+ WifiManager wifi = (WifiManager) ContextHelper.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
+ assert wifi != null;
+ DhcpInfo dhcp = wifi.getDhcpInfo();
+
+ if (dhcp != null)
+ {
+ int broadcast = (dhcp.ipAddress & dhcp.netmask) | ~dhcp.netmask;
+ byte[] quads = new byte[4];
+ for (int k = 0; k < 4; k++)
+ quads[k] = (byte) ((broadcast >> k * 8) & 0xFF);
+ return InetAddress.getByAddress(quads);
+ } else
+ {
+ return null;
+ }
+ }
+
+ @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)
+ {
+ for (ITransportAdapter adapter : getAdapters())
+ {
+ adapter.disconnect().blockingAwait();
+ }
+ getAdapters().clear();
+ TcpTransportAdapter adapter = new TcpTransportAdapter(newSocket);
+ adapter.setAuthenticated(false);
+ getAdapters().add(adapter);
+ connect().blockingAwait();
+ }
+
+ } catch (IOException e)
+ {
+ XLog.e(e);
+ }
+
+ SystemClock.sleep(100);
+ }
+
+ disconnect().blockingAwait();
+ }
+
+ @Override
+ protected void onRequestReceived(MessageContainer container)
+ {
+ super.onRequestReceived(container);
+
+ try
+ {
+ if (container.getType() == MessageType.ExternalClientLoginRequest)
+ {
+ ExternalClientLoginRequest request = MessageFactory.parseMessageFromContainer(container);
+ if (request.getKey().equals("1234"))
+ {
+ getAdapters().get(0).setAuthenticated(true);
+ sendResponse(MessageFactory.createTangoMessage(
+ ExternalClientLoginResponse.class,
+ ExternalClientLoginResponse.newBuilder().setAuthenticated(true).build(),
+ container.getToken()));
+ } else
+ {
+ getAdapters().get(0).setAuthenticated(false);
+ sendResponse(MessageFactory.createTangoMessage(
+ ExternalClientLoginResponse.class,
+ ExternalClientLoginResponse.newBuilder().setAuthenticated(false).build(),
+ container.getToken()));
+ }
+
+ return;
+ }
+
+ if (getAdapters().get(0).isAuthenticated())
+ {
+ GeneratedMessageV3 message = MessageFactory.parseMessageFromContainerAgnostic(container);
+
+ List<HandlerAndType> receivers = stream(handlers).where((x) -> x.messageType == container.getType()).toList();
+
+ if (receivers.size() > 0)
+ {
+ for (HandlerAndType receiver : receivers)
+ {
+ //noinspection unchecked
+ receiver.handler.invoke(this, new MessageReceivedArgs(container, message));
+ }
+ } else
+ {
+ //Route to machine...
+ if (container.getContinuous())
+ {
+ machineOperator.sendContinuousRequest(MessageFactory.createTangoMessage(container, message)).subscribe((response) ->
+ {
+ sendResponse((TangoMessage<? extends GeneratedMessageV3>) response);
+ }, (ex) ->
+ {
+
+ });
+ } else
+ {
+ machineOperator.sendRequest(MessageFactory.createTangoMessage(container, message)).subscribe((response) ->
+ {
+ sendResponse((TangoMessage<? extends GeneratedMessageV3>) response);
+ }, (ex) ->
+ {
+
+ });
+ }
+ }
+ } else
+ {
+ XLog.w("Message received from an unauthorized adapter!");
+ }
+
+ } 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..5a2aed9aa
--- /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 IExternalBridgeService 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..0f3d98982 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,34 +1,52 @@
-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;
/**
* Instantiates a new Tango synchronizer.
*
* @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 +54,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.NativeBridge/build.gradle b/Software/Android_Studio/Tango.NativeBridge/build.gradle
index 1454dd7ec..eaa5f5c3f 100644
--- a/Software/Android_Studio/Tango.NativeBridge/build.gradle
+++ b/Software/Android_Studio/Tango.NativeBridge/build.gradle
@@ -15,7 +15,6 @@ android {
externalNativeBuild {
cmake {
cppFlags "-std=c++11 -frtti -fexceptions"
- abiFilters "x86", "armeabi-v7a", "x86_64"
}
}
}
@@ -27,12 +26,6 @@ android {
}
}
- sourceSets {
- main {
- jniLibs.srcDirs = ['libs']
- }
- }
-
externalNativeBuild {
cmake {
path "CMakeLists.txt"
diff --git a/Software/Android_Studio/Tango.PMR/src/main/java/com/twine/tango/pmr/MessageFactory.java b/Software/Android_Studio/Tango.PMR/src/main/java/com/twine/tango/pmr/MessageFactory.java
index 55a0de4dd..413824e8d 100644
--- a/Software/Android_Studio/Tango.PMR/src/main/java/com/twine/tango/pmr/MessageFactory.java
+++ b/Software/Android_Studio/Tango.PMR/src/main/java/com/twine/tango/pmr/MessageFactory.java
@@ -1,6 +1,7 @@
package com.twine.tango.pmr;
import com.elvishew.xlog.XLog;
+import com.google.protobuf.GeneratedMessageV3;
import com.google.protobuf.InvalidProtocolBufferException;
import com.google.protobuf.Parser;
import com.twine.tango.core.ReflectionsHelper;
@@ -79,7 +80,7 @@ public class MessageFactory
* @param typeName The inner message class.
* @return New instance of {@link TangoMessage}.
*/
- public static <T extends com.google.protobuf.GeneratedMessageV3> TangoMessage<T> createTangoMessage(Class<T> typeName)
+ public static <T extends GeneratedMessageV3> TangoMessage<T> createTangoMessage(Class<T> typeName)
{
try
{
@@ -108,7 +109,7 @@ public class MessageFactory
* @param message the message
* @return the tango message
*/
- public static <T extends com.google.protobuf.GeneratedMessageV3> TangoMessage<T> createTangoMessage(Class<T> typeName, T message)
+ public static <T extends GeneratedMessageV3> TangoMessage<T> createTangoMessage(Class<T> typeName, T message)
{
TangoMessage<T> tangoMessage = createTangoMessage(typeName);
tangoMessage.setMessage(message);
@@ -123,7 +124,39 @@ public class MessageFactory
* @param token the token
* @return the tango message
*/
- public static <T extends com.google.protobuf.GeneratedMessageV3> TangoMessage<T> createTangoMessage(Class<T> typeName, String token)
+ public static <T extends GeneratedMessageV3> TangoMessage<T> createTangoMessage(Class<T> typeName, T message, String token)
+ {
+ TangoMessage<T> tangoMessage = createTangoMessage(typeName);
+ tangoMessage.setMessage(message);
+ tangoMessage.getContainer().setToken(token);
+ return tangoMessage;
+ }
+
+ /**
+ * Creates a new tango message with the specified message token.
+ *
+ * @param <T> the type parameter
+ * @param typeName the type name
+ * @param token the token
+ * @return the tango message
+ */
+ public static TangoMessage createTangoMessage(MessageContainer container, GeneratedMessageV3 message)
+ {
+ TangoMessage tangoMessage = new TangoMessage(message,container.getType());
+ tangoMessage.setMessage(message);
+ tangoMessage.getContainer().setToken(container.getToken());
+ return tangoMessage;
+ }
+
+ /**
+ * Creates a new tango message with the specified message token.
+ *
+ * @param <T> the type parameter
+ * @param typeName the type name
+ * @param token the token
+ * @return the tango message
+ */
+ public static <T extends GeneratedMessageV3> TangoMessage<T> createTangoMessage(Class<T> typeName, String token)
{
TangoMessage<T> tangoMessage = createTangoMessage(typeName);
tangoMessage.getContainer().setToken(token);
@@ -138,7 +171,7 @@ public class MessageFactory
* @return New instance of {@link TangoMessage}.
*/
@SuppressWarnings("unchecked")
- public static <T extends com.google.protobuf.GeneratedMessageV3> TangoMessage<T> parseTangoMessage(byte[] data)
+ public static <T extends GeneratedMessageV3> TangoMessage<T> parseTangoMessage(byte[] data)
{
try
{
@@ -167,7 +200,7 @@ public class MessageFactory
* @throws IllegalAccessException the illegal access exception
* @throws InvalidProtocolBufferException the invalid protocol buffer exception
*/
- public static <T extends com.google.protobuf.GeneratedMessageV3> T parseMessageFromContainer(MessageContainer container) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException, InvalidProtocolBufferException
+ public static <T extends GeneratedMessageV3> T parseMessageFromContainer(MessageContainer container) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException, InvalidProtocolBufferException
{
Class<?> type = getClassForName(container.getType().toString());
@@ -185,7 +218,7 @@ public class MessageFactory
* @throws IllegalAccessException the illegal access exception
* @throws InvalidProtocolBufferException the invalid protocol buffer exception
*/
- public static com.google.protobuf.GeneratedMessageV3 parseMessageFromContainerAgnostic(MessageContainer container) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException, InvalidProtocolBufferException
+ public static GeneratedMessageV3 parseMessageFromContainerAgnostic(MessageContainer container) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException, InvalidProtocolBufferException
{
Class<?> type = getClassForName(container.getType().toString());
Parser parser = (Parser) type.getMethod("parser").invoke(null);
diff --git a/Software/Android_Studio/Tango.PMR/src/main/java/com/twine/tango/pmr/common/MessageTypeOuterClass.java b/Software/Android_Studio/Tango.PMR/src/main/java/com/twine/tango/pmr/common/MessageTypeOuterClass.java
index eeced1c83..27d581c93 100644
--- a/Software/Android_Studio/Tango.PMR/src/main/java/com/twine/tango/pmr/common/MessageTypeOuterClass.java
+++ b/Software/Android_Studio/Tango.PMR/src/main/java/com/twine/tango/pmr/common/MessageTypeOuterClass.java
@@ -151,6 +151,18 @@ public final class MessageTypeOuterClass {
* <code>StubValveResponse = 32;</code>
*/
StubValveResponse(32),
+ /**
+ * <code>ExternalBridgeUdpDiscoveryPacket = 33;</code>
+ */
+ ExternalBridgeUdpDiscoveryPacket(33),
+ /**
+ * <code>ExternalClientLoginRequest = 34;</code>
+ */
+ ExternalClientLoginRequest(34),
+ /**
+ * <code>ExternalClientLoginResponse = 35;</code>
+ */
+ ExternalClientLoginResponse(35),
UNRECOGNIZED(-1),
;
@@ -286,6 +298,18 @@ public final class MessageTypeOuterClass {
* <code>StubValveResponse = 32;</code>
*/
public static final int StubValveResponse_VALUE = 32;
+ /**
+ * <code>ExternalBridgeUdpDiscoveryPacket = 33;</code>
+ */
+ public static final int ExternalBridgeUdpDiscoveryPacket_VALUE = 33;
+ /**
+ * <code>ExternalClientLoginRequest = 34;</code>
+ */
+ public static final int ExternalClientLoginRequest_VALUE = 34;
+ /**
+ * <code>ExternalClientLoginResponse = 35;</code>
+ */
+ public static final int ExternalClientLoginResponse_VALUE = 35;
public final int getNumber() {
@@ -339,6 +363,9 @@ public final class MessageTypeOuterClass {
case 30: return StubSteperMotorResponse;
case 31: return StubValveRequest;
case 32: return StubValveResponse;
+ case 33: return ExternalBridgeUdpDiscoveryPacket;
+ case 34: return ExternalClientLoginRequest;
+ case 35: return ExternalClientLoginResponse;
default: return null;
}
}
@@ -400,7 +427,7 @@ public final class MessageTypeOuterClass {
descriptor;
static {
java.lang.String[] descriptorData = {
- "\n\021MessageType.proto\022\020Tango.PMR.Common*\357\006" +
+ "\n\021MessageType.proto\022\020Tango.PMR.Common*\326\007" +
"\n\013MessageType\022\007\n\003RGB\020\000\022\007\n\003Job\020\001\022\013\n\007Segme" +
"nt\020\002\022\024\n\020CalculateRequest\020\003\022\025\n\021CalculateR" +
"esponse\020\004\022\023\n\017ProgressRequest\020\005\022\024\n\020Progre" +
@@ -422,8 +449,11 @@ public final class MessageTypeOuterClass {
"ubOptLimitSwitchRequest\020\033\022\036\n\032StubOptLimi",
"tSwitchResponse\020\034\022\032\n\026StubSteperMotorRequ" +
"est\020\035\022\033\n\027StubSteperMotorResponse\020\036\022\024\n\020St" +
- "ubValveRequest\020\037\022\025\n\021StubValveResponse\020 B" +
- "\034\n\032com.twine.tango.pmr.commonb\006proto3"
+ "ubValveRequest\020\037\022\025\n\021StubValveResponse\020 \022" +
+ "$\n ExternalBridgeUdpDiscoveryPacket\020!\022\036\n" +
+ "\032ExternalClientLoginRequest\020\"\022\037\n\033Externa" +
+ "lClientLoginResponse\020#B\034\n\032com.twine.tang" +
+ "o.pmr.commonb\006proto3"
};
com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() {
diff --git a/Software/Android_Studio/Tango.PMR/src/main/java/com/twine/tango/pmr/integration/ExternalBridgeUdpDiscoveryPacketOuterClass.java b/Software/Android_Studio/Tango.PMR/src/main/java/com/twine/tango/pmr/integration/ExternalBridgeUdpDiscoveryPacketOuterClass.java
new file mode 100644
index 000000000..5b83561c0
--- /dev/null
+++ b/Software/Android_Studio/Tango.PMR/src/main/java/com/twine/tango/pmr/integration/ExternalBridgeUdpDiscoveryPacketOuterClass.java
@@ -0,0 +1,580 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: ExternalBridgeUdpDiscoveryPacket.proto
+
+package com.twine.tango.pmr.integration;
+
+public final class ExternalBridgeUdpDiscoveryPacketOuterClass {
+ private ExternalBridgeUdpDiscoveryPacketOuterClass() {}
+ public static void registerAllExtensions(
+ com.google.protobuf.ExtensionRegistryLite registry) {
+ }
+
+ public static void registerAllExtensions(
+ com.google.protobuf.ExtensionRegistry registry) {
+ registerAllExtensions(
+ (com.google.protobuf.ExtensionRegistryLite) registry);
+ }
+ public interface ExternalBridgeUdpDiscoveryPacketOrBuilder extends
+ // @@protoc_insertion_point(interface_extends:Tango.PMR.Integration.ExternalBridgeUdpDiscoveryPacket)
+ com.google.protobuf.MessageOrBuilder {
+
+ /**
+ * <code>string SerialNumber = 2;</code>
+ */
+ java.lang.String getSerialNumber();
+ /**
+ * <code>string SerialNumber = 2;</code>
+ */
+ com.google.protobuf.ByteString
+ getSerialNumberBytes();
+ }
+ /**
+ * Protobuf type {@code Tango.PMR.Integration.ExternalBridgeUdpDiscoveryPacket}
+ */
+ public static final class ExternalBridgeUdpDiscoveryPacket extends
+ com.google.protobuf.GeneratedMessageV3 implements
+ // @@protoc_insertion_point(message_implements:Tango.PMR.Integration.ExternalBridgeUdpDiscoveryPacket)
+ ExternalBridgeUdpDiscoveryPacketOrBuilder {
+ private static final long serialVersionUID = 0L;
+ // Use ExternalBridgeUdpDiscoveryPacket.newBuilder() to construct.
+ private ExternalBridgeUdpDiscoveryPacket(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+ super(builder);
+ }
+ private ExternalBridgeUdpDiscoveryPacket() {
+ serialNumber_ = "";
+ }
+
+ @java.lang.Override
+ public final com.google.protobuf.UnknownFieldSet
+ getUnknownFields() {
+ return this.unknownFields;
+ }
+ private ExternalBridgeUdpDiscoveryPacket(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ this();
+ int mutable_bitField0_ = 0;
+ com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+ com.google.protobuf.UnknownFieldSet.newBuilder();
+ try {
+ boolean done = false;
+ while (!done) {
+ int tag = input.readTag();
+ switch (tag) {
+ case 0:
+ done = true;
+ break;
+ default: {
+ if (!parseUnknownFieldProto3(
+ input, unknownFields, extensionRegistry, tag)) {
+ done = true;
+ }
+ break;
+ }
+ case 18: {
+ java.lang.String s = input.readStringRequireUtf8();
+
+ serialNumber_ = s;
+ break;
+ }
+ }
+ }
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ throw e.setUnfinishedMessage(this);
+ } catch (java.io.IOException e) {
+ throw new com.google.protobuf.InvalidProtocolBufferException(
+ e).setUnfinishedMessage(this);
+ } finally {
+ this.unknownFields = unknownFields.build();
+ makeExtensionsImmutable();
+ }
+ }
+ public static final com.google.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.internal_static_Tango_PMR_Integration_ExternalBridgeUdpDiscoveryPacket_descriptor;
+ }
+
+ protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.internal_static_Tango_PMR_Integration_ExternalBridgeUdpDiscoveryPacket_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.ExternalBridgeUdpDiscoveryPacket.class, com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.ExternalBridgeUdpDiscoveryPacket.Builder.class);
+ }
+
+ public static final int SERIALNUMBER_FIELD_NUMBER = 2;
+ private volatile java.lang.Object serialNumber_;
+ /**
+ * <code>string SerialNumber = 2;</code>
+ */
+ public java.lang.String getSerialNumber() {
+ java.lang.Object ref = serialNumber_;
+ if (ref instanceof java.lang.String) {
+ return (java.lang.String) ref;
+ } else {
+ com.google.protobuf.ByteString bs =
+ (com.google.protobuf.ByteString) ref;
+ java.lang.String s = bs.toStringUtf8();
+ serialNumber_ = s;
+ return s;
+ }
+ }
+ /**
+ * <code>string SerialNumber = 2;</code>
+ */
+ public com.google.protobuf.ByteString
+ getSerialNumberBytes() {
+ java.lang.Object ref = serialNumber_;
+ if (ref instanceof java.lang.String) {
+ com.google.protobuf.ByteString b =
+ com.google.protobuf.ByteString.copyFromUtf8(
+ (java.lang.String) ref);
+ serialNumber_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+
+ private byte memoizedIsInitialized = -1;
+ public final boolean isInitialized() {
+ byte isInitialized = memoizedIsInitialized;
+ if (isInitialized == 1) return true;
+ if (isInitialized == 0) return false;
+
+ memoizedIsInitialized = 1;
+ return true;
+ }
+
+ public void writeTo(com.google.protobuf.CodedOutputStream output)
+ throws java.io.IOException {
+ if (!getSerialNumberBytes().isEmpty()) {
+ com.google.protobuf.GeneratedMessageV3.writeString(output, 2, serialNumber_);
+ }
+ unknownFields.writeTo(output);
+ }
+
+ public int getSerializedSize() {
+ int size = memoizedSize;
+ if (size != -1) return size;
+
+ size = 0;
+ if (!getSerialNumberBytes().isEmpty()) {
+ size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, serialNumber_);
+ }
+ size += unknownFields.getSerializedSize();
+ memoizedSize = size;
+ return size;
+ }
+
+ @java.lang.Override
+ public boolean equals(final java.lang.Object obj) {
+ if (obj == this) {
+ return true;
+ }
+ if (!(obj instanceof com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.ExternalBridgeUdpDiscoveryPacket)) {
+ return super.equals(obj);
+ }
+ com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.ExternalBridgeUdpDiscoveryPacket other = (com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.ExternalBridgeUdpDiscoveryPacket) obj;
+
+ boolean result = true;
+ result = result && getSerialNumber()
+ .equals(other.getSerialNumber());
+ result = result && unknownFields.equals(other.unknownFields);
+ return result;
+ }
+
+ @java.lang.Override
+ public int hashCode() {
+ if (memoizedHashCode != 0) {
+ return memoizedHashCode;
+ }
+ int hash = 41;
+ hash = (19 * hash) + getDescriptor().hashCode();
+ hash = (37 * hash) + SERIALNUMBER_FIELD_NUMBER;
+ hash = (53 * hash) + getSerialNumber().hashCode();
+ hash = (29 * hash) + unknownFields.hashCode();
+ memoizedHashCode = hash;
+ return hash;
+ }
+
+ public static com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.ExternalBridgeUdpDiscoveryPacket parseFrom(
+ java.nio.ByteBuffer data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.ExternalBridgeUdpDiscoveryPacket parseFrom(
+ java.nio.ByteBuffer data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.ExternalBridgeUdpDiscoveryPacket parseFrom(
+ com.google.protobuf.ByteString data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.ExternalBridgeUdpDiscoveryPacket parseFrom(
+ com.google.protobuf.ByteString data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.ExternalBridgeUdpDiscoveryPacket parseFrom(byte[] data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.ExternalBridgeUdpDiscoveryPacket parseFrom(
+ byte[] data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.ExternalBridgeUdpDiscoveryPacket parseFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input);
+ }
+ public static com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.ExternalBridgeUdpDiscoveryPacket parseFrom(
+ java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input, extensionRegistry);
+ }
+ public static com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.ExternalBridgeUdpDiscoveryPacket parseDelimitedFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseDelimitedWithIOException(PARSER, input);
+ }
+ public static com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.ExternalBridgeUdpDiscoveryPacket parseDelimitedFrom(
+ java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+ }
+ public static com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.ExternalBridgeUdpDiscoveryPacket parseFrom(
+ com.google.protobuf.CodedInputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input);
+ }
+ public static com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.ExternalBridgeUdpDiscoveryPacket parseFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input, extensionRegistry);
+ }
+
+ public Builder newBuilderForType() { return newBuilder(); }
+ public static Builder newBuilder() {
+ return DEFAULT_INSTANCE.toBuilder();
+ }
+ public static Builder newBuilder(com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.ExternalBridgeUdpDiscoveryPacket prototype) {
+ return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+ }
+ public Builder toBuilder() {
+ return this == DEFAULT_INSTANCE
+ ? new Builder() : new Builder().mergeFrom(this);
+ }
+
+ @java.lang.Override
+ protected Builder newBuilderForType(
+ com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+ Builder builder = new Builder(parent);
+ return builder;
+ }
+ /**
+ * Protobuf type {@code Tango.PMR.Integration.ExternalBridgeUdpDiscoveryPacket}
+ */
+ public static final class Builder extends
+ com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+ // @@protoc_insertion_point(builder_implements:Tango.PMR.Integration.ExternalBridgeUdpDiscoveryPacket)
+ com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.ExternalBridgeUdpDiscoveryPacketOrBuilder {
+ public static final com.google.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.internal_static_Tango_PMR_Integration_ExternalBridgeUdpDiscoveryPacket_descriptor;
+ }
+
+ protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.internal_static_Tango_PMR_Integration_ExternalBridgeUdpDiscoveryPacket_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.ExternalBridgeUdpDiscoveryPacket.class, com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.ExternalBridgeUdpDiscoveryPacket.Builder.class);
+ }
+
+ // Construct using com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.ExternalBridgeUdpDiscoveryPacket.newBuilder()
+ private Builder() {
+ maybeForceBuilderInitialization();
+ }
+
+ private Builder(
+ com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+ super(parent);
+ maybeForceBuilderInitialization();
+ }
+ private void maybeForceBuilderInitialization() {
+ if (com.google.protobuf.GeneratedMessageV3
+ .alwaysUseFieldBuilders) {
+ }
+ }
+ public Builder clear() {
+ super.clear();
+ serialNumber_ = "";
+
+ return this;
+ }
+
+ public com.google.protobuf.Descriptors.Descriptor
+ getDescriptorForType() {
+ return com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.internal_static_Tango_PMR_Integration_ExternalBridgeUdpDiscoveryPacket_descriptor;
+ }
+
+ public com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.ExternalBridgeUdpDiscoveryPacket getDefaultInstanceForType() {
+ return com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.ExternalBridgeUdpDiscoveryPacket.getDefaultInstance();
+ }
+
+ public com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.ExternalBridgeUdpDiscoveryPacket build() {
+ com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.ExternalBridgeUdpDiscoveryPacket result = buildPartial();
+ if (!result.isInitialized()) {
+ throw newUninitializedMessageException(result);
+ }
+ return result;
+ }
+
+ public com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.ExternalBridgeUdpDiscoveryPacket buildPartial() {
+ com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.ExternalBridgeUdpDiscoveryPacket result = new com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.ExternalBridgeUdpDiscoveryPacket(this);
+ result.serialNumber_ = serialNumber_;
+ onBuilt();
+ return result;
+ }
+
+ public Builder clone() {
+ return (Builder) super.clone();
+ }
+ public Builder setField(
+ com.google.protobuf.Descriptors.FieldDescriptor field,
+ java.lang.Object value) {
+ return (Builder) super.setField(field, value);
+ }
+ public Builder clearField(
+ com.google.protobuf.Descriptors.FieldDescriptor field) {
+ return (Builder) super.clearField(field);
+ }
+ public Builder clearOneof(
+ com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+ return (Builder) super.clearOneof(oneof);
+ }
+ public Builder setRepeatedField(
+ com.google.protobuf.Descriptors.FieldDescriptor field,
+ int index, java.lang.Object value) {
+ return (Builder) super.setRepeatedField(field, index, value);
+ }
+ public Builder addRepeatedField(
+ com.google.protobuf.Descriptors.FieldDescriptor field,
+ java.lang.Object value) {
+ return (Builder) super.addRepeatedField(field, value);
+ }
+ public Builder mergeFrom(com.google.protobuf.Message other) {
+ if (other instanceof com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.ExternalBridgeUdpDiscoveryPacket) {
+ return mergeFrom((com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.ExternalBridgeUdpDiscoveryPacket)other);
+ } else {
+ super.mergeFrom(other);
+ return this;
+ }
+ }
+
+ public Builder mergeFrom(com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.ExternalBridgeUdpDiscoveryPacket other) {
+ if (other == com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.ExternalBridgeUdpDiscoveryPacket.getDefaultInstance()) return this;
+ if (!other.getSerialNumber().isEmpty()) {
+ serialNumber_ = other.serialNumber_;
+ onChanged();
+ }
+ this.mergeUnknownFields(other.unknownFields);
+ onChanged();
+ return this;
+ }
+
+ public final boolean isInitialized() {
+ return true;
+ }
+
+ public Builder mergeFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.ExternalBridgeUdpDiscoveryPacket parsedMessage = null;
+ try {
+ parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ parsedMessage = (com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.ExternalBridgeUdpDiscoveryPacket) e.getUnfinishedMessage();
+ throw e.unwrapIOException();
+ } finally {
+ if (parsedMessage != null) {
+ mergeFrom(parsedMessage);
+ }
+ }
+ return this;
+ }
+
+ private java.lang.Object serialNumber_ = "";
+ /**
+ * <code>string SerialNumber = 2;</code>
+ */
+ public java.lang.String getSerialNumber() {
+ java.lang.Object ref = serialNumber_;
+ if (!(ref instanceof java.lang.String)) {
+ com.google.protobuf.ByteString bs =
+ (com.google.protobuf.ByteString) ref;
+ java.lang.String s = bs.toStringUtf8();
+ serialNumber_ = s;
+ return s;
+ } else {
+ return (java.lang.String) ref;
+ }
+ }
+ /**
+ * <code>string SerialNumber = 2;</code>
+ */
+ public com.google.protobuf.ByteString
+ getSerialNumberBytes() {
+ java.lang.Object ref = serialNumber_;
+ if (ref instanceof String) {
+ com.google.protobuf.ByteString b =
+ com.google.protobuf.ByteString.copyFromUtf8(
+ (java.lang.String) ref);
+ serialNumber_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+ /**
+ * <code>string SerialNumber = 2;</code>
+ */
+ public Builder setSerialNumber(
+ java.lang.String value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+
+ serialNumber_ = value;
+ onChanged();
+ return this;
+ }
+ /**
+ * <code>string SerialNumber = 2;</code>
+ */
+ public Builder clearSerialNumber() {
+
+ serialNumber_ = getDefaultInstance().getSerialNumber();
+ onChanged();
+ return this;
+ }
+ /**
+ * <code>string SerialNumber = 2;</code>
+ */
+ public Builder setSerialNumberBytes(
+ com.google.protobuf.ByteString value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ checkByteStringIsUtf8(value);
+
+ serialNumber_ = value;
+ onChanged();
+ return this;
+ }
+ public final Builder setUnknownFields(
+ final com.google.protobuf.UnknownFieldSet unknownFields) {
+ return super.setUnknownFieldsProto3(unknownFields);
+ }
+
+ public final Builder mergeUnknownFields(
+ final com.google.protobuf.UnknownFieldSet unknownFields) {
+ return super.mergeUnknownFields(unknownFields);
+ }
+
+
+ // @@protoc_insertion_point(builder_scope:Tango.PMR.Integration.ExternalBridgeUdpDiscoveryPacket)
+ }
+
+ // @@protoc_insertion_point(class_scope:Tango.PMR.Integration.ExternalBridgeUdpDiscoveryPacket)
+ private static final com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.ExternalBridgeUdpDiscoveryPacket DEFAULT_INSTANCE;
+ static {
+ DEFAULT_INSTANCE = new com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.ExternalBridgeUdpDiscoveryPacket();
+ }
+
+ public static com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.ExternalBridgeUdpDiscoveryPacket getDefaultInstance() {
+ return DEFAULT_INSTANCE;
+ }
+
+ private static final com.google.protobuf.Parser<ExternalBridgeUdpDiscoveryPacket>
+ PARSER = new com.google.protobuf.AbstractParser<ExternalBridgeUdpDiscoveryPacket>() {
+ public ExternalBridgeUdpDiscoveryPacket parsePartialFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return new ExternalBridgeUdpDiscoveryPacket(input, extensionRegistry);
+ }
+ };
+
+ public static com.google.protobuf.Parser<ExternalBridgeUdpDiscoveryPacket> parser() {
+ return PARSER;
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Parser<ExternalBridgeUdpDiscoveryPacket> getParserForType() {
+ return PARSER;
+ }
+
+ public com.twine.tango.pmr.integration.ExternalBridgeUdpDiscoveryPacketOuterClass.ExternalBridgeUdpDiscoveryPacket getDefaultInstanceForType() {
+ return DEFAULT_INSTANCE;
+ }
+
+ }
+
+ private static final com.google.protobuf.Descriptors.Descriptor
+ internal_static_Tango_PMR_Integration_ExternalBridgeUdpDiscoveryPacket_descriptor;
+ private static final
+ com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internal_static_Tango_PMR_Integration_ExternalBridgeUdpDiscoveryPacket_fieldAccessorTable;
+
+ public static com.google.protobuf.Descriptors.FileDescriptor
+ getDescriptor() {
+ return descriptor;
+ }
+ private static com.google.protobuf.Descriptors.FileDescriptor
+ descriptor;
+ static {
+ java.lang.String[] descriptorData = {
+ "\n&ExternalBridgeUdpDiscoveryPacket.proto" +
+ "\022\025Tango.PMR.Integration\"8\n ExternalBridg" +
+ "eUdpDiscoveryPacket\022\024\n\014SerialNumber\030\002 \001(" +
+ "\tB!\n\037com.twine.tango.pmr.integrationb\006pr" +
+ "oto3"
+ };
+ com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
+ new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() {
+ public com.google.protobuf.ExtensionRegistry assignDescriptors(
+ com.google.protobuf.Descriptors.FileDescriptor root) {
+ descriptor = root;
+ return null;
+ }
+ };
+ com.google.protobuf.Descriptors.FileDescriptor
+ .internalBuildGeneratedFileFrom(descriptorData,
+ new com.google.protobuf.Descriptors.FileDescriptor[] {
+ }, assigner);
+ internal_static_Tango_PMR_Integration_ExternalBridgeUdpDiscoveryPacket_descriptor =
+ getDescriptor().getMessageTypes().get(0);
+ internal_static_Tango_PMR_Integration_ExternalBridgeUdpDiscoveryPacket_fieldAccessorTable = new
+ com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+ internal_static_Tango_PMR_Integration_ExternalBridgeUdpDiscoveryPacket_descriptor,
+ new java.lang.String[] { "SerialNumber", });
+ }
+
+ // @@protoc_insertion_point(outer_class_scope)
+}
diff --git a/Software/Android_Studio/Tango.PMR/src/main/java/com/twine/tango/pmr/integration/ExternalClientLoginRequestOuterClass.java b/Software/Android_Studio/Tango.PMR/src/main/java/com/twine/tango/pmr/integration/ExternalClientLoginRequestOuterClass.java
new file mode 100644
index 000000000..9717c3d11
--- /dev/null
+++ b/Software/Android_Studio/Tango.PMR/src/main/java/com/twine/tango/pmr/integration/ExternalClientLoginRequestOuterClass.java
@@ -0,0 +1,579 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: ExternalClientLoginRequest.proto
+
+package com.twine.tango.pmr.integration;
+
+public final class ExternalClientLoginRequestOuterClass {
+ private ExternalClientLoginRequestOuterClass() {}
+ public static void registerAllExtensions(
+ com.google.protobuf.ExtensionRegistryLite registry) {
+ }
+
+ public static void registerAllExtensions(
+ com.google.protobuf.ExtensionRegistry registry) {
+ registerAllExtensions(
+ (com.google.protobuf.ExtensionRegistryLite) registry);
+ }
+ public interface ExternalClientLoginRequestOrBuilder extends
+ // @@protoc_insertion_point(interface_extends:Tango.PMR.Integration.ExternalClientLoginRequest)
+ com.google.protobuf.MessageOrBuilder {
+
+ /**
+ * <code>string key = 1;</code>
+ */
+ java.lang.String getKey();
+ /**
+ * <code>string key = 1;</code>
+ */
+ com.google.protobuf.ByteString
+ getKeyBytes();
+ }
+ /**
+ * Protobuf type {@code Tango.PMR.Integration.ExternalClientLoginRequest}
+ */
+ public static final class ExternalClientLoginRequest extends
+ com.google.protobuf.GeneratedMessageV3 implements
+ // @@protoc_insertion_point(message_implements:Tango.PMR.Integration.ExternalClientLoginRequest)
+ ExternalClientLoginRequestOrBuilder {
+ private static final long serialVersionUID = 0L;
+ // Use ExternalClientLoginRequest.newBuilder() to construct.
+ private ExternalClientLoginRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+ super(builder);
+ }
+ private ExternalClientLoginRequest() {
+ key_ = "";
+ }
+
+ @java.lang.Override
+ public final com.google.protobuf.UnknownFieldSet
+ getUnknownFields() {
+ return this.unknownFields;
+ }
+ private ExternalClientLoginRequest(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ this();
+ int mutable_bitField0_ = 0;
+ com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+ com.google.protobuf.UnknownFieldSet.newBuilder();
+ try {
+ boolean done = false;
+ while (!done) {
+ int tag = input.readTag();
+ switch (tag) {
+ case 0:
+ done = true;
+ break;
+ default: {
+ if (!parseUnknownFieldProto3(
+ input, unknownFields, extensionRegistry, tag)) {
+ done = true;
+ }
+ break;
+ }
+ case 10: {
+ java.lang.String s = input.readStringRequireUtf8();
+
+ key_ = s;
+ break;
+ }
+ }
+ }
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ throw e.setUnfinishedMessage(this);
+ } catch (java.io.IOException e) {
+ throw new com.google.protobuf.InvalidProtocolBufferException(
+ e).setUnfinishedMessage(this);
+ } finally {
+ this.unknownFields = unknownFields.build();
+ makeExtensionsImmutable();
+ }
+ }
+ public static final com.google.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.internal_static_Tango_PMR_Integration_ExternalClientLoginRequest_descriptor;
+ }
+
+ protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.internal_static_Tango_PMR_Integration_ExternalClientLoginRequest_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.ExternalClientLoginRequest.class, com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.ExternalClientLoginRequest.Builder.class);
+ }
+
+ public static final int KEY_FIELD_NUMBER = 1;
+ private volatile java.lang.Object key_;
+ /**
+ * <code>string key = 1;</code>
+ */
+ public java.lang.String getKey() {
+ java.lang.Object ref = key_;
+ if (ref instanceof java.lang.String) {
+ return (java.lang.String) ref;
+ } else {
+ com.google.protobuf.ByteString bs =
+ (com.google.protobuf.ByteString) ref;
+ java.lang.String s = bs.toStringUtf8();
+ key_ = s;
+ return s;
+ }
+ }
+ /**
+ * <code>string key = 1;</code>
+ */
+ public com.google.protobuf.ByteString
+ getKeyBytes() {
+ java.lang.Object ref = key_;
+ if (ref instanceof java.lang.String) {
+ com.google.protobuf.ByteString b =
+ com.google.protobuf.ByteString.copyFromUtf8(
+ (java.lang.String) ref);
+ key_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+
+ private byte memoizedIsInitialized = -1;
+ public final boolean isInitialized() {
+ byte isInitialized = memoizedIsInitialized;
+ if (isInitialized == 1) return true;
+ if (isInitialized == 0) return false;
+
+ memoizedIsInitialized = 1;
+ return true;
+ }
+
+ public void writeTo(com.google.protobuf.CodedOutputStream output)
+ throws java.io.IOException {
+ if (!getKeyBytes().isEmpty()) {
+ com.google.protobuf.GeneratedMessageV3.writeString(output, 1, key_);
+ }
+ unknownFields.writeTo(output);
+ }
+
+ public int getSerializedSize() {
+ int size = memoizedSize;
+ if (size != -1) return size;
+
+ size = 0;
+ if (!getKeyBytes().isEmpty()) {
+ size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, key_);
+ }
+ size += unknownFields.getSerializedSize();
+ memoizedSize = size;
+ return size;
+ }
+
+ @java.lang.Override
+ public boolean equals(final java.lang.Object obj) {
+ if (obj == this) {
+ return true;
+ }
+ if (!(obj instanceof com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.ExternalClientLoginRequest)) {
+ return super.equals(obj);
+ }
+ com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.ExternalClientLoginRequest other = (com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.ExternalClientLoginRequest) obj;
+
+ boolean result = true;
+ result = result && getKey()
+ .equals(other.getKey());
+ result = result && unknownFields.equals(other.unknownFields);
+ return result;
+ }
+
+ @java.lang.Override
+ public int hashCode() {
+ if (memoizedHashCode != 0) {
+ return memoizedHashCode;
+ }
+ int hash = 41;
+ hash = (19 * hash) + getDescriptor().hashCode();
+ hash = (37 * hash) + KEY_FIELD_NUMBER;
+ hash = (53 * hash) + getKey().hashCode();
+ hash = (29 * hash) + unknownFields.hashCode();
+ memoizedHashCode = hash;
+ return hash;
+ }
+
+ public static com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.ExternalClientLoginRequest parseFrom(
+ java.nio.ByteBuffer data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.ExternalClientLoginRequest parseFrom(
+ java.nio.ByteBuffer data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.ExternalClientLoginRequest parseFrom(
+ com.google.protobuf.ByteString data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.ExternalClientLoginRequest parseFrom(
+ com.google.protobuf.ByteString data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.ExternalClientLoginRequest parseFrom(byte[] data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.ExternalClientLoginRequest parseFrom(
+ byte[] data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.ExternalClientLoginRequest parseFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input);
+ }
+ public static com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.ExternalClientLoginRequest parseFrom(
+ java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input, extensionRegistry);
+ }
+ public static com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.ExternalClientLoginRequest parseDelimitedFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseDelimitedWithIOException(PARSER, input);
+ }
+ public static com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.ExternalClientLoginRequest parseDelimitedFrom(
+ java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+ }
+ public static com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.ExternalClientLoginRequest parseFrom(
+ com.google.protobuf.CodedInputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input);
+ }
+ public static com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.ExternalClientLoginRequest parseFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input, extensionRegistry);
+ }
+
+ public Builder newBuilderForType() { return newBuilder(); }
+ public static Builder newBuilder() {
+ return DEFAULT_INSTANCE.toBuilder();
+ }
+ public static Builder newBuilder(com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.ExternalClientLoginRequest prototype) {
+ return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+ }
+ public Builder toBuilder() {
+ return this == DEFAULT_INSTANCE
+ ? new Builder() : new Builder().mergeFrom(this);
+ }
+
+ @java.lang.Override
+ protected Builder newBuilderForType(
+ com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+ Builder builder = new Builder(parent);
+ return builder;
+ }
+ /**
+ * Protobuf type {@code Tango.PMR.Integration.ExternalClientLoginRequest}
+ */
+ public static final class Builder extends
+ com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+ // @@protoc_insertion_point(builder_implements:Tango.PMR.Integration.ExternalClientLoginRequest)
+ com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.ExternalClientLoginRequestOrBuilder {
+ public static final com.google.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.internal_static_Tango_PMR_Integration_ExternalClientLoginRequest_descriptor;
+ }
+
+ protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.internal_static_Tango_PMR_Integration_ExternalClientLoginRequest_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.ExternalClientLoginRequest.class, com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.ExternalClientLoginRequest.Builder.class);
+ }
+
+ // Construct using com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.ExternalClientLoginRequest.newBuilder()
+ private Builder() {
+ maybeForceBuilderInitialization();
+ }
+
+ private Builder(
+ com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+ super(parent);
+ maybeForceBuilderInitialization();
+ }
+ private void maybeForceBuilderInitialization() {
+ if (com.google.protobuf.GeneratedMessageV3
+ .alwaysUseFieldBuilders) {
+ }
+ }
+ public Builder clear() {
+ super.clear();
+ key_ = "";
+
+ return this;
+ }
+
+ public com.google.protobuf.Descriptors.Descriptor
+ getDescriptorForType() {
+ return com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.internal_static_Tango_PMR_Integration_ExternalClientLoginRequest_descriptor;
+ }
+
+ public com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.ExternalClientLoginRequest getDefaultInstanceForType() {
+ return com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.ExternalClientLoginRequest.getDefaultInstance();
+ }
+
+ public com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.ExternalClientLoginRequest build() {
+ com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.ExternalClientLoginRequest result = buildPartial();
+ if (!result.isInitialized()) {
+ throw newUninitializedMessageException(result);
+ }
+ return result;
+ }
+
+ public com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.ExternalClientLoginRequest buildPartial() {
+ com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.ExternalClientLoginRequest result = new com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.ExternalClientLoginRequest(this);
+ result.key_ = key_;
+ onBuilt();
+ return result;
+ }
+
+ public Builder clone() {
+ return (Builder) super.clone();
+ }
+ public Builder setField(
+ com.google.protobuf.Descriptors.FieldDescriptor field,
+ java.lang.Object value) {
+ return (Builder) super.setField(field, value);
+ }
+ public Builder clearField(
+ com.google.protobuf.Descriptors.FieldDescriptor field) {
+ return (Builder) super.clearField(field);
+ }
+ public Builder clearOneof(
+ com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+ return (Builder) super.clearOneof(oneof);
+ }
+ public Builder setRepeatedField(
+ com.google.protobuf.Descriptors.FieldDescriptor field,
+ int index, java.lang.Object value) {
+ return (Builder) super.setRepeatedField(field, index, value);
+ }
+ public Builder addRepeatedField(
+ com.google.protobuf.Descriptors.FieldDescriptor field,
+ java.lang.Object value) {
+ return (Builder) super.addRepeatedField(field, value);
+ }
+ public Builder mergeFrom(com.google.protobuf.Message other) {
+ if (other instanceof com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.ExternalClientLoginRequest) {
+ return mergeFrom((com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.ExternalClientLoginRequest)other);
+ } else {
+ super.mergeFrom(other);
+ return this;
+ }
+ }
+
+ public Builder mergeFrom(com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.ExternalClientLoginRequest other) {
+ if (other == com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.ExternalClientLoginRequest.getDefaultInstance()) return this;
+ if (!other.getKey().isEmpty()) {
+ key_ = other.key_;
+ onChanged();
+ }
+ this.mergeUnknownFields(other.unknownFields);
+ onChanged();
+ return this;
+ }
+
+ public final boolean isInitialized() {
+ return true;
+ }
+
+ public Builder mergeFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.ExternalClientLoginRequest parsedMessage = null;
+ try {
+ parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ parsedMessage = (com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.ExternalClientLoginRequest) e.getUnfinishedMessage();
+ throw e.unwrapIOException();
+ } finally {
+ if (parsedMessage != null) {
+ mergeFrom(parsedMessage);
+ }
+ }
+ return this;
+ }
+
+ private java.lang.Object key_ = "";
+ /**
+ * <code>string key = 1;</code>
+ */
+ public java.lang.String getKey() {
+ java.lang.Object ref = key_;
+ if (!(ref instanceof java.lang.String)) {
+ com.google.protobuf.ByteString bs =
+ (com.google.protobuf.ByteString) ref;
+ java.lang.String s = bs.toStringUtf8();
+ key_ = s;
+ return s;
+ } else {
+ return (java.lang.String) ref;
+ }
+ }
+ /**
+ * <code>string key = 1;</code>
+ */
+ public com.google.protobuf.ByteString
+ getKeyBytes() {
+ java.lang.Object ref = key_;
+ if (ref instanceof String) {
+ com.google.protobuf.ByteString b =
+ com.google.protobuf.ByteString.copyFromUtf8(
+ (java.lang.String) ref);
+ key_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+ /**
+ * <code>string key = 1;</code>
+ */
+ public Builder setKey(
+ java.lang.String value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+
+ key_ = value;
+ onChanged();
+ return this;
+ }
+ /**
+ * <code>string key = 1;</code>
+ */
+ public Builder clearKey() {
+
+ key_ = getDefaultInstance().getKey();
+ onChanged();
+ return this;
+ }
+ /**
+ * <code>string key = 1;</code>
+ */
+ public Builder setKeyBytes(
+ com.google.protobuf.ByteString value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ checkByteStringIsUtf8(value);
+
+ key_ = value;
+ onChanged();
+ return this;
+ }
+ public final Builder setUnknownFields(
+ final com.google.protobuf.UnknownFieldSet unknownFields) {
+ return super.setUnknownFieldsProto3(unknownFields);
+ }
+
+ public final Builder mergeUnknownFields(
+ final com.google.protobuf.UnknownFieldSet unknownFields) {
+ return super.mergeUnknownFields(unknownFields);
+ }
+
+
+ // @@protoc_insertion_point(builder_scope:Tango.PMR.Integration.ExternalClientLoginRequest)
+ }
+
+ // @@protoc_insertion_point(class_scope:Tango.PMR.Integration.ExternalClientLoginRequest)
+ private static final com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.ExternalClientLoginRequest DEFAULT_INSTANCE;
+ static {
+ DEFAULT_INSTANCE = new com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.ExternalClientLoginRequest();
+ }
+
+ public static com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.ExternalClientLoginRequest getDefaultInstance() {
+ return DEFAULT_INSTANCE;
+ }
+
+ private static final com.google.protobuf.Parser<ExternalClientLoginRequest>
+ PARSER = new com.google.protobuf.AbstractParser<ExternalClientLoginRequest>() {
+ public ExternalClientLoginRequest parsePartialFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return new ExternalClientLoginRequest(input, extensionRegistry);
+ }
+ };
+
+ public static com.google.protobuf.Parser<ExternalClientLoginRequest> parser() {
+ return PARSER;
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Parser<ExternalClientLoginRequest> getParserForType() {
+ return PARSER;
+ }
+
+ public com.twine.tango.pmr.integration.ExternalClientLoginRequestOuterClass.ExternalClientLoginRequest getDefaultInstanceForType() {
+ return DEFAULT_INSTANCE;
+ }
+
+ }
+
+ private static final com.google.protobuf.Descriptors.Descriptor
+ internal_static_Tango_PMR_Integration_ExternalClientLoginRequest_descriptor;
+ private static final
+ com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internal_static_Tango_PMR_Integration_ExternalClientLoginRequest_fieldAccessorTable;
+
+ public static com.google.protobuf.Descriptors.FileDescriptor
+ getDescriptor() {
+ return descriptor;
+ }
+ private static com.google.protobuf.Descriptors.FileDescriptor
+ descriptor;
+ static {
+ java.lang.String[] descriptorData = {
+ "\n ExternalClientLoginRequest.proto\022\025Tang" +
+ "o.PMR.Integration\")\n\032ExternalClientLogin" +
+ "Request\022\013\n\003key\030\001 \001(\tB!\n\037com.twine.tango." +
+ "pmr.integrationb\006proto3"
+ };
+ com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
+ new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() {
+ public com.google.protobuf.ExtensionRegistry assignDescriptors(
+ com.google.protobuf.Descriptors.FileDescriptor root) {
+ descriptor = root;
+ return null;
+ }
+ };
+ com.google.protobuf.Descriptors.FileDescriptor
+ .internalBuildGeneratedFileFrom(descriptorData,
+ new com.google.protobuf.Descriptors.FileDescriptor[] {
+ }, assigner);
+ internal_static_Tango_PMR_Integration_ExternalClientLoginRequest_descriptor =
+ getDescriptor().getMessageTypes().get(0);
+ internal_static_Tango_PMR_Integration_ExternalClientLoginRequest_fieldAccessorTable = new
+ com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+ internal_static_Tango_PMR_Integration_ExternalClientLoginRequest_descriptor,
+ new java.lang.String[] { "Key", });
+ }
+
+ // @@protoc_insertion_point(outer_class_scope)
+}
diff --git a/Software/Android_Studio/Tango.PMR/src/main/java/com/twine/tango/pmr/integration/ExternalClientLoginResponseOuterClass.java b/Software/Android_Studio/Tango.PMR/src/main/java/com/twine/tango/pmr/integration/ExternalClientLoginResponseOuterClass.java
new file mode 100644
index 000000000..57600bbc2
--- /dev/null
+++ b/Software/Android_Studio/Tango.PMR/src/main/java/com/twine/tango/pmr/integration/ExternalClientLoginResponseOuterClass.java
@@ -0,0 +1,644 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: ExternalClientLoginResponse.proto
+
+package com.twine.tango.pmr.integration;
+
+public final class ExternalClientLoginResponseOuterClass {
+ private ExternalClientLoginResponseOuterClass() {}
+ public static void registerAllExtensions(
+ com.google.protobuf.ExtensionRegistryLite registry) {
+ }
+
+ public static void registerAllExtensions(
+ com.google.protobuf.ExtensionRegistry registry) {
+ registerAllExtensions(
+ (com.google.protobuf.ExtensionRegistryLite) registry);
+ }
+ public interface ExternalClientLoginResponseOrBuilder extends
+ // @@protoc_insertion_point(interface_extends:Tango.PMR.Integration.ExternalClientLoginResponse)
+ com.google.protobuf.MessageOrBuilder {
+
+ /**
+ * <code>bool Authenticated = 1;</code>
+ */
+ boolean getAuthenticated();
+
+ /**
+ * <code>string SerialNumber = 2;</code>
+ */
+ java.lang.String getSerialNumber();
+ /**
+ * <code>string SerialNumber = 2;</code>
+ */
+ com.google.protobuf.ByteString
+ getSerialNumberBytes();
+ }
+ /**
+ * Protobuf type {@code Tango.PMR.Integration.ExternalClientLoginResponse}
+ */
+ public static final class ExternalClientLoginResponse extends
+ com.google.protobuf.GeneratedMessageV3 implements
+ // @@protoc_insertion_point(message_implements:Tango.PMR.Integration.ExternalClientLoginResponse)
+ ExternalClientLoginResponseOrBuilder {
+ private static final long serialVersionUID = 0L;
+ // Use ExternalClientLoginResponse.newBuilder() to construct.
+ private ExternalClientLoginResponse(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+ super(builder);
+ }
+ private ExternalClientLoginResponse() {
+ authenticated_ = false;
+ serialNumber_ = "";
+ }
+
+ @java.lang.Override
+ public final com.google.protobuf.UnknownFieldSet
+ getUnknownFields() {
+ return this.unknownFields;
+ }
+ private ExternalClientLoginResponse(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ this();
+ int mutable_bitField0_ = 0;
+ com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+ com.google.protobuf.UnknownFieldSet.newBuilder();
+ try {
+ boolean done = false;
+ while (!done) {
+ int tag = input.readTag();
+ switch (tag) {
+ case 0:
+ done = true;
+ break;
+ default: {
+ if (!parseUnknownFieldProto3(
+ input, unknownFields, extensionRegistry, tag)) {
+ done = true;
+ }
+ break;
+ }
+ case 8: {
+
+ authenticated_ = input.readBool();
+ break;
+ }
+ case 18: {
+ java.lang.String s = input.readStringRequireUtf8();
+
+ serialNumber_ = s;
+ break;
+ }
+ }
+ }
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ throw e.setUnfinishedMessage(this);
+ } catch (java.io.IOException e) {
+ throw new com.google.protobuf.InvalidProtocolBufferException(
+ e).setUnfinishedMessage(this);
+ } finally {
+ this.unknownFields = unknownFields.build();
+ makeExtensionsImmutable();
+ }
+ }
+ public static final com.google.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.internal_static_Tango_PMR_Integration_ExternalClientLoginResponse_descriptor;
+ }
+
+ protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.internal_static_Tango_PMR_Integration_ExternalClientLoginResponse_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.ExternalClientLoginResponse.class, com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.ExternalClientLoginResponse.Builder.class);
+ }
+
+ public static final int AUTHENTICATED_FIELD_NUMBER = 1;
+ private boolean authenticated_;
+ /**
+ * <code>bool Authenticated = 1;</code>
+ */
+ public boolean getAuthenticated() {
+ return authenticated_;
+ }
+
+ public static final int SERIALNUMBER_FIELD_NUMBER = 2;
+ private volatile java.lang.Object serialNumber_;
+ /**
+ * <code>string SerialNumber = 2;</code>
+ */
+ public java.lang.String getSerialNumber() {
+ java.lang.Object ref = serialNumber_;
+ if (ref instanceof java.lang.String) {
+ return (java.lang.String) ref;
+ } else {
+ com.google.protobuf.ByteString bs =
+ (com.google.protobuf.ByteString) ref;
+ java.lang.String s = bs.toStringUtf8();
+ serialNumber_ = s;
+ return s;
+ }
+ }
+ /**
+ * <code>string SerialNumber = 2;</code>
+ */
+ public com.google.protobuf.ByteString
+ getSerialNumberBytes() {
+ java.lang.Object ref = serialNumber_;
+ if (ref instanceof java.lang.String) {
+ com.google.protobuf.ByteString b =
+ com.google.protobuf.ByteString.copyFromUtf8(
+ (java.lang.String) ref);
+ serialNumber_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+
+ private byte memoizedIsInitialized = -1;
+ public final boolean isInitialized() {
+ byte isInitialized = memoizedIsInitialized;
+ if (isInitialized == 1) return true;
+ if (isInitialized == 0) return false;
+
+ memoizedIsInitialized = 1;
+ return true;
+ }
+
+ public void writeTo(com.google.protobuf.CodedOutputStream output)
+ throws java.io.IOException {
+ if (authenticated_ != false) {
+ output.writeBool(1, authenticated_);
+ }
+ if (!getSerialNumberBytes().isEmpty()) {
+ com.google.protobuf.GeneratedMessageV3.writeString(output, 2, serialNumber_);
+ }
+ unknownFields.writeTo(output);
+ }
+
+ public int getSerializedSize() {
+ int size = memoizedSize;
+ if (size != -1) return size;
+
+ size = 0;
+ if (authenticated_ != false) {
+ size += com.google.protobuf.CodedOutputStream
+ .computeBoolSize(1, authenticated_);
+ }
+ if (!getSerialNumberBytes().isEmpty()) {
+ size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, serialNumber_);
+ }
+ size += unknownFields.getSerializedSize();
+ memoizedSize = size;
+ return size;
+ }
+
+ @java.lang.Override
+ public boolean equals(final java.lang.Object obj) {
+ if (obj == this) {
+ return true;
+ }
+ if (!(obj instanceof com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.ExternalClientLoginResponse)) {
+ return super.equals(obj);
+ }
+ com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.ExternalClientLoginResponse other = (com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.ExternalClientLoginResponse) obj;
+
+ boolean result = true;
+ result = result && (getAuthenticated()
+ == other.getAuthenticated());
+ result = result && getSerialNumber()
+ .equals(other.getSerialNumber());
+ result = result && unknownFields.equals(other.unknownFields);
+ return result;
+ }
+
+ @java.lang.Override
+ public int hashCode() {
+ if (memoizedHashCode != 0) {
+ return memoizedHashCode;
+ }
+ int hash = 41;
+ hash = (19 * hash) + getDescriptor().hashCode();
+ hash = (37 * hash) + AUTHENTICATED_FIELD_NUMBER;
+ hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+ getAuthenticated());
+ hash = (37 * hash) + SERIALNUMBER_FIELD_NUMBER;
+ hash = (53 * hash) + getSerialNumber().hashCode();
+ hash = (29 * hash) + unknownFields.hashCode();
+ memoizedHashCode = hash;
+ return hash;
+ }
+
+ public static com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.ExternalClientLoginResponse parseFrom(
+ java.nio.ByteBuffer data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.ExternalClientLoginResponse parseFrom(
+ java.nio.ByteBuffer data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.ExternalClientLoginResponse parseFrom(
+ com.google.protobuf.ByteString data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.ExternalClientLoginResponse parseFrom(
+ com.google.protobuf.ByteString data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.ExternalClientLoginResponse parseFrom(byte[] data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.ExternalClientLoginResponse parseFrom(
+ byte[] data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.ExternalClientLoginResponse parseFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input);
+ }
+ public static com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.ExternalClientLoginResponse parseFrom(
+ java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input, extensionRegistry);
+ }
+ public static com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.ExternalClientLoginResponse parseDelimitedFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseDelimitedWithIOException(PARSER, input);
+ }
+ public static com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.ExternalClientLoginResponse parseDelimitedFrom(
+ java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+ }
+ public static com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.ExternalClientLoginResponse parseFrom(
+ com.google.protobuf.CodedInputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input);
+ }
+ public static com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.ExternalClientLoginResponse parseFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input, extensionRegistry);
+ }
+
+ public Builder newBuilderForType() { return newBuilder(); }
+ public static Builder newBuilder() {
+ return DEFAULT_INSTANCE.toBuilder();
+ }
+ public static Builder newBuilder(com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.ExternalClientLoginResponse prototype) {
+ return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+ }
+ public Builder toBuilder() {
+ return this == DEFAULT_INSTANCE
+ ? new Builder() : new Builder().mergeFrom(this);
+ }
+
+ @java.lang.Override
+ protected Builder newBuilderForType(
+ com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+ Builder builder = new Builder(parent);
+ return builder;
+ }
+ /**
+ * Protobuf type {@code Tango.PMR.Integration.ExternalClientLoginResponse}
+ */
+ public static final class Builder extends
+ com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+ // @@protoc_insertion_point(builder_implements:Tango.PMR.Integration.ExternalClientLoginResponse)
+ com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.ExternalClientLoginResponseOrBuilder {
+ public static final com.google.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.internal_static_Tango_PMR_Integration_ExternalClientLoginResponse_descriptor;
+ }
+
+ protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.internal_static_Tango_PMR_Integration_ExternalClientLoginResponse_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.ExternalClientLoginResponse.class, com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.ExternalClientLoginResponse.Builder.class);
+ }
+
+ // Construct using com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.ExternalClientLoginResponse.newBuilder()
+ private Builder() {
+ maybeForceBuilderInitialization();
+ }
+
+ private Builder(
+ com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+ super(parent);
+ maybeForceBuilderInitialization();
+ }
+ private void maybeForceBuilderInitialization() {
+ if (com.google.protobuf.GeneratedMessageV3
+ .alwaysUseFieldBuilders) {
+ }
+ }
+ public Builder clear() {
+ super.clear();
+ authenticated_ = false;
+
+ serialNumber_ = "";
+
+ return this;
+ }
+
+ public com.google.protobuf.Descriptors.Descriptor
+ getDescriptorForType() {
+ return com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.internal_static_Tango_PMR_Integration_ExternalClientLoginResponse_descriptor;
+ }
+
+ public com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.ExternalClientLoginResponse getDefaultInstanceForType() {
+ return com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.ExternalClientLoginResponse.getDefaultInstance();
+ }
+
+ public com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.ExternalClientLoginResponse build() {
+ com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.ExternalClientLoginResponse result = buildPartial();
+ if (!result.isInitialized()) {
+ throw newUninitializedMessageException(result);
+ }
+ return result;
+ }
+
+ public com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.ExternalClientLoginResponse buildPartial() {
+ com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.ExternalClientLoginResponse result = new com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.ExternalClientLoginResponse(this);
+ result.authenticated_ = authenticated_;
+ result.serialNumber_ = serialNumber_;
+ onBuilt();
+ return result;
+ }
+
+ public Builder clone() {
+ return (Builder) super.clone();
+ }
+ public Builder setField(
+ com.google.protobuf.Descriptors.FieldDescriptor field,
+ java.lang.Object value) {
+ return (Builder) super.setField(field, value);
+ }
+ public Builder clearField(
+ com.google.protobuf.Descriptors.FieldDescriptor field) {
+ return (Builder) super.clearField(field);
+ }
+ public Builder clearOneof(
+ com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+ return (Builder) super.clearOneof(oneof);
+ }
+ public Builder setRepeatedField(
+ com.google.protobuf.Descriptors.FieldDescriptor field,
+ int index, java.lang.Object value) {
+ return (Builder) super.setRepeatedField(field, index, value);
+ }
+ public Builder addRepeatedField(
+ com.google.protobuf.Descriptors.FieldDescriptor field,
+ java.lang.Object value) {
+ return (Builder) super.addRepeatedField(field, value);
+ }
+ public Builder mergeFrom(com.google.protobuf.Message other) {
+ if (other instanceof com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.ExternalClientLoginResponse) {
+ return mergeFrom((com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.ExternalClientLoginResponse)other);
+ } else {
+ super.mergeFrom(other);
+ return this;
+ }
+ }
+
+ public Builder mergeFrom(com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.ExternalClientLoginResponse other) {
+ if (other == com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.ExternalClientLoginResponse.getDefaultInstance()) return this;
+ if (other.getAuthenticated() != false) {
+ setAuthenticated(other.getAuthenticated());
+ }
+ if (!other.getSerialNumber().isEmpty()) {
+ serialNumber_ = other.serialNumber_;
+ onChanged();
+ }
+ this.mergeUnknownFields(other.unknownFields);
+ onChanged();
+ return this;
+ }
+
+ public final boolean isInitialized() {
+ return true;
+ }
+
+ public Builder mergeFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.ExternalClientLoginResponse parsedMessage = null;
+ try {
+ parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ parsedMessage = (com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.ExternalClientLoginResponse) e.getUnfinishedMessage();
+ throw e.unwrapIOException();
+ } finally {
+ if (parsedMessage != null) {
+ mergeFrom(parsedMessage);
+ }
+ }
+ return this;
+ }
+
+ private boolean authenticated_ ;
+ /**
+ * <code>bool Authenticated = 1;</code>
+ */
+ public boolean getAuthenticated() {
+ return authenticated_;
+ }
+ /**
+ * <code>bool Authenticated = 1;</code>
+ */
+ public Builder setAuthenticated(boolean value) {
+
+ authenticated_ = value;
+ onChanged();
+ return this;
+ }
+ /**
+ * <code>bool Authenticated = 1;</code>
+ */
+ public Builder clearAuthenticated() {
+
+ authenticated_ = false;
+ onChanged();
+ return this;
+ }
+
+ private java.lang.Object serialNumber_ = "";
+ /**
+ * <code>string SerialNumber = 2;</code>
+ */
+ public java.lang.String getSerialNumber() {
+ java.lang.Object ref = serialNumber_;
+ if (!(ref instanceof java.lang.String)) {
+ com.google.protobuf.ByteString bs =
+ (com.google.protobuf.ByteString) ref;
+ java.lang.String s = bs.toStringUtf8();
+ serialNumber_ = s;
+ return s;
+ } else {
+ return (java.lang.String) ref;
+ }
+ }
+ /**
+ * <code>string SerialNumber = 2;</code>
+ */
+ public com.google.protobuf.ByteString
+ getSerialNumberBytes() {
+ java.lang.Object ref = serialNumber_;
+ if (ref instanceof String) {
+ com.google.protobuf.ByteString b =
+ com.google.protobuf.ByteString.copyFromUtf8(
+ (java.lang.String) ref);
+ serialNumber_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+ /**
+ * <code>string SerialNumber = 2;</code>
+ */
+ public Builder setSerialNumber(
+ java.lang.String value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+
+ serialNumber_ = value;
+ onChanged();
+ return this;
+ }
+ /**
+ * <code>string SerialNumber = 2;</code>
+ */
+ public Builder clearSerialNumber() {
+
+ serialNumber_ = getDefaultInstance().getSerialNumber();
+ onChanged();
+ return this;
+ }
+ /**
+ * <code>string SerialNumber = 2;</code>
+ */
+ public Builder setSerialNumberBytes(
+ com.google.protobuf.ByteString value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ checkByteStringIsUtf8(value);
+
+ serialNumber_ = value;
+ onChanged();
+ return this;
+ }
+ public final Builder setUnknownFields(
+ final com.google.protobuf.UnknownFieldSet unknownFields) {
+ return super.setUnknownFieldsProto3(unknownFields);
+ }
+
+ public final Builder mergeUnknownFields(
+ final com.google.protobuf.UnknownFieldSet unknownFields) {
+ return super.mergeUnknownFields(unknownFields);
+ }
+
+
+ // @@protoc_insertion_point(builder_scope:Tango.PMR.Integration.ExternalClientLoginResponse)
+ }
+
+ // @@protoc_insertion_point(class_scope:Tango.PMR.Integration.ExternalClientLoginResponse)
+ private static final com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.ExternalClientLoginResponse DEFAULT_INSTANCE;
+ static {
+ DEFAULT_INSTANCE = new com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.ExternalClientLoginResponse();
+ }
+
+ public static com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.ExternalClientLoginResponse getDefaultInstance() {
+ return DEFAULT_INSTANCE;
+ }
+
+ private static final com.google.protobuf.Parser<ExternalClientLoginResponse>
+ PARSER = new com.google.protobuf.AbstractParser<ExternalClientLoginResponse>() {
+ public ExternalClientLoginResponse parsePartialFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return new ExternalClientLoginResponse(input, extensionRegistry);
+ }
+ };
+
+ public static com.google.protobuf.Parser<ExternalClientLoginResponse> parser() {
+ return PARSER;
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Parser<ExternalClientLoginResponse> getParserForType() {
+ return PARSER;
+ }
+
+ public com.twine.tango.pmr.integration.ExternalClientLoginResponseOuterClass.ExternalClientLoginResponse getDefaultInstanceForType() {
+ return DEFAULT_INSTANCE;
+ }
+
+ }
+
+ private static final com.google.protobuf.Descriptors.Descriptor
+ internal_static_Tango_PMR_Integration_ExternalClientLoginResponse_descriptor;
+ private static final
+ com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internal_static_Tango_PMR_Integration_ExternalClientLoginResponse_fieldAccessorTable;
+
+ public static com.google.protobuf.Descriptors.FileDescriptor
+ getDescriptor() {
+ return descriptor;
+ }
+ private static com.google.protobuf.Descriptors.FileDescriptor
+ descriptor;
+ static {
+ java.lang.String[] descriptorData = {
+ "\n!ExternalClientLoginResponse.proto\022\025Tan" +
+ "go.PMR.Integration\"J\n\033ExternalClientLogi" +
+ "nResponse\022\025\n\rAuthenticated\030\001 \001(\010\022\024\n\014Seri" +
+ "alNumber\030\002 \001(\tB!\n\037com.twine.tango.pmr.in" +
+ "tegrationb\006proto3"
+ };
+ com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
+ new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() {
+ public com.google.protobuf.ExtensionRegistry assignDescriptors(
+ com.google.protobuf.Descriptors.FileDescriptor root) {
+ descriptor = root;
+ return null;
+ }
+ };
+ com.google.protobuf.Descriptors.FileDescriptor
+ .internalBuildGeneratedFileFrom(descriptorData,
+ new com.google.protobuf.Descriptors.FileDescriptor[] {
+ }, assigner);
+ internal_static_Tango_PMR_Integration_ExternalClientLoginResponse_descriptor =
+ getDescriptor().getMessageTypes().get(0);
+ internal_static_Tango_PMR_Integration_ExternalClientLoginResponse_fieldAccessorTable = new
+ com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+ internal_static_Tango_PMR_Integration_ExternalClientLoginResponse_descriptor,
+ new java.lang.String[] { "Authenticated", "SerialNumber", });
+ }
+
+ // @@protoc_insertion_point(outer_class_scope)
+}
diff --git a/Software/Android_Studio/Tango.PMR/src/main/res/raw/packages.txt b/Software/Android_Studio/Tango.PMR/src/main/res/raw/packages.txt
index 803095d92..7dcb7e0f1 100644
--- a/Software/Android_Studio/Tango.PMR/src/main/res/raw/packages.txt
+++ b/Software/Android_Studio/Tango.PMR/src/main/res/raw/packages.txt
@@ -1,4 +1,5 @@
common
+integration
jobs
stubs
synchronization
diff --git a/Software/Android_Studio/Tango.SharedUI/build.gradle b/Software/Android_Studio/Tango.SharedUI/build.gradle
index 00bf0b351..832a8eb22 100644
--- a/Software/Android_Studio/Tango.SharedUI/build.gradle
+++ b/Software/Android_Studio/Tango.SharedUI/build.gradle
@@ -59,4 +59,8 @@ dependencies {
compile globalDependencies.protobuf
implementation project(':Tango.PMR')
implementation project(':Tango.Web')
+ compile 'com.google.dagger:dagger:2.11'
+ implementation project(':Tango.Transport')
+ implementation project(':Tango.Integration')
+ compile 'com.squareup:otto:1.3.8'
}
diff --git a/Software/Android_Studio/Tango.Stubs.UI/build.gradle b/Software/Android_Studio/Tango.Stubs.UI/build.gradle
index 42109f2a8..41853210a 100644
--- a/Software/Android_Studio/Tango.Stubs.UI/build.gradle
+++ b/Software/Android_Studio/Tango.Stubs.UI/build.gradle
@@ -12,7 +12,7 @@ android {
versionCode 1
versionName "1.0"
vectorDrawables.useSupportLibrary = true
-
+ multiDexEnabled true
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
diff --git a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/App.java b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/App.java
index d0437aaa1..96b5b490d 100644
--- a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/App.java
+++ b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/App.java
@@ -1,9 +1,5 @@
package com.twine.tango.stubs.ui;
-import android.app.Application;
-import android.content.Context;
-
-import com.elvishew.xlog.XLog;
import com.twine.tango.sharedui.TangoApplication;
import com.twine.tango.stubs.ui.dagger.ApplicationComponent;
import com.twine.tango.stubs.ui.dagger.ApplicationModule;
diff --git a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/ApplicationComponent.java b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/ApplicationComponent.java
index ab0b84c25..cbd61f9ee 100644
--- a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/ApplicationComponent.java
+++ b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/ApplicationComponent.java
@@ -16,7 +16,7 @@ import dagger.Component;
*/
@Singleton
-@Component(modules = {ApplicationModule.class, ViewModelsModule.class, EventBusModule.class, NotificationModule.class, TransportModule.class, NavigationModule.class})
+@Component(modules = {ApplicationModule.class, ViewModelsModule.class, EventBusModule.class, NotificationModule.class, NavigationModule.class, IntegrationModule.class})
public interface ApplicationComponent
{
diff --git a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/IntegrationModule.java b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/IntegrationModule.java
new file mode 100644
index 000000000..b06d9aa67
--- /dev/null
+++ b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/IntegrationModule.java
@@ -0,0 +1,50 @@
+package com.twine.tango.stubs.ui.dagger;
+
+import com.twine.tango.integration.operators.IMachineOperator;
+import com.twine.tango.integration.operators.MachineOperator;
+import com.twine.tango.integration.providers.IMachineIdentityProvider;
+import com.twine.tango.integration.providers.MachineIdentityProvider;
+import com.twine.tango.integration.services.IExternalBridgeService;
+import com.twine.tango.integration.services.ISynchronizationService;
+import com.twine.tango.integration.services.ExternalBridgeService;
+import com.twine.tango.integration.services.SynchronizationService;
+import com.twine.tango.transport.adapters.TcpTransportAdapter;
+
+import javax.inject.Singleton;
+import dagger.Module;
+import dagger.Provides;
+
+/**
+ * Created by Roy on 11/6/2017.
+ */
+@Module
+public class IntegrationModule
+{
+ @Provides
+ @Singleton
+ public IExternalBridgeService provideBridgeService(IMachineIdentityProvider machineIdentityProvider,IMachineOperator machineOperator)
+ {
+ return new ExternalBridgeService(machineIdentityProvider,machineOperator);
+ }
+
+ @Provides
+ @Singleton
+ public ISynchronizationService provideSynchronizationService(IMachineIdentityProvider machineIdentityProvider, IExternalBridgeService bridgeService)
+ {
+ return new SynchronizationService(machineIdentityProvider, bridgeService);
+ }
+
+ @Provides
+ @Singleton
+ public IMachineIdentityProvider provideMachineIdentityProvider()
+ {
+ return new MachineIdentityProvider();
+ }
+
+ @Provides
+ @Singleton
+ public IMachineOperator providerMachineOperator()
+ {
+ return new MachineOperator(new TcpTransportAdapter("10.0.2.2", 9999));
+ }
+}
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.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/ViewModelsModule.java b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/ViewModelsModule.java
index 927511efc..b7e494ecf 100644
--- a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/ViewModelsModule.java
+++ b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/dagger/ViewModelsModule.java
@@ -1,6 +1,9 @@
package com.twine.tango.stubs.ui.dagger;
import com.squareup.otto.Bus;
+import com.twine.tango.integration.operators.IMachineOperator;
+import com.twine.tango.integration.services.IExternalBridgeService;
+import com.twine.tango.integration.services.ISynchronizationService;
import com.twine.tango.sharedui.navigation.INavigationProvider;
import com.twine.tango.sharedui.notifications.INotificationProvider;
import com.twine.tango.stubs.ui.views.login.LoginFragmentVM;
@@ -26,9 +29,9 @@ public class ViewModelsModule
@Provides
@Singleton
- public MainActivityVM provideMainActivityVM(Bus eventBus, INotificationProvider notificationProvider, INavigationProvider navigationProvider, ITransporter transporter)
+ public MainActivityVM provideMainActivityVM(Bus eventBus, INotificationProvider notificationProvider, INavigationProvider navigationProvider, IMachineOperator machineOperator, ISynchronizationService synchronizationService, IExternalBridgeService externalBridgeService)
{
- return new MainActivityVM(eventBus, notificationProvider, navigationProvider, transporter);
+ return new MainActivityVM(eventBus, notificationProvider, navigationProvider, machineOperator, externalBridgeService, synchronizationService);
}
@Provides
@@ -54,8 +57,8 @@ public class ViewModelsModule
@Provides
@Singleton
- public StubFragmentVM provideStubFragmentVM(Bus eventBus, INotificationProvider notificationProvider, ITransporter transporter)
+ public StubFragmentVM provideStubFragmentVM(Bus eventBus, INotificationProvider notificationProvider, IMachineOperator machineOperator)
{
- return new StubFragmentVM(eventBus, notificationProvider, transporter);
+ return new StubFragmentVM(eventBus, notificationProvider, machineOperator);
}
}
diff --git a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/main/MainActivityVM.java b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/main/MainActivityVM.java
index e77cc0810..64d69b0e6 100644
--- a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/main/MainActivityVM.java
+++ b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/main/MainActivityVM.java
@@ -2,6 +2,9 @@ package com.twine.tango.stubs.ui.views.main;
import com.squareup.otto.Bus;
import com.squareup.otto.Subscribe;
+import com.twine.tango.integration.operators.IMachineOperator;
+import com.twine.tango.integration.services.IExternalBridgeService;
+import com.twine.tango.integration.services.ISynchronizationService;
import com.twine.tango.models.User;
import com.twine.tango.sharedui.mvvm.DependencyProperty;
import com.twine.tango.sharedui.mvvm.RelayCommand;
@@ -10,9 +13,10 @@ import com.twine.tango.sharedui.navigation.INavigationProvider;
import com.twine.tango.sharedui.notifications.INotificationProvider;
import com.twine.tango.stubs.ui.Events.LoginEvent;
import com.twine.tango.stubs.ui.views.main.IMainActivity.Navigation;
-import com.twine.tango.transport.ITransporter;
import com.twine.tango.transport.TransportComponentState;
+import java.io.IOException;
+
import javax.inject.Inject;
import io.reactivex.android.schedulers.AndroidSchedulers;
@@ -24,7 +28,9 @@ public class MainActivityVM extends ViewModelBase<IMainActivity>
private User currentUser;
private INotificationProvider notificationProvider;
private INavigationProvider navigationProvider;
- private ITransporter transporter;
+ private IMachineOperator machineOperator;
+ private ISynchronizationService synchronizationService;
+ private IExternalBridgeService externalBridgeService;
public DependencyProperty<Boolean> isConnected;
@@ -34,33 +40,43 @@ public class MainActivityVM extends ViewModelBase<IMainActivity>
@Inject
- public MainActivityVM(Bus eventBus, INotificationProvider notificationProvider, INavigationProvider navigationProvider,ITransporter transporter)
+ public MainActivityVM(Bus eventBus, INotificationProvider notificationProvider, INavigationProvider navigationProvider, IMachineOperator machineOperator, IExternalBridgeService externalBridgeService, ISynchronizationService synchronizationService)
{
this.eventBus = eventBus;
this.notificationProvider = notificationProvider;
this.navigationProvider = navigationProvider;
- this.transporter = transporter;
+ this.machineOperator = machineOperator;
+ this.synchronizationService = synchronizationService;
+ this.externalBridgeService = externalBridgeService;
this.eventBus.register(this);
isConnected = new DependencyProperty<>(false);
- connectCommand = new RelayCommand(this::connect,() -> this.transporter.getState() != TransportComponentState.Connected);
- disconnectCommand = new RelayCommand(this::disconnect,() -> this.transporter.getState() == TransportComponentState.Connected);
+ connectCommand = new RelayCommand(this::connect,() -> this.machineOperator.getState() != TransportComponentState.Connected);
+ disconnectCommand = new RelayCommand(this::disconnect,() -> this.machineOperator.getState() == TransportComponentState.Connected);
- this.transporter.addStateChangedListener((sender,e) ->
- isConnected.set(this.transporter.getState() == TransportComponentState.Connected));
+ this.machineOperator.addStateChangedListener((sender, e) ->
+ isConnected.set(this.machineOperator.getState() == TransportComponentState.Connected));
+
+ try
+ {
+ externalBridgeService.start();
+ } catch (IOException e)
+ {
+ e.printStackTrace();
+ }
}
private void connect()
{
- transporter.connect().observeOn(AndroidSchedulers.mainThread()).subscribe(() ->
+ machineOperator.connect().observeOn(AndroidSchedulers.mainThread()).subscribe(() ->
invalidateCommands(),(ex) ->
notificationProvider.showMessage(view,"Could not connect the Transporter."));
}
private void disconnect()
{
- transporter.disconnect().observeOn(AndroidSchedulers.mainThread()).subscribe(() ->
+ machineOperator.disconnect().observeOn(AndroidSchedulers.mainThread()).subscribe(() ->
invalidateCommands(),(ex) ->
notificationProvider.showMessage(view,"Could not disconnect the Transporter."));
}
diff --git a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/stub/StubFragmentVM.java b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/stub/StubFragmentVM.java
index 8a052b38c..fe237bcd8 100644
--- a/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/stub/StubFragmentVM.java
+++ b/Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/stub/StubFragmentVM.java
@@ -3,6 +3,7 @@ package com.twine.tango.stubs.ui.views.stub;
import com.elvishew.xlog.XLog;
import com.squareup.otto.Bus;
import com.squareup.otto.Subscribe;
+import com.twine.tango.integration.operators.IMachineOperator;
import com.twine.tango.sharedui.mvvm.RelayCommand;
import com.twine.tango.sharedui.notifications.INotificationProvider;
import com.twine.tango.stubs.AvailableStub;
@@ -24,21 +25,21 @@ public class StubFragmentVM extends ViewModelBase<IStubFragment>
{
private Bus eventBus;
private INotificationProvider notificationProvider;
- private ITransporter transporter;
+ private IMachineOperator machineOperator;
public DependencyProperty<AvailableStub> availableStub;
public DependencyProperty<StubBase> stub;
public DependencyProperty<String> response;
public RelayCommand runCommand;
@Inject
- public StubFragmentVM(Bus eventBus, INotificationProvider notificationProvider, ITransporter transporter)
+ public StubFragmentVM(Bus eventBus, INotificationProvider notificationProvider, IMachineOperator machineOperator)
{
availableStub = new DependencyProperty<>();
stub = new DependencyProperty<>();
response = new DependencyProperty<>("");
this.eventBus = eventBus;
- this.transporter = transporter;
+ this.machineOperator = machineOperator;
this.notificationProvider = notificationProvider;
this.eventBus.register(this);
@@ -49,7 +50,7 @@ public class StubFragmentVM extends ViewModelBase<IStubFragment>
public void handleStubSelectedEvent(StubSelectedEvent e)
{
availableStub.set(e.getStub());
- stub.set(availableStub.get().createInstance(transporter));
+ stub.set(availableStub.get().createInstance(machineOperator));
}
private void runSelectedStub()
diff --git a/Software/Android_Studio/Tango.Stubs/src/main/java/com/twine/tango/stubs/stubs/Calculate.java b/Software/Android_Studio/Tango.Stubs/src/main/java/com/twine/tango/stubs/stubs/Calculate.java
index 68c697b67..1e0d6f199 100644
--- a/Software/Android_Studio/Tango.Stubs/src/main/java/com/twine/tango/stubs/stubs/Calculate.java
+++ b/Software/Android_Studio/Tango.Stubs/src/main/java/com/twine/tango/stubs/stubs/Calculate.java
@@ -56,7 +56,7 @@ public class Calculate extends StubBase
MessageFactory.createTangoMessage(
CalculateRequest.class,
CalculateRequest.newBuilder().setA(num1).setB(num2).build())).subscribe((response) ->
- subject.onNext(String.valueOf(response.getSum())), subject::onError);
+ subject.onNext(String.valueOf(response.getMessage().getSum())), subject::onError);
return subject;
}
diff --git a/Software/Android_Studio/Tango.Stubs/src/main/java/com/twine/tango/stubs/stubs/Progress.java b/Software/Android_Studio/Tango.Stubs/src/main/java/com/twine/tango/stubs/stubs/Progress.java
index 0b4d656f9..e1838a34f 100644
--- a/Software/Android_Studio/Tango.Stubs/src/main/java/com/twine/tango/stubs/stubs/Progress.java
+++ b/Software/Android_Studio/Tango.Stubs/src/main/java/com/twine/tango/stubs/stubs/Progress.java
@@ -51,7 +51,7 @@ public class Progress extends StubBase
MessageFactory.createTangoMessage(
ProgressRequest.class,
ProgressRequest.newBuilder().setAmount(amount.get().intValue()).setDelay(delay.get().intValue()).build())).subscribe((response) ->
- subject.onNext(String.valueOf(response.getProgress())));
+ subject.onNext(String.valueOf(response.getMessage().getProgress())));
return subject;
}
diff --git a/Software/Android_Studio/Tango.Synchronization/build.gradle b/Software/Android_Studio/Tango.Synchronization/build.gradle
index 7134933aa..a8a33e319 100644
--- a/Software/Android_Studio/Tango.Synchronization/build.gradle
+++ b/Software/Android_Studio/Tango.Synchronization/build.gradle
@@ -43,7 +43,7 @@ dependencies {
compile globalDependencies.daggerAndroid
implementation project(':Tango.DAL')
implementation project(':Tango.Integration')
-
compile globalDependencies.rxJava
compile globalDependencies.rxJavaAndroid
+ implementation project(':Tango.Transport')
}
diff --git a/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/ITransportAdapter.java b/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/ITransportAdapter.java
index 083ab60fd..abd12e0f0 100644
--- a/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/ITransportAdapter.java
+++ b/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/ITransportAdapter.java
@@ -9,33 +9,49 @@ import java.io.IOException;
* Represents a transport adapter capable of connecting, writing and receiving data from a serial stream.
*/
public interface ITransportAdapter extends ITransportComponent {
-
+
/**
* Writes the specified data to the stream.
*
* @param data the data
+ * @throws ObjectDisposedException the object disposed exception
+ * @throws IOException the io exception
*/
void write(byte[] data) throws ObjectDisposedException, IOException;
-
+
/**
* Add data available listener.
*
* @param handler event handler
*/
void setDataAvailableListener(IEventHandler<byte[]> handler);
-
+
/**
* Gets the adapter address.
*
* @return the address
*/
String getAddress();
-
+
/**
* Sets the adapter address.
*
* @param address the address
*/
void setAddress(String address);
-
+
+
+ /**
+ * Gets whether this adapter is authenticated.
+ *
+ * @return the authenticated
+ */
+ boolean isAuthenticated();
+
+ /**
+ * Sets whether this adapter is authenticated.
+ *
+ * @param authenticated the authenticated
+ */
+ void setAuthenticated(boolean authenticated);
}
diff --git a/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/ITransporter.java b/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/ITransporter.java
index ae5f6b5dc..9d2bce329 100644
--- a/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/ITransporter.java
+++ b/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/ITransporter.java
@@ -32,7 +32,7 @@ public interface ITransporter extends ITransportComponent {
* @param request the request
* @return the single
*/
- <Request extends GeneratedMessageV3,Response extends GeneratedMessageV3> Single<Response> sendRequest(TangoMessage<Request> request);
+ <Request extends GeneratedMessageV3,Response extends GeneratedMessageV3> Single<TangoMessage<Response>> sendRequest(TangoMessage<Request> request);
/**
* Sends a request on the specified adapter.
@@ -43,7 +43,7 @@ public interface ITransporter extends ITransportComponent {
* @param adapter the adapter
* @return the single
*/
- <Request extends GeneratedMessageV3,Response extends GeneratedMessageV3> Single<Response> sendRequest(TangoMessage<Request> request,ITransportAdapter adapter);
+ <Request extends GeneratedMessageV3,Response extends GeneratedMessageV3> Single<TangoMessage<Response>> sendRequest(TangoMessage<Request> request,ITransportAdapter adapter);
/**
* Sends a continuous request on all adapters.
@@ -53,7 +53,7 @@ public interface ITransporter extends ITransportComponent {
* @param request the request
* @return the observable
*/
- <Request extends GeneratedMessageV3,Response extends GeneratedMessageV3> Observable<Response> sendContinuousRequest(TangoMessage<Request> request);
+ <Request extends GeneratedMessageV3,Response extends GeneratedMessageV3> Observable<TangoMessage<Response>> sendContinuousRequest(TangoMessage<Request> request);
/**
* Sends a continuous request on the specified adapter.
@@ -64,7 +64,7 @@ public interface ITransporter extends ITransportComponent {
* @param adapter the adapter
* @return the observable
*/
- <Request extends GeneratedMessageV3,Response extends GeneratedMessageV3> Observable<Response> sendContinuousRequest(TangoMessage<Request> request, ITransportAdapter adapter);
+ <Request extends GeneratedMessageV3,Response extends GeneratedMessageV3> Observable<TangoMessage<Response>> sendContinuousRequest(TangoMessage<Request> request, ITransportAdapter adapter);
/**
* Sends a response.
diff --git a/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/TransportAdapterBase.java b/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/TransportAdapterBase.java
index d5301296b..b9221ea27 100644
--- a/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/TransportAdapterBase.java
+++ b/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/TransportAdapterBase.java
@@ -13,8 +13,10 @@ import io.reactivex.Completable;
/**
* Represents an {@link ITransportAdapter} base class.
*/
-public abstract class TransportAdapterBase implements ITransportAdapter {
-
+public abstract class TransportAdapterBase implements ITransportAdapter
+{
+
+ private boolean isAuthenticated;
private String address;
private Event<TransportComponentState> stateChangedEvent;
private IEventHandler<byte[]> dataAvailableListener;
@@ -26,31 +28,48 @@ public abstract class TransportAdapterBase implements ITransportAdapter {
public TransportAdapterBase()
{
stateChangedEvent = new Event<>();
+ setAuthenticated(true);
}
public abstract void write(byte[] data) throws ObjectDisposedException, IOException;
-
+
public abstract Completable connect();
-
+
public abstract Completable disconnect();
-
+
@Override
- public void setDataAvailableListener(IEventHandler<byte[]> handler) {
+ public void setDataAvailableListener(IEventHandler<byte[]> handler)
+ {
dataAvailableListener = handler;
}
-
+
@Override
- public String getAddress() {
+ public String getAddress()
+ {
return this.address;
}
-
+
@Override
- public void setAddress(String address) {
+ public void setAddress(String address)
+ {
this.address = address;
}
-
+
@Override
- public void addStateChangedListener(IEventHandler<TransportComponentState> listener) {
+ public boolean isAuthenticated()
+ {
+ return isAuthenticated;
+ }
+
+ @Override
+ public void setAuthenticated(boolean authenticated)
+ {
+ isAuthenticated = authenticated;
+ }
+
+ @Override
+ public void addStateChangedListener(IEventHandler<TransportComponentState> listener)
+ {
stateChangedEvent.addListener(listener);
}
@@ -61,7 +80,8 @@ public abstract class TransportAdapterBase implements ITransportAdapter {
}
@Override
- public TransportComponentState getState() {
+ public TransportComponentState getState()
+ {
return state;
}
@@ -70,19 +90,24 @@ public abstract class TransportAdapterBase implements ITransportAdapter {
*
* @param state the state
*/
- protected void setState(TransportComponentState state) {
+ protected void setState(TransportComponentState state)
+ {
this.state = state;
- if (stateChangedEvent != null) {
- try {
+ if (stateChangedEvent != null)
+ {
+ try
+ {
stateChangedEvent.invoke(this, this.state);
- } catch (Exception e) {
+ } catch (Exception e)
+ {
e.printStackTrace();
}
}
}
-
+
@Override
- public void dispose() {
+ public void dispose()
+ {
disconnect().blockingAwait();
setState(TransportComponentState.Disposed);
}
@@ -92,8 +117,10 @@ public abstract class TransportAdapterBase implements ITransportAdapter {
*
* @throws ObjectDisposedException the object disposed exception
*/
- protected void throwIfDisposed() throws ObjectDisposedException {
- if (state == TransportComponentState.Disposed) {
+ protected void throwIfDisposed() throws ObjectDisposedException
+ {
+ if (state == TransportComponentState.Disposed)
+ {
throw new ObjectDisposedException("The adapter is in a " + state + " state.");
}
}
@@ -103,11 +130,15 @@ public abstract class TransportAdapterBase implements ITransportAdapter {
*
* @param data the data
*/
- protected void onDataAvailable(byte[] data) {
- if (dataAvailableListener != null) {
- try {
+ protected void onDataAvailable(byte[] data)
+ {
+ if (dataAvailableListener != null)
+ {
+ try
+ {
dataAvailableListener.invoke(this, data);
- } catch (Exception e) {
+ } catch (Exception e)
+ {
e.printStackTrace();
}
}
@@ -118,7 +149,8 @@ public abstract class TransportAdapterBase implements ITransportAdapter {
*
* @param ex the ex
*/
- protected void onFailed(Exception ex) {
+ protected void onFailed(Exception ex)
+ {
disconnect().blockingAwait();
setState(TransportComponentState.Failed);
XLog.e(ex);
diff --git a/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/TransporterBase.java b/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/TransporterBase.java
index ca7f6ed92..51c4eedf8 100644
--- a/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/TransporterBase.java
+++ b/Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/TransporterBase.java
@@ -240,6 +240,13 @@ public abstract class TransporterBase implements ITransporter
return MessageFactory.parseMessageFromContainerAgnostic(container);
}
+ protected TangoMessage onParseTangoMessage(byte[] data) throws InvalidProtocolBufferException, NoSuchMethodException, IllegalAccessException, InvocationTargetException
+ {
+ MessageContainer container = onParseContainer(data);
+ GeneratedMessageV3 message = onParseMessage(container);
+ return MessageFactory.createTangoMessage(container,message);
+ }
+
//endregion
//region Constructors
@@ -336,9 +343,9 @@ public abstract class TransporterBase implements ITransporter
{
adapter.disconnect().blockingAwait();
}
-
+
setState(TransportComponentState.Disconnected);
-
+
XLog.i("Transporter disconnected...");
x.onComplete();
@@ -351,19 +358,19 @@ public abstract class TransporterBase implements ITransporter
}
@Override
- public <Request extends GeneratedMessageV3, Response extends GeneratedMessageV3> Single<Response> sendRequest(TangoMessage<Request> request)
+ public <Request extends GeneratedMessageV3, Response extends GeneratedMessageV3> Single<TangoMessage<Response>> sendRequest(TangoMessage<Request> request)
{
return sendRequest(request, null);
}
@Override
- public <Request extends GeneratedMessageV3, Response extends GeneratedMessageV3> Single<Response> sendRequest(TangoMessage<Request> request, ITransportAdapter adapter)
+ public <Request extends GeneratedMessageV3, Response extends GeneratedMessageV3> Single<TangoMessage<Response>> sendRequest(TangoMessage<Request> request, ITransportAdapter adapter)
{
XLog.i("Queuing request message: " + request.getClass().getSimpleName() + " Token: " + request.getContainer().getToken() + " on adapter: " + (adapter != null ? adapter.getAddress() : "ALL"));
XLog.i("Expected response: " + Response.Builder.class.getSimpleName());
- PublishSubject<Response> subject = PublishSubject.create();
- TransportMessage<Response> message = new TransportMessage<>(adapter, request.getContainer().getToken(), request, TransportMessageDirection.Request, onSerializingMessage(request), subject);
+ PublishSubject<TangoMessage<Response>> subject = PublishSubject.create();
+ TransportMessage<TangoMessage<Response>> message = new TransportMessage<>(adapter, request.getContainer().getToken(), request, TransportMessageDirection.Request, onSerializingMessage(request), subject);
sendingQueue.add(message);
Completable.timer(getRequestTimeout().getSeconds(), TimeUnit.SECONDS)
@@ -382,13 +389,13 @@ public abstract class TransporterBase implements ITransporter
}
@Override
- public <Request extends GeneratedMessageV3, Response extends GeneratedMessageV3> Observable<Response> sendContinuousRequest(TangoMessage<Request> request)
+ public <Request extends GeneratedMessageV3, Response extends GeneratedMessageV3> Observable<TangoMessage<Response>> sendContinuousRequest(TangoMessage<Request> request)
{
return sendContinuousRequest(request, null);
}
@Override
- public <Request extends GeneratedMessageV3, Response extends GeneratedMessageV3> Observable<Response> sendContinuousRequest(TangoMessage<Request> request, ITransportAdapter adapter)
+ public <Request extends GeneratedMessageV3, Response extends GeneratedMessageV3> Observable<TangoMessage<Response>> sendContinuousRequest(TangoMessage<Request> request, ITransportAdapter adapter)
{
XLog.i("Queuing continuous response request message: " + request.getClass().getSimpleName() + " Token: " + request.getContainer().getToken() + " on adapter: " + (adapter != null ? adapter.getAddress() : "ALL"));
XLog.i("Expected response: " + Response.Builder.class.getSimpleName());
@@ -396,8 +403,8 @@ public abstract class TransporterBase implements ITransporter
request.getContainer().setContinuous(true);
request.getContainer().setCompleted(false);
- PublishSubject<Response> subject = PublishSubject.create();
- TransportMessage<Response> message = new TransportMessage<>(adapter, request.getContainer().getToken(), request, TransportMessageDirection.Request, onSerializingMessage(request), subject);
+ PublishSubject<TangoMessage<Response>> subject = PublishSubject.create();
+ TransportMessage<TangoMessage<Response>> message = new TransportMessage<>(adapter, request.getContainer().getToken(), request, TransportMessageDirection.Request, onSerializingMessage(request), subject);
message.setContinuous(true);
sendingQueue.add(message);
@@ -473,8 +480,10 @@ public abstract class TransporterBase implements ITransporter
*
* @throws ObjectDisposedException the object disposed exception
*/
- protected void throwIfDisposed() throws ObjectDisposedException {
- if (state == TransportComponentState.Disposed) {
+ protected void throwIfDisposed() throws ObjectDisposedException
+ {
+ if (state == TransportComponentState.Disposed)
+ {
throw new ObjectDisposedException("The transporter is in a " + state + " state.");
}
}
@@ -568,13 +577,24 @@ public abstract class TransporterBase implements ITransporter
{
XLog.i("Message received on adapter: " + data.first.getAddress());
XLog.i("Parsing message container...");
- MessageContainer container = onParseContainer(data.second);
+
+ MessageContainer container;
+
+ try
+ {
+ container = onParseContainer(data.second);
+ } catch (Exception e)
+ {
+ XLog.e("Invalid message container received!", e);
+ continue;
+ }
+
XLog.i("Searching for pending request token: " + container.getToken());
TransportMessageBase request = stream(pendingRequests).singleOrDefault(x -> x.getToken().equals(container.getToken()), null);
if (request != null)
{
- XLog.i("Found pending request: " + request.getMessage().getClass().getSimpleName());
+ XLog.i("Found pending request: " + ((TangoMessage)request.getMessage()).getContainer().getType());
if (!request.isContinuous())
{
@@ -585,7 +605,7 @@ public abstract class TransporterBase implements ITransporter
try
{
XLog.i("Parsing inner response message and setting pending request task result...");
- request.setResult(onParseMessage(container), true);
+ request.setResult(onParseTangoMessage(data.second), true);
} catch (Exception ex)
{
XLog.e("Error parsing inner message", ex);
@@ -602,7 +622,7 @@ public abstract class TransporterBase implements ITransporter
{
XLog.i("Continuous sequence completed.");
}
- request.setResult(onParseMessage(container), container.getCompleted());
+ request.setResult(onParseTangoMessage(data.second), container.getCompleted());
} catch (Exception ex)
{
XLog.e("Error parsing inner message", ex);
diff --git a/Software/Android_Studio/Tango.UnitTesting/build.gradle b/Software/Android_Studio/Tango.UnitTesting/build.gradle
index 3b9a730c8..3f58e3803 100644
--- a/Software/Android_Studio/Tango.UnitTesting/build.gradle
+++ b/Software/Android_Studio/Tango.UnitTesting/build.gradle
@@ -42,7 +42,6 @@ dependencies {
implementation project(':Tango.Integration')
implementation project(':Tango.SharedUI')
implementation project(':Tango.Stubs')
- implementation project(':Tango.Synchronization')
implementation project(':Tango.Transport')
implementation project(':Tango.Web')
implementation project(':Tango.NativeBridge')
diff --git a/Software/Android_Studio/Tango.UnitTesting/src/androidTest/java/com/twine/tango/unittesting/Synchronization_TST.java b/Software/Android_Studio/Tango.UnitTesting/src/androidTest/java/com/twine/tango/unittesting/Synchronization_TST.java
index b162c2215..4713fb6cc 100644
--- a/Software/Android_Studio/Tango.UnitTesting/src/androidTest/java/com/twine/tango/unittesting/Synchronization_TST.java
+++ b/Software/Android_Studio/Tango.UnitTesting/src/androidTest/java/com/twine/tango/unittesting/Synchronization_TST.java
@@ -5,13 +5,11 @@ import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;
import com.elvishew.xlog.XLog;
-import com.twine.tango.dal.TangoDB;
import com.twine.tango.dal.dao.TangoDAO;
import com.twine.tango.dal.entities.Organization;
-import com.twine.tango.integration.MachineIdentityProvider;
-import com.twine.tango.synchronization.ITangoSynchronizer;
-import com.twine.tango.synchronization.TangoSynchronizer;
-import com.twine.tango.web.WebApiFactory;
+import com.twine.tango.integration.providers.MachineIdentityProvider;
+import com.twine.tango.integration.services.ISynchronizationService;
+import com.twine.tango.integration.services.SynchronizationService;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -38,7 +36,7 @@ public class Synchronization_TST
XLog.i(org.getName());
}
- ITangoSynchronizer synchronizer = new TangoSynchronizer(new MachineIdentityProvider());
+ ISynchronizationService synchronizer = new SynchronizationService(new MachineIdentityProvider());
synchronizer.synchronizeDB().subscribe(() ->
{
diff --git a/Software/Android_Studio/settings.gradle b/Software/Android_Studio/settings.gradle
index 7a7daf836..15bb94e3b 100644
--- a/Software/Android_Studio/settings.gradle
+++ b/Software/Android_Studio/settings.gradle
@@ -1 +1 @@
-include ':Tango.BL', ':Tango.Stubs.UI', ':Tango.SharedUI', ':Tango.Models', ':Tango.Stubs', ':Tango.Integration', ':Tango.Transport', ':Tango.Core', ':Tango.PMR', ':Tango.DAL', ':Tango.Web', ':Tango.Synchronization', ':Tango.UnitTesting', ':Tango.NativeBridge'
+include ':Tango.Stubs.UI', ':Tango.SharedUI', ':Tango.Models', ':Tango.Stubs', ':Tango.Integration', ':Tango.Transport', ':Tango.Core', ':Tango.PMR', ':Tango.DAL', ':Tango.Web', ':Tango.UnitTesting', ':Tango.NativeBridge'