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 -> 602112 bytes
-rw-r--r--Software/Android_Studio/Tango.PMR/src/main/java/com/twine/tango/pmr/common/KeepAliveRequestOuterClass.java440
-rw-r--r--Software/Android_Studio/Tango.PMR/src/main/java/com/twine/tango/pmr/common/KeepAliveResponseOuterClass.java440
-rw-r--r--Software/Android_Studio/Tango.PMR/src/main/java/com/twine/tango/pmr/common/MessageTypeOuterClass.java25
-rw-r--r--Software/Android_Studio/Tango.Stubs.UI/src/main/java/com/twine/tango/stubs/ui/views/main/MainActivityVM.java26
-rw-r--r--Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/ITransporter.java77
-rw-r--r--Software/Android_Studio/Tango.Transport/src/main/java/com/twine/tango/transport/TransporterBase.java168
7 files changed, 1134 insertions, 42 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 f7af9b52f..d676fc8c3 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.PMR/src/main/java/com/twine/tango/pmr/common/KeepAliveRequestOuterClass.java b/Software/Android_Studio/Tango.PMR/src/main/java/com/twine/tango/pmr/common/KeepAliveRequestOuterClass.java
new file mode 100644
index 000000000..e228e91c0
--- /dev/null
+++ b/Software/Android_Studio/Tango.PMR/src/main/java/com/twine/tango/pmr/common/KeepAliveRequestOuterClass.java
@@ -0,0 +1,440 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: KeepAliveRequest.proto
+
+package com.twine.tango.pmr.common;
+
+public final class KeepAliveRequestOuterClass {
+ private KeepAliveRequestOuterClass() {}
+ 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 KeepAliveRequestOrBuilder extends
+ // @@protoc_insertion_point(interface_extends:Tango.PMR.common.KeepAliveRequest)
+ com.google.protobuf.MessageOrBuilder {
+ }
+ /**
+ * Protobuf type {@code Tango.PMR.common.KeepAliveRequest}
+ */
+ public static final class KeepAliveRequest extends
+ com.google.protobuf.GeneratedMessageV3 implements
+ // @@protoc_insertion_point(message_implements:Tango.PMR.common.KeepAliveRequest)
+ KeepAliveRequestOrBuilder {
+ private static final long serialVersionUID = 0L;
+ // Use KeepAliveRequest.newBuilder() to construct.
+ private KeepAliveRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+ super(builder);
+ }
+ private KeepAliveRequest() {
+ }
+
+ @java.lang.Override
+ public final com.google.protobuf.UnknownFieldSet
+ getUnknownFields() {
+ return this.unknownFields;
+ }
+ private KeepAliveRequest(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ this();
+ 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;
+ }
+ }
+ }
+ } 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.common.KeepAliveRequestOuterClass.internal_static_Tango_PMR_common_KeepAliveRequest_descriptor;
+ }
+
+ protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return com.twine.tango.pmr.common.KeepAliveRequestOuterClass.internal_static_Tango_PMR_common_KeepAliveRequest_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ com.twine.tango.pmr.common.KeepAliveRequestOuterClass.KeepAliveRequest.class, com.twine.tango.pmr.common.KeepAliveRequestOuterClass.KeepAliveRequest.Builder.class);
+ }
+
+ 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 {
+ unknownFields.writeTo(output);
+ }
+
+ public int getSerializedSize() {
+ int size = memoizedSize;
+ if (size != -1) return size;
+
+ size = 0;
+ 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.common.KeepAliveRequestOuterClass.KeepAliveRequest)) {
+ return super.equals(obj);
+ }
+ com.twine.tango.pmr.common.KeepAliveRequestOuterClass.KeepAliveRequest other = (com.twine.tango.pmr.common.KeepAliveRequestOuterClass.KeepAliveRequest) obj;
+
+ boolean result = true;
+ 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 = (29 * hash) + unknownFields.hashCode();
+ memoizedHashCode = hash;
+ return hash;
+ }
+
+ public static com.twine.tango.pmr.common.KeepAliveRequestOuterClass.KeepAliveRequest parseFrom(
+ java.nio.ByteBuffer data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static com.twine.tango.pmr.common.KeepAliveRequestOuterClass.KeepAliveRequest 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.common.KeepAliveRequestOuterClass.KeepAliveRequest parseFrom(
+ com.google.protobuf.ByteString data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static com.twine.tango.pmr.common.KeepAliveRequestOuterClass.KeepAliveRequest 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.common.KeepAliveRequestOuterClass.KeepAliveRequest parseFrom(byte[] data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static com.twine.tango.pmr.common.KeepAliveRequestOuterClass.KeepAliveRequest parseFrom(
+ byte[] data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static com.twine.tango.pmr.common.KeepAliveRequestOuterClass.KeepAliveRequest parseFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input);
+ }
+ public static com.twine.tango.pmr.common.KeepAliveRequestOuterClass.KeepAliveRequest 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.common.KeepAliveRequestOuterClass.KeepAliveRequest parseDelimitedFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseDelimitedWithIOException(PARSER, input);
+ }
+ public static com.twine.tango.pmr.common.KeepAliveRequestOuterClass.KeepAliveRequest 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.common.KeepAliveRequestOuterClass.KeepAliveRequest parseFrom(
+ com.google.protobuf.CodedInputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input);
+ }
+ public static com.twine.tango.pmr.common.KeepAliveRequestOuterClass.KeepAliveRequest 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.common.KeepAliveRequestOuterClass.KeepAliveRequest 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.common.KeepAliveRequest}
+ */
+ public static final class Builder extends
+ com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+ // @@protoc_insertion_point(builder_implements:Tango.PMR.common.KeepAliveRequest)
+ com.twine.tango.pmr.common.KeepAliveRequestOuterClass.KeepAliveRequestOrBuilder {
+ public static final com.google.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return com.twine.tango.pmr.common.KeepAliveRequestOuterClass.internal_static_Tango_PMR_common_KeepAliveRequest_descriptor;
+ }
+
+ protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return com.twine.tango.pmr.common.KeepAliveRequestOuterClass.internal_static_Tango_PMR_common_KeepAliveRequest_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ com.twine.tango.pmr.common.KeepAliveRequestOuterClass.KeepAliveRequest.class, com.twine.tango.pmr.common.KeepAliveRequestOuterClass.KeepAliveRequest.Builder.class);
+ }
+
+ // Construct using com.twine.tango.pmr.common.KeepAliveRequestOuterClass.KeepAliveRequest.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();
+ return this;
+ }
+
+ public com.google.protobuf.Descriptors.Descriptor
+ getDescriptorForType() {
+ return com.twine.tango.pmr.common.KeepAliveRequestOuterClass.internal_static_Tango_PMR_common_KeepAliveRequest_descriptor;
+ }
+
+ public com.twine.tango.pmr.common.KeepAliveRequestOuterClass.KeepAliveRequest getDefaultInstanceForType() {
+ return com.twine.tango.pmr.common.KeepAliveRequestOuterClass.KeepAliveRequest.getDefaultInstance();
+ }
+
+ public com.twine.tango.pmr.common.KeepAliveRequestOuterClass.KeepAliveRequest build() {
+ com.twine.tango.pmr.common.KeepAliveRequestOuterClass.KeepAliveRequest result = buildPartial();
+ if (!result.isInitialized()) {
+ throw newUninitializedMessageException(result);
+ }
+ return result;
+ }
+
+ public com.twine.tango.pmr.common.KeepAliveRequestOuterClass.KeepAliveRequest buildPartial() {
+ com.twine.tango.pmr.common.KeepAliveRequestOuterClass.KeepAliveRequest result = new com.twine.tango.pmr.common.KeepAliveRequestOuterClass.KeepAliveRequest(this);
+ 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.common.KeepAliveRequestOuterClass.KeepAliveRequest) {
+ return mergeFrom((com.twine.tango.pmr.common.KeepAliveRequestOuterClass.KeepAliveRequest)other);
+ } else {
+ super.mergeFrom(other);
+ return this;
+ }
+ }
+
+ public Builder mergeFrom(com.twine.tango.pmr.common.KeepAliveRequestOuterClass.KeepAliveRequest other) {
+ if (other == com.twine.tango.pmr.common.KeepAliveRequestOuterClass.KeepAliveRequest.getDefaultInstance()) return this;
+ 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.common.KeepAliveRequestOuterClass.KeepAliveRequest parsedMessage = null;
+ try {
+ parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ parsedMessage = (com.twine.tango.pmr.common.KeepAliveRequestOuterClass.KeepAliveRequest) e.getUnfinishedMessage();
+ throw e.unwrapIOException();
+ } finally {
+ if (parsedMessage != null) {
+ mergeFrom(parsedMessage);
+ }
+ }
+ 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.common.KeepAliveRequest)
+ }
+
+ // @@protoc_insertion_point(class_scope:Tango.PMR.common.KeepAliveRequest)
+ private static final com.twine.tango.pmr.common.KeepAliveRequestOuterClass.KeepAliveRequest DEFAULT_INSTANCE;
+ static {
+ DEFAULT_INSTANCE = new com.twine.tango.pmr.common.KeepAliveRequestOuterClass.KeepAliveRequest();
+ }
+
+ public static com.twine.tango.pmr.common.KeepAliveRequestOuterClass.KeepAliveRequest getDefaultInstance() {
+ return DEFAULT_INSTANCE;
+ }
+
+ private static final com.google.protobuf.Parser<KeepAliveRequest>
+ PARSER = new com.google.protobuf.AbstractParser<KeepAliveRequest>() {
+ public KeepAliveRequest parsePartialFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return new KeepAliveRequest(input, extensionRegistry);
+ }
+ };
+
+ public static com.google.protobuf.Parser<KeepAliveRequest> parser() {
+ return PARSER;
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Parser<KeepAliveRequest> getParserForType() {
+ return PARSER;
+ }
+
+ public com.twine.tango.pmr.common.KeepAliveRequestOuterClass.KeepAliveRequest getDefaultInstanceForType() {
+ return DEFAULT_INSTANCE;
+ }
+
+ }
+
+ private static final com.google.protobuf.Descriptors.Descriptor
+ internal_static_Tango_PMR_common_KeepAliveRequest_descriptor;
+ private static final
+ com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internal_static_Tango_PMR_common_KeepAliveRequest_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\026KeepAliveRequest.proto\022\020Tango.PMR.comm" +
+ "on\"\022\n\020KeepAliveRequestB\034\n\032com.twine.tang" +
+ "o.pmr.commonb\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_common_KeepAliveRequest_descriptor =
+ getDescriptor().getMessageTypes().get(0);
+ internal_static_Tango_PMR_common_KeepAliveRequest_fieldAccessorTable = new
+ com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+ internal_static_Tango_PMR_common_KeepAliveRequest_descriptor,
+ new java.lang.String[] { });
+ }
+
+ // @@protoc_insertion_point(outer_class_scope)
+}
diff --git a/Software/Android_Studio/Tango.PMR/src/main/java/com/twine/tango/pmr/common/KeepAliveResponseOuterClass.java b/Software/Android_Studio/Tango.PMR/src/main/java/com/twine/tango/pmr/common/KeepAliveResponseOuterClass.java
new file mode 100644
index 000000000..d46b86204
--- /dev/null
+++ b/Software/Android_Studio/Tango.PMR/src/main/java/com/twine/tango/pmr/common/KeepAliveResponseOuterClass.java
@@ -0,0 +1,440 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: KeepAliveResponse.proto
+
+package com.twine.tango.pmr.common;
+
+public final class KeepAliveResponseOuterClass {
+ private KeepAliveResponseOuterClass() {}
+ 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 KeepAliveResponseOrBuilder extends
+ // @@protoc_insertion_point(interface_extends:Tango.PMR.common.KeepAliveResponse)
+ com.google.protobuf.MessageOrBuilder {
+ }
+ /**
+ * Protobuf type {@code Tango.PMR.common.KeepAliveResponse}
+ */
+ public static final class KeepAliveResponse extends
+ com.google.protobuf.GeneratedMessageV3 implements
+ // @@protoc_insertion_point(message_implements:Tango.PMR.common.KeepAliveResponse)
+ KeepAliveResponseOrBuilder {
+ private static final long serialVersionUID = 0L;
+ // Use KeepAliveResponse.newBuilder() to construct.
+ private KeepAliveResponse(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+ super(builder);
+ }
+ private KeepAliveResponse() {
+ }
+
+ @java.lang.Override
+ public final com.google.protobuf.UnknownFieldSet
+ getUnknownFields() {
+ return this.unknownFields;
+ }
+ private KeepAliveResponse(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ this();
+ 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;
+ }
+ }
+ }
+ } 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.common.KeepAliveResponseOuterClass.internal_static_Tango_PMR_common_KeepAliveResponse_descriptor;
+ }
+
+ protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return com.twine.tango.pmr.common.KeepAliveResponseOuterClass.internal_static_Tango_PMR_common_KeepAliveResponse_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ com.twine.tango.pmr.common.KeepAliveResponseOuterClass.KeepAliveResponse.class, com.twine.tango.pmr.common.KeepAliveResponseOuterClass.KeepAliveResponse.Builder.class);
+ }
+
+ 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 {
+ unknownFields.writeTo(output);
+ }
+
+ public int getSerializedSize() {
+ int size = memoizedSize;
+ if (size != -1) return size;
+
+ size = 0;
+ 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.common.KeepAliveResponseOuterClass.KeepAliveResponse)) {
+ return super.equals(obj);
+ }
+ com.twine.tango.pmr.common.KeepAliveResponseOuterClass.KeepAliveResponse other = (com.twine.tango.pmr.common.KeepAliveResponseOuterClass.KeepAliveResponse) obj;
+
+ boolean result = true;
+ 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 = (29 * hash) + unknownFields.hashCode();
+ memoizedHashCode = hash;
+ return hash;
+ }
+
+ public static com.twine.tango.pmr.common.KeepAliveResponseOuterClass.KeepAliveResponse parseFrom(
+ java.nio.ByteBuffer data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static com.twine.tango.pmr.common.KeepAliveResponseOuterClass.KeepAliveResponse 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.common.KeepAliveResponseOuterClass.KeepAliveResponse parseFrom(
+ com.google.protobuf.ByteString data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static com.twine.tango.pmr.common.KeepAliveResponseOuterClass.KeepAliveResponse 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.common.KeepAliveResponseOuterClass.KeepAliveResponse parseFrom(byte[] data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static com.twine.tango.pmr.common.KeepAliveResponseOuterClass.KeepAliveResponse parseFrom(
+ byte[] data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static com.twine.tango.pmr.common.KeepAliveResponseOuterClass.KeepAliveResponse parseFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input);
+ }
+ public static com.twine.tango.pmr.common.KeepAliveResponseOuterClass.KeepAliveResponse 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.common.KeepAliveResponseOuterClass.KeepAliveResponse parseDelimitedFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseDelimitedWithIOException(PARSER, input);
+ }
+ public static com.twine.tango.pmr.common.KeepAliveResponseOuterClass.KeepAliveResponse 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.common.KeepAliveResponseOuterClass.KeepAliveResponse parseFrom(
+ com.google.protobuf.CodedInputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input);
+ }
+ public static com.twine.tango.pmr.common.KeepAliveResponseOuterClass.KeepAliveResponse 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.common.KeepAliveResponseOuterClass.KeepAliveResponse 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.common.KeepAliveResponse}
+ */
+ public static final class Builder extends
+ com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+ // @@protoc_insertion_point(builder_implements:Tango.PMR.common.KeepAliveResponse)
+ com.twine.tango.pmr.common.KeepAliveResponseOuterClass.KeepAliveResponseOrBuilder {
+ public static final com.google.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return com.twine.tango.pmr.common.KeepAliveResponseOuterClass.internal_static_Tango_PMR_common_KeepAliveResponse_descriptor;
+ }
+
+ protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return com.twine.tango.pmr.common.KeepAliveResponseOuterClass.internal_static_Tango_PMR_common_KeepAliveResponse_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ com.twine.tango.pmr.common.KeepAliveResponseOuterClass.KeepAliveResponse.class, com.twine.tango.pmr.common.KeepAliveResponseOuterClass.KeepAliveResponse.Builder.class);
+ }
+
+ // Construct using com.twine.tango.pmr.common.KeepAliveResponseOuterClass.KeepAliveResponse.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();
+ return this;
+ }
+
+ public com.google.protobuf.Descriptors.Descriptor
+ getDescriptorForType() {
+ return com.twine.tango.pmr.common.KeepAliveResponseOuterClass.internal_static_Tango_PMR_common_KeepAliveResponse_descriptor;
+ }
+
+ public com.twine.tango.pmr.common.KeepAliveResponseOuterClass.KeepAliveResponse getDefaultInstanceForType() {
+ return com.twine.tango.pmr.common.KeepAliveResponseOuterClass.KeepAliveResponse.getDefaultInstance();
+ }
+
+ public com.twine.tango.pmr.common.KeepAliveResponseOuterClass.KeepAliveResponse build() {
+ com.twine.tango.pmr.common.KeepAliveResponseOuterClass.KeepAliveResponse result = buildPartial();
+ if (!result.isInitialized()) {
+ throw newUninitializedMessageException(result);
+ }
+ return result;
+ }
+
+ public com.twine.tango.pmr.common.KeepAliveResponseOuterClass.KeepAliveResponse buildPartial() {
+ com.twine.tango.pmr.common.KeepAliveResponseOuterClass.KeepAliveResponse result = new com.twine.tango.pmr.common.KeepAliveResponseOuterClass.KeepAliveResponse(this);
+ 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.common.KeepAliveResponseOuterClass.KeepAliveResponse) {
+ return mergeFrom((com.twine.tango.pmr.common.KeepAliveResponseOuterClass.KeepAliveResponse)other);
+ } else {
+ super.mergeFrom(other);
+ return this;
+ }
+ }
+
+ public Builder mergeFrom(com.twine.tango.pmr.common.KeepAliveResponseOuterClass.KeepAliveResponse other) {
+ if (other == com.twine.tango.pmr.common.KeepAliveResponseOuterClass.KeepAliveResponse.getDefaultInstance()) return this;
+ 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.common.KeepAliveResponseOuterClass.KeepAliveResponse parsedMessage = null;
+ try {
+ parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ parsedMessage = (com.twine.tango.pmr.common.KeepAliveResponseOuterClass.KeepAliveResponse) e.getUnfinishedMessage();
+ throw e.unwrapIOException();
+ } finally {
+ if (parsedMessage != null) {
+ mergeFrom(parsedMessage);
+ }
+ }
+ 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.common.KeepAliveResponse)
+ }
+
+ // @@protoc_insertion_point(class_scope:Tango.PMR.common.KeepAliveResponse)
+ private static final com.twine.tango.pmr.common.KeepAliveResponseOuterClass.KeepAliveResponse DEFAULT_INSTANCE;
+ static {
+ DEFAULT_INSTANCE = new com.twine.tango.pmr.common.KeepAliveResponseOuterClass.KeepAliveResponse();
+ }
+
+ public static com.twine.tango.pmr.common.KeepAliveResponseOuterClass.KeepAliveResponse getDefaultInstance() {
+ return DEFAULT_INSTANCE;
+ }
+
+ private static final com.google.protobuf.Parser<KeepAliveResponse>
+ PARSER = new com.google.protobuf.AbstractParser<KeepAliveResponse>() {
+ public KeepAliveResponse parsePartialFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return new KeepAliveResponse(input, extensionRegistry);
+ }
+ };
+
+ public static com.google.protobuf.Parser<KeepAliveResponse> parser() {
+ return PARSER;
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Parser<KeepAliveResponse> getParserForType() {
+ return PARSER;
+ }
+
+ public com.twine.tango.pmr.common.KeepAliveResponseOuterClass.KeepAliveResponse getDefaultInstanceForType() {
+ return DEFAULT_INSTANCE;
+ }
+
+ }
+
+ private static final com.google.protobuf.Descriptors.Descriptor
+ internal_static_Tango_PMR_common_KeepAliveResponse_descriptor;
+ private static final
+ com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internal_static_Tango_PMR_common_KeepAliveResponse_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\027KeepAliveResponse.proto\022\020Tango.PMR.com" +
+ "mon\"\023\n\021KeepAliveResponseB\034\n\032com.twine.ta" +
+ "ngo.pmr.commonb\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_common_KeepAliveResponse_descriptor =
+ getDescriptor().getMessageTypes().get(0);
+ internal_static_Tango_PMR_common_KeepAliveResponse_fieldAccessorTable = new
+ com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+ internal_static_Tango_PMR_common_KeepAliveResponse_descriptor,
+ new java.lang.String[] { });
+ }
+
+ // @@protoc_insertion_point(outer_class_scope)
+}
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 c6aaf8d17..f2d42989a 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
@@ -179,6 +179,14 @@ public final class MessageTypeOuterClass {
* <code>OverrideDataBaseResponse = 39;</code>
*/
OverrideDataBaseResponse(39),
+ /**
+ * <code>KeepAliveRequest = 40;</code>
+ */
+ KeepAliveRequest(40),
+ /**
+ * <code>KeepAliveResponse = 41;</code>
+ */
+ KeepAliveResponse(41),
UNRECOGNIZED(-1),
;
@@ -342,6 +350,14 @@ public final class MessageTypeOuterClass {
* <code>OverrideDataBaseResponse = 39;</code>
*/
public static final int OverrideDataBaseResponse_VALUE = 39;
+ /**
+ * <code>KeepAliveRequest = 40;</code>
+ */
+ public static final int KeepAliveRequest_VALUE = 40;
+ /**
+ * <code>KeepAliveResponse = 41;</code>
+ */
+ public static final int KeepAliveResponse_VALUE = 41;
public final int getNumber() {
@@ -402,6 +418,8 @@ public final class MessageTypeOuterClass {
case 37: return DirectSynchronizationResponse;
case 38: return OverrideDataBaseRequest;
case 39: return OverrideDataBaseResponse;
+ case 40: return KeepAliveRequest;
+ case 41: return KeepAliveResponse;
default: return null;
}
}
@@ -463,7 +481,7 @@ public final class MessageTypeOuterClass {
descriptor;
static {
java.lang.String[] descriptorData = {
- "\n\021MessageType.proto\022\020Tango.PMR.Common*\326\010" +
+ "\n\021MessageType.proto\022\020Tango.PMR.Common*\203\t" +
"\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" +
@@ -491,8 +509,9 @@ public final class MessageTypeOuterClass {
"lClientLoginResponse\020#\022 \n\034DirectSynchron" +
"izationRequest\020$\022!\n\035DirectSynchronizatio" +
"nResponse\020%\022\033\n\027OverrideDataBaseRequest\020&" +
- "\022\034\n\030OverrideDataBaseResponse\020\'B\034\n\032com.tw" +
- "ine.tango.pmr.commonb\006proto3"
+ "\022\034\n\030OverrideDataBaseResponse\020\'\022\024\n\020KeepAl" +
+ "iveRequest\020(\022\025\n\021KeepAliveResponse\020)B\034\n\032c",
+ "om.twine.tango.pmr.commonb\006proto3"
};
com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() {
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 64d69b0e6..0357fee18 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.dal.dao.TangoDAO;
+import com.twine.tango.dal.entities.ActionType;
+import com.twine.tango.dal.entities.Contact;
import com.twine.tango.integration.operators.IMachineOperator;
import com.twine.tango.integration.services.IExternalBridgeService;
import com.twine.tango.integration.services.ISynchronizationService;
@@ -16,6 +19,7 @@ import com.twine.tango.stubs.ui.views.main.IMainActivity.Navigation;
import com.twine.tango.transport.TransportComponentState;
import java.io.IOException;
+import java.util.Random;
import javax.inject.Inject;
@@ -38,7 +42,6 @@ public class MainActivityVM extends ViewModelBase<IMainActivity>
public RelayCommand disconnectCommand;
-
@Inject
public MainActivityVM(Bus eventBus, INotificationProvider notificationProvider, INavigationProvider navigationProvider, IMachineOperator machineOperator, IExternalBridgeService externalBridgeService, ISynchronizationService synchronizationService)
{
@@ -52,33 +55,38 @@ public class MainActivityVM extends ViewModelBase<IMainActivity>
isConnected = new DependencyProperty<>(false);
- connectCommand = new RelayCommand(this::connect,() -> this.machineOperator.getState() != TransportComponentState.Connected);
- disconnectCommand = new RelayCommand(this::disconnect,() -> this.machineOperator.getState() == TransportComponentState.Connected);
+ connectCommand = new RelayCommand(this::connect, () -> this.machineOperator.getState() != TransportComponentState.Connected);
+ disconnectCommand = new RelayCommand(this::disconnect, () -> this.machineOperator.getState() == TransportComponentState.Connected);
this.machineOperator.addStateChangedListener((sender, e) ->
isConnected.set(this.machineOperator.getState() == TransportComponentState.Connected));
-
+
try
{
externalBridgeService.start();
- } catch (IOException e)
+ }
+ catch (IOException e)
{
e.printStackTrace();
}
+
+ Contact a = TangoDAO.getAllMachines().get(0).getOrganization().getContact();
+ a.setPhoneNumber(String.valueOf(new Random().nextInt(1000)));
+ a.save().subscribe();
}
private void connect()
{
machineOperator.connect().observeOn(AndroidSchedulers.mainThread()).subscribe(() ->
- invalidateCommands(),(ex) ->
- notificationProvider.showMessage(view,"Could not connect the Transporter."));
+ invalidateCommands(), (ex) ->
+ notificationProvider.showMessage(view, "Could not connect the Transporter."));
}
private void disconnect()
{
machineOperator.disconnect().observeOn(AndroidSchedulers.mainThread()).subscribe(() ->
- invalidateCommands(),(ex) ->
- notificationProvider.showMessage(view,"Could not disconnect the Transporter."));
+ invalidateCommands(), (ex) ->
+ notificationProvider.showMessage(view, "Could not disconnect the Transporter."));
}
@Subscribe
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 1ad704829..82328ef18 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
@@ -16,7 +16,8 @@ import io.reactivex.Single;
/**
* Represents a transport component capable of sending and receiving {@link TangoMessage} on a collection of {@link ITransportAdapter}.
*/
-public interface ITransporter extends ITransportComponent {
+public interface ITransporter extends ITransportComponent
+{
/**
* Gets the collection of adapters.
@@ -33,7 +34,7 @@ public interface ITransporter extends ITransportComponent {
* @param request the request
* @return the single
*/
- <Request extends GeneratedMessageV3,Response extends GeneratedMessageV3> Single<TangoMessage<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.
@@ -44,7 +45,30 @@ public interface ITransporter extends ITransportComponent {
* @param adapter the adapter
* @return the single
*/
- <Request extends GeneratedMessageV3,Response extends GeneratedMessageV3> Single<TangoMessage<Response>> sendRequest(TangoMessage<Request> request,ITransportAdapter adapter);
+ <Request extends GeneratedMessageV3, Response extends GeneratedMessageV3> Single<TangoMessage<Response>> sendRequest(TangoMessage<Request> request, ITransportAdapter adapter);
+
+ /**
+ * Send a request to all adapters.
+ *
+ * @param <Request> the type parameter
+ * @param <Response> the type parameter
+ * @param request the request
+ * @param timeout the timeout
+ * @return the single
+ */
+ <Request extends GeneratedMessageV3, Response extends GeneratedMessageV3> Single<TangoMessage<Response>> sendRequest(TangoMessage<Request> request, Period timeout);
+
+ /**
+ * Sends a request on the specified adapter.
+ *
+ * @param <Request> the type parameter
+ * @param <Response> the type parameter
+ * @param request the request
+ * @param adapter the adapter
+ * @param timeout the timeout
+ * @return the single
+ */
+ <Request extends GeneratedMessageV3, Response extends GeneratedMessageV3> Single<TangoMessage<Response>> sendRequest(TangoMessage<Request> request, ITransportAdapter adapter, Period timeout);
/**
* Sends a continuous request on all adapters.
@@ -54,7 +78,7 @@ public interface ITransporter extends ITransportComponent {
* @param request the request
* @return the observable
*/
- <Request extends GeneratedMessageV3,Response extends GeneratedMessageV3> Observable<TangoMessage<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.
@@ -65,7 +89,7 @@ public interface ITransporter extends ITransportComponent {
* @param adapter the adapter
* @return the observable
*/
- <Request extends GeneratedMessageV3,Response extends GeneratedMessageV3> Observable<TangoMessage<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.
@@ -84,7 +108,7 @@ public interface ITransporter extends ITransportComponent {
* @param token the token
* @return the single
*/
- <Response extends GeneratedMessageV3> Completable sendResponse(TangoMessage<Response> response,String token);
+ <Response extends GeneratedMessageV3> Completable sendResponse(TangoMessage<Response> response, String token);
/**
* Sets request received listener.
@@ -107,5 +131,46 @@ public interface ITransporter extends ITransportComponent {
*/
void setRequestTimeout(Period duration);
+ /**
+ * Sets a value indicating whether to use a keep alive mechanism.
+ *
+ * @param value the value
+ */
+ void setUseKeepAlive(boolean value);
+
+ /**
+ * Gets a value indicating whether to use a keep alive mechanism.
+ *
+ * @return the use keep alive
+ */
+ boolean getUseKeepAlive();
+
+ /**
+ * Sets a value indicating whether the transporter should remove an adapter when it fails.
+ *
+ * @param value the value
+ */
+ void setFailsWithAdapter(boolean value);
+
+ /**
+ * Gets a value indicating whether the transporter should remove an adapter when it fails.
+ *
+ * @return the fails with adapter
+ */
+ boolean getFailsWithAdapter();
+
+ /**
+ * Sets a value indicating whether the transporter should remove an adapter when it fails.
+ *
+ * @param value the value
+ */
+ void setRemoveAdaptersOnFailed(boolean value);
+
+ /**
+ * Gets a value indicating whether the transporter should remove an adapter when it fails.
+ *
+ * @return the remove adapters on fail
+ */
+ boolean getRemoveAdaptersOnFail();
}
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 ff192bc3b..5b410d22c 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
@@ -15,7 +15,10 @@ import com.twine.tango.core.ObservableCollection;
import com.twine.tango.pmr.MessageFactory;
import com.twine.tango.pmr.TangoMessage;
import com.twine.tango.pmr.common.ErrorCodeOuterClass.ErrorCode;
+import com.twine.tango.pmr.common.KeepAliveRequestOuterClass.KeepAliveRequest;
+import com.twine.tango.pmr.common.KeepAliveResponseOuterClass.KeepAliveResponse;
import com.twine.tango.pmr.common.MessageContainerOuterClass.MessageContainer;
+import com.twine.tango.pmr.common.MessageTypeOuterClass.MessageType;
import org.joda.time.Period;
@@ -47,10 +50,14 @@ public abstract class TransporterBase implements ITransporter
private ConcurrentLinkedQueue<Pair<ITransportAdapter, byte[]>> arrivedResponses;
private Thread pushThread;
private Thread pullThread;
+ private Thread keepAliveThread;
private ObservableCollection<ITransportAdapter> adapters;
private Map<String, PendingResponse> pendingResponses;
private TransportComponentState state;
private Period requestTimeout;
+ private boolean useKeepAlive;
+ private boolean failsWithAdapter;
+ private boolean removeAdaptersOnFailed;
//region Events
@@ -117,6 +124,42 @@ public abstract class TransporterBase implements ITransporter
this.requestTimeout = requestTimeout;
}
+ @Override
+ public void setUseKeepAlive(boolean value)
+ {
+ useKeepAlive = value;
+ }
+
+ @Override
+ public boolean getUseKeepAlive()
+ {
+ return useKeepAlive;
+ }
+
+ @Override
+ public void setFailsWithAdapter(boolean value)
+ {
+ failsWithAdapter = value;
+ }
+
+ @Override
+ public boolean getFailsWithAdapter()
+ {
+ return failsWithAdapter;
+ }
+
+ @Override
+ public void setRemoveAdaptersOnFailed(boolean value)
+ {
+ removeAdaptersOnFailed = value;
+ }
+
+ @Override
+ public boolean getRemoveAdaptersOnFail()
+ {
+ return removeAdaptersOnFailed;
+ }
+
//endregion
//region Protected Methods
@@ -154,12 +197,14 @@ public abstract class TransporterBase implements ITransporter
private void onAdapterStateChanged(Object sender, TransportComponentState state)
{
- if (state == TransportComponentState.Disposed)
+ if (state == TransportComponentState.Failed && removeAdaptersOnFailed)
{
adapters.remove((ITransportAdapter) sender);
- } else if (state == TransportComponentState.Failed)
+ }
+
+ if (state == TransportComponentState.Failed && failsWithAdapter)
{
- //TODO: decide what to do here...
+ onFailed(new ObjectDisposedException("One of the transporter adapters has failed. Going into a failed state..."));
}
}
@@ -323,7 +368,8 @@ public abstract class TransporterBase implements ITransporter
XLog.i("Transporter connected...");
x.onComplete();
- } catch (Exception e)
+ }
+ catch (Exception e)
{
XLog.e("Error connecting transporter", e);
x.onError(e);
@@ -350,7 +396,8 @@ public abstract class TransporterBase implements ITransporter
XLog.i("Transporter disconnected...");
x.onComplete();
- } catch (Exception e)
+ }
+ catch (Exception e)
{
x.onError(e);
}
@@ -361,12 +408,24 @@ public abstract class TransporterBase implements ITransporter
@Override
public <Request extends GeneratedMessageV3, Response extends GeneratedMessageV3> Single<TangoMessage<Response>> sendRequest(TangoMessage<Request> request)
{
- return sendRequest(request, null);
+ return sendRequest(request, null, getRequestTimeout());
}
@Override
public <Request extends GeneratedMessageV3, Response extends GeneratedMessageV3> Single<TangoMessage<Response>> sendRequest(TangoMessage<Request> request, ITransportAdapter adapter)
{
+ return sendRequest(request, adapter, getRequestTimeout());
+ }
+
+ @Override
+ public <Request extends GeneratedMessageV3, Response extends GeneratedMessageV3> Single<TangoMessage<Response>> sendRequest(TangoMessage<Request> request, Period timeout)
+ {
+ return sendRequest(request, null, timeout);
+ }
+
+ @Override
+ public <Request extends GeneratedMessageV3, Response extends GeneratedMessageV3> Single<TangoMessage<Response>> sendRequest(TangoMessage<Request> request, ITransportAdapter adapter, Period timeout)
+ {
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());
@@ -442,16 +501,18 @@ public abstract class TransporterBase implements ITransporter
{
XLog.i("Removing matching request token...");
pendingResponses.remove(token);
- } else if (response.getContainer().getCompleted())
+ }
+ else if (response.getContainer().getCompleted())
{
XLog.i("Response completed. Removing matching request token...");
pendingResponses.remove(token);
}
- } else
+ }
+ else
{
//This should never happen.
XLog.w("Matching request token was not found...");
- throw new RuntimeException();
+ throw new RuntimeException("There was no matching request token and this should never happen!");
}
PublishSubject<Response> subject = PublishSubject.create();
@@ -474,6 +535,13 @@ public abstract class TransporterBase implements ITransporter
pushThread = new Thread(this::pushThreadMethod);
pushThread.setName("Push Thread");
pushThread.start();
+
+ if (useKeepAlive)
+ {
+ keepAliveThread = new Thread(this::keepAliveThreadMethod);
+ keepAliveThread.setName("Keep Alive Thread");
+ keepAliveThread.start();
+ }
}
/**
@@ -522,7 +590,8 @@ public abstract class TransporterBase implements ITransporter
XLog.i("message sent on adapter: " + adapter.getAddress() + "...");
}
}
- } else
+ }
+ else
{
if (message.getAdapter().getState() == TransportComponentState.Connected)
{
@@ -534,11 +603,13 @@ public abstract class TransporterBase implements ITransporter
if (message.getDirection() == TransportMessageDirection.Request)
{
pendingRequests.add(message);
- } else
+ }
+ else
{
message.setResult(new Object(), true);
}
- } catch (Exception ex)
+ }
+ catch (Exception ex)
{
message.setException(ex);
}
@@ -548,7 +619,8 @@ public abstract class TransporterBase implements ITransporter
SystemClock.sleep(10);
}
- } catch (Exception ex)
+ }
+ catch (Exception ex)
{
onFailed(ex);
}
@@ -584,7 +656,8 @@ public abstract class TransporterBase implements ITransporter
try
{
container = onParseContainer(data.second);
- } catch (Exception e)
+ }
+ catch (Exception e)
{
XLog.e("Invalid message container received!", e);
continue;
@@ -609,17 +682,20 @@ public abstract class TransporterBase implements ITransporter
{
XLog.i("Response has returned with error: " + container.getError().toString());
request.setResult(onParseTangoMessage(data.second), true);
- } else
+ }
+ else
{
XLog.i("Parsing inner response message and setting pending request task result...");
request.setException(new ResponseErrorException(container.getError(), onParseTangoMessage(data.second)));
}
- } catch (Exception ex)
+ }
+ catch (Exception ex)
{
XLog.e("Error parsing inner message", ex);
request.setException(ex);
}
- } else
+ }
+ else
{
XLog.i("Pending request was identified as 'continuous response'. keeping pending request.");
@@ -633,18 +709,21 @@ public abstract class TransporterBase implements ITransporter
XLog.i("Continuous sequence completed.");
}
request.setResult(onParseTangoMessage(data.second), container.getCompleted());
- } else
+ }
+ else
{
XLog.i("Response has returned with error: " + container.getError().toString());
request.setException(new ResponseErrorException(container.getError(), onParseTangoMessage(data.second)));
}
- } catch (Exception ex)
+ }
+ catch (Exception ex)
{
XLog.e("Error parsing inner message", ex);
request.setException(ex);
}
}
- } else
+ }
+ else
{
XLog.i("Message was identified as a new request message: " + container.getType().toString());
@@ -652,9 +731,24 @@ public abstract class TransporterBase implements ITransporter
{
XLog.i("Saving request token and adapter: " + container.getToken() + ", " + data.first.getAddress());
pendingResponses.put(container.getToken(), new PendingResponse(data.first, container.getContinuous()));
- XLog.i("Invoking RequestReceived event...");
- AsyncTask.execute(() -> onRequestReceived(container));
- } catch (Exception ex)
+
+ if (container.getType() == MessageType.KeepAliveRequest)
+ {
+ XLog.i("Submitting keep alive response...");
+ sendResponse(MessageFactory.createTangoMessage(KeepAliveResponse.class, container.getToken())).subscribe(() ->
+ {
+ }, (ex) ->
+ {
+ ex.printStackTrace();
+ });
+ }
+ else
+ {
+ XLog.i("Invoking RequestReceived event...");
+ AsyncTask.execute(() -> onRequestReceived(container));
+ }
+ }
+ catch (Exception ex)
{
//Ignore any exception that might occur on the event handler side...
}
@@ -665,7 +759,8 @@ public abstract class TransporterBase implements ITransporter
SystemClock.sleep(10);
}
- } catch (Exception ex)
+ }
+ catch (Exception ex)
{
onFailed(ex);
}
@@ -673,6 +768,31 @@ public abstract class TransporterBase implements ITransporter
//endregion
+ //region Keep Alive Thread
+
+ private void keepAliveThreadMethod()
+ {
+ while (state == TransportComponentState.Connected)
+ {
+
+ this.<KeepAliveRequest, KeepAliveResponse>sendRequest(MessageFactory.createTangoMessage(KeepAliveRequest.class), Period.seconds(10)).subscribe((x) ->
+ {
+
+ }, (ex) ->
+ {
+ if (ex.getClass() == TimeoutException.class)
+ {
+ onFailed(new TimeoutException("The transporter has not received a KeepAlive response within the given time."));
+ }
+ });
+
+
+ SystemClock.sleep(10000);
+ }
+ }
+
+ //endregion
+
//region Dispose
@Override