diff options
Diffstat (limited to 'Software/Android_Studio')
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 Binary files differindex 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 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 |
