diff options
Diffstat (limited to 'Software/Android_Studio')
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)); - } -} |
