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