From 5da415d6935bd6faa8c49db66f11015a8050bf4d Mon Sep 17 00:00:00 2001 From: Roy Ben-Shabat Date: Thu, 8 Nov 2018 12:03:06 +0200 Subject: Moved android project and new project. Visual Studio Timeout Task! --- .../integration/operators/IMachineOperator.java | 12 - .../integration/operators/MachineOperator.java | 20 -- .../providers/IMachineIdentityProvider.java | 15 -- .../providers/MachineIdentityProvider.java | 19 -- .../services/ExternalBridgeService.java | 292 --------------------- .../services/IExternalBridgeService.java | 53 ---- .../services/ISynchronizationService.java | 19 -- .../services/SynchronizationService.java | 175 ------------ 8 files changed, 605 deletions(-) delete mode 100644 Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/operators/IMachineOperator.java delete mode 100644 Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/operators/MachineOperator.java delete mode 100644 Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/providers/IMachineIdentityProvider.java delete mode 100644 Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/providers/MachineIdentityProvider.java delete mode 100644 Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/ExternalBridgeService.java delete mode 100644 Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/IExternalBridgeService.java delete mode 100644 Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/ISynchronizationService.java delete mode 100644 Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/SynchronizationService.java (limited to 'Software/Android_Studio/Tango.Integration/src/main/java') 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 deleted file mode 100644 index 9963f295b..000000000 --- a/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/operators/IMachineOperator.java +++ /dev/null @@ -1,12 +0,0 @@ -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 deleted file mode 100644 index c690435f9..000000000 --- a/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/operators/MachineOperator.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.twine.tango.integration.operators; - -import com.twine.tango.transport.ITransportAdapter; -import com.twine.tango.transport.transporters.BasicTransporter; - -/** - * Created by Roy on 12/23/2017. - */ - -public class MachineOperator extends BasicTransporter 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/providers/IMachineIdentityProvider.java b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/providers/IMachineIdentityProvider.java deleted file mode 100644 index 547a17e50..000000000 --- a/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/providers/IMachineIdentityProvider.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.twine.tango.integration.providers; - - -/** - * Represents a Tabgo machine identity provider. - */ -public interface IMachineIdentityProvider -{ - /** - * Gets tango machine unique serial number. - * - * @return the serial number - */ - String getSerialNumber(); -} diff --git a/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/providers/MachineIdentityProvider.java b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/providers/MachineIdentityProvider.java deleted file mode 100644 index c72b9cea4..000000000 --- a/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/providers/MachineIdentityProvider.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.twine.tango.integration.providers; -import com.twine.tango.dal.dao.TangoDAO; -import com.twine.tango.dal.entities.Machine; - -import static br.com.zbra.androidlinq.Linq.stream; - - -/** - * Represents the default machine identity provider implementation. - */ -public class MachineIdentityProvider implements IMachineIdentityProvider -{ - @Override - public String getSerialNumber() - { - Machine machine = stream(TangoDAO.getAllMachines()).firstOrNull(); - return machine != null ? machine.getSerialNumber() : "0000"; - } -} 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 deleted file mode 100644 index aea082d05..000000000 --- a/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/ExternalBridgeService.java +++ /dev/null @@ -1,292 +0,0 @@ -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 com.google.protobuf.GeneratedMessageV3; -import com.twine.tango.core.ContextHelper; -import com.twine.tango.core.ExtendedObject; -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.ResponseErrorException; -import com.twine.tango.transport.adapters.TcpTransportAdapter; -import com.twine.tango.transport.transporters.BasicTransporter; - -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 BasicTransporter implements IExternalBridgeService -{ - private ServerSocket listener; - private boolean isStarted; - private List 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) - { - logManager.log(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 void registerMessageHandler(IEventHandler> handler, MessageType messageType) - { - handlers.add(new HandlerAndType(handler, messageType)); - } - - @Override - public void unRegisterMessageHandler(IEventHandler> handler) - { - HandlerAndType h = stream(handlers).singleOrNull(x -> x.handler == handler); - if (h != null) - { - handlers.remove(h); - } - } - - private void listenerThreadMethod() - { - while (isStarted) - { - try - { - Socket newSocket = listener.accept(); - - if (newSocket != null) - { - if (getAdapter() != null) - { - getAdapter().disconnect().blockingAwait(); - } - TcpTransportAdapter adapter = new TcpTransportAdapter(newSocket); - adapter.setAuthenticated(false); - setAdapter(adapter); - connect().blockingAwait(); - } - - } - catch (IOException e) - { - logManager.log(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.getPassword().equals("Aa123456")) //TODO: Compare with global machine settings password... - { - getAdapter().setAuthenticated(true); - sendResponse(MessageFactory.createTangoMessage( - ExternalClientLoginResponse.class, - ExternalClientLoginResponse.newBuilder().setAuthenticated(true).build(), - container.getToken())); - } - else - { - getAdapter().setAuthenticated(false); - sendResponse(MessageFactory.createTangoMessage( - ExternalClientLoginResponse.class, - ExternalClientLoginResponse.newBuilder().setAuthenticated(false).build(), - container.getToken())); - } - - return; - } - - if (getAdapter().isAuthenticated()) - { - GeneratedMessageV3 message = MessageFactory.parseMessageFromContainerAgnostic(container); - - List 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()) - { - //noinspection unchecked - machineOperator.sendContinuousRequest(MessageFactory.createTangoMessage(container, message)).subscribe((response) -> - { - sendResponse((TangoMessage) response); - }, (ex) -> - { - if (ex.getClass() == ResponseErrorException.class) - { - sendResponse((TangoMessage) ((ResponseErrorException) ex).getResponse()); - } - }); - } - else - { - //noinspection unchecked - machineOperator.sendRequest(MessageFactory.createTangoMessage(container, message)).subscribe((response) -> - { - sendResponse((TangoMessage) response); - }, (ex) -> - { - if (ex.getClass() == ResponseErrorException.class) - { - sendResponse((TangoMessage) ((ResponseErrorException) ex).getResponse()); - } - }); - } - } - } - else - { - logManager.log("Message received from an unauthorized adapter!"); - } - - } - catch (Exception e) - { - logManager.log(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 deleted file mode 100644 index 5a2aed9aa..000000000 --- a/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/IExternalBridgeService.java +++ /dev/null @@ -1,53 +0,0 @@ -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(); - void registerMessageHandler(IEventHandler> handler, MessageType messageType); - void unRegisterMessageHandler(IEventHandler> handler); - - public class MessageReceivedArgs - { - private MessageContainer container; - private T message; - - public MessageReceivedArgs(MessageContainer container, T message) - { - this.container = container; - this.message = message; - } - - public MessageContainer getContainer() - { - return container; - } - - public void setContainer(MessageContainer container) - { - this.container = container; - } - - public T getMessage() - { - return message; - } - - public void setMessage(T message) - { - this.message = message; - } - } -} diff --git a/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/ISynchronizationService.java b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/ISynchronizationService.java deleted file mode 100644 index 631522fd0..000000000 --- a/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/ISynchronizationService.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.twine.tango.integration.services; - -import java.io.IOException; - -import io.reactivex.Completable; - - -/** - * Represents the Tango application local to remote synchronization engine. - */ -public interface ISynchronizationService -{ - /** - * Synchronizes the local database with the remote database through the remote machine service. - * - * @return the completable. - */ - Completable synchronizeDB(); -} diff --git a/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/SynchronizationService.java b/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/SynchronizationService.java deleted file mode 100644 index d8423cf22..000000000 --- a/Software/Android_Studio/Tango.Integration/src/main/java/com/twine/tango/integration/services/SynchronizationService.java +++ /dev/null @@ -1,175 +0,0 @@ -package com.twine.tango.integration.services; - -import android.os.AsyncTask; - -import com.google.protobuf.ByteString; -import com.snatik.storage.Storage; -import com.twine.tango.core.ContextHelper; -import com.twine.tango.core.ExtendedObject; -import com.twine.tango.dal.TangoDB; -import com.twine.tango.integration.providers.IMachineIdentityProvider; -import com.twine.tango.integration.services.IExternalBridgeService.MessageReceivedArgs; -import com.twine.tango.pmr.MessageFactory; -import com.twine.tango.pmr.TangoMessage; -import com.twine.tango.pmr.common.MessageTypeOuterClass.MessageType; -import com.twine.tango.pmr.integration.DirectSynchronizationRequestOuterClass.DirectSynchronizationRequest; -import com.twine.tango.pmr.integration.DirectSynchronizationResponseOuterClass.DirectSynchronizationResponse; -import com.twine.tango.pmr.integration.OverrideDataBaseRequestOuterClass.OverrideDataBaseRequest; -import com.twine.tango.pmr.integration.OverrideDataBaseResponseOuterClass.OverrideDataBaseResponse; -import com.twine.tango.pmr.synchronization.SynchronizeDBRequestOuterClass.SynchronizeDBRequest; -import com.twine.tango.web.WebApiFactory; -import com.twine.tango.web.ISynchronizationAPI; - -import javax.inject.Inject; - -import io.reactivex.Completable; - - -/** - * Represents the Tango application local to remote synchronization engine. - */ -public class SynchronizationService extends ExtendedObject implements ISynchronizationService -{ - private IMachineIdentityProvider machineIdentityProvider; - private IExternalBridgeService bridgeService; - - /** - * Instantiates a new Tango synchronizer. - * - * @param machineIdentityProvider the machine identity provider - */ - @Inject - public SynchronizationService(IMachineIdentityProvider machineIdentityProvider, IExternalBridgeService bridgeService) - { - this.machineIdentityProvider = machineIdentityProvider; - this.bridgeService = bridgeService; - this.bridgeService.registerMessageHandler(this::handleDirectSynchronizationRequest, MessageType.DirectSynchronizationRequest); - this.bridgeService.registerMessageHandler(this::handleOverrideDataBaseRequest, MessageType.OverrideDataBaseRequest); - - } - - private void handleOverrideDataBaseRequest(Object o, MessageReceivedArgs request) - { - AsyncTask.execute(() -> - { - try - { - //Backup DataBase. - TangoDB.backup(); - - //Replace Database. - TangoDB.replace(request.getMessage().getRemoteDB().toByteArray()); - - //Create response. - OverrideDataBaseResponse response = OverrideDataBaseResponse.newBuilder() - .setSuccessful(true) - .build(); - - TangoMessage message = MessageFactory.createTangoMessage( - OverrideDataBaseResponse.class, - response); - - bridgeService.sendResponse(message, request.getContainer().getToken()).subscribe(() -> - { - - },(ex) -> - { - logManager.log(ex); - }); - - } catch (Exception e) - { - logManager.log(e); - //Create response. - OverrideDataBaseResponse response = OverrideDataBaseResponse.newBuilder() - .setSuccessful(false) - .build(); - - TangoMessage message = MessageFactory.createTangoMessage( - OverrideDataBaseResponse.class, - response); - - bridgeService.sendResponse(message, request.getContainer().getToken()).subscribe(() -> - { - - },(ex) -> - { - logManager.log(ex); - }); - } - }); - } - - private void handleDirectSynchronizationRequest(Object o, MessageReceivedArgs request) - { - AsyncTask.execute(() -> - { - try - { - Storage storage = new Storage(ContextHelper.getApplicationContext()); - - //Read current DB file bytes. - byte[] data = storage.readFile(TangoDB.getDataBasePath()); - - //Create synchronization response. - DirectSynchronizationResponse response = DirectSynchronizationResponse.newBuilder() - .setLocalDB(ByteString.copyFrom(data)) - .build(); - - TangoMessage message = MessageFactory.createTangoMessage( - DirectSynchronizationResponse.class, - response); - - bridgeService.sendResponse(message, request.getContainer().getToken()).subscribe(() -> - { - - },(ex) -> - { - logManager.log(ex); - }); - - } catch (Exception e) - { - logManager.log(e); - } - }); - } - - @Override - public Completable synchronizeDB() - { - return Completable.create((emitter) -> - { - - //Backup DataBase. - TangoDB.backup(); - - Storage storage = new Storage(ContextHelper.getApplicationContext()); - - //Read current DB file bytes. - byte[] data = storage.readFile(TangoDB.getDataBasePath()); - - //Create synchronization web api. - ISynchronizationAPI synchAPI = WebApiFactory.getSynchronizationAPI(); - - //Create synchronization response. - SynchronizeDBRequest request = SynchronizeDBRequest.newBuilder() - .setSerialNumber(machineIdentityProvider.getSerialNumber()) - .setLocalDB(ByteString.copyFrom(data)) - .build(); - - synchAPI.synchronize(request).singleOrError().subscribe((response) -> - { - - TangoDB.replace(response.getRemoteDB().toByteArray()); - emitter.onComplete(); - - }, (ex) -> - { - logManager.log(ex); - emitter.onError(ex); - }); - - }); - } -} -- cgit v1.3.1