From 46bf03f6f38284a85dc96a2e72688f1749750a6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kjetil=20=C3=98rbekk?= Date: Wed, 28 Mar 2012 19:32:57 +0200 Subject: Handle failing RPCs. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit – Handles RPCs that fail because the recipient calls setFailed(). – Handles RPCs that fail because the connection is closed. --- src/main/java/com/orbekk/protobuf/Data.java | 1460 ++++++++++++++++++++ src/main/java/com/orbekk/protobuf/Data.proto | 27 + src/main/java/com/orbekk/protobuf/Rpc.java | 1393 +------------------ src/main/java/com/orbekk/protobuf/Rpc.proto | 24 - src/main/java/com/orbekk/protobuf/RpcChannel.java | 57 +- .../com/orbekk/protobuf/SimpleProtobufClient.java | 39 - .../com/orbekk/protobuf/SimpleProtobufServer.java | 91 +- .../orbekk/protobuf/ProtobufFunctionalTest.java | 43 +- 8 files changed, 1684 insertions(+), 1450 deletions(-) create mode 100644 src/main/java/com/orbekk/protobuf/Data.java create mode 100644 src/main/java/com/orbekk/protobuf/Data.proto delete mode 100644 src/main/java/com/orbekk/protobuf/Rpc.proto delete mode 100644 src/main/java/com/orbekk/protobuf/SimpleProtobufClient.java diff --git a/src/main/java/com/orbekk/protobuf/Data.java b/src/main/java/com/orbekk/protobuf/Data.java new file mode 100644 index 0000000..e0f364a --- /dev/null +++ b/src/main/java/com/orbekk/protobuf/Data.java @@ -0,0 +1,1460 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: src/main/java/com/orbekk/protobuf/Data.proto + +package com.orbekk.protobuf; + +public final class Data { + private Data() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + } + public interface RequestOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // optional string full_service_name = 1; + boolean hasFullServiceName(); + String getFullServiceName(); + + // optional string method_name = 2; + boolean hasMethodName(); + String getMethodName(); + + // optional bytes request_proto = 3; + boolean hasRequestProto(); + com.google.protobuf.ByteString getRequestProto(); + + // optional int64 request_id = 4; + boolean hasRequestId(); + long getRequestId(); + } + public static final class Request extends + com.google.protobuf.GeneratedMessage + implements RequestOrBuilder { + // Use Request.newBuilder() to construct. + private Request(Builder builder) { + super(builder); + } + private Request(boolean noInit) {} + + private static final Request defaultInstance; + public static Request getDefaultInstance() { + return defaultInstance; + } + + public Request getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.orbekk.protobuf.Data.internal_static_com_orbekk_protobuf_Request_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.orbekk.protobuf.Data.internal_static_com_orbekk_protobuf_Request_fieldAccessorTable; + } + + private int bitField0_; + // optional string full_service_name = 1; + public static final int FULL_SERVICE_NAME_FIELD_NUMBER = 1; + private java.lang.Object fullServiceName_; + public boolean hasFullServiceName() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public String getFullServiceName() { + java.lang.Object ref = fullServiceName_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + fullServiceName_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getFullServiceNameBytes() { + java.lang.Object ref = fullServiceName_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + fullServiceName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional string method_name = 2; + public static final int METHOD_NAME_FIELD_NUMBER = 2; + private java.lang.Object methodName_; + public boolean hasMethodName() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public String getMethodName() { + java.lang.Object ref = methodName_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + methodName_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getMethodNameBytes() { + java.lang.Object ref = methodName_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + methodName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + // optional bytes request_proto = 3; + public static final int REQUEST_PROTO_FIELD_NUMBER = 3; + private com.google.protobuf.ByteString requestProto_; + public boolean hasRequestProto() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public com.google.protobuf.ByteString getRequestProto() { + return requestProto_; + } + + // optional int64 request_id = 4; + public static final int REQUEST_ID_FIELD_NUMBER = 4; + private long requestId_; + public boolean hasRequestId() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + public long getRequestId() { + return requestId_; + } + + private void initFields() { + fullServiceName_ = ""; + methodName_ = ""; + requestProto_ = com.google.protobuf.ByteString.EMPTY; + requestId_ = 0L; + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeBytes(1, getFullServiceNameBytes()); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeBytes(2, getMethodNameBytes()); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + output.writeBytes(3, requestProto_); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + output.writeInt64(4, requestId_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(1, getFullServiceNameBytes()); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(2, getMethodNameBytes()); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(3, requestProto_); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(4, requestId_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static com.orbekk.protobuf.Data.Request parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static com.orbekk.protobuf.Data.Request parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static com.orbekk.protobuf.Data.Request parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static com.orbekk.protobuf.Data.Request parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static com.orbekk.protobuf.Data.Request parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static com.orbekk.protobuf.Data.Request parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static com.orbekk.protobuf.Data.Request parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static com.orbekk.protobuf.Data.Request parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static com.orbekk.protobuf.Data.Request parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static com.orbekk.protobuf.Data.Request parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(com.orbekk.protobuf.Data.Request prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements com.orbekk.protobuf.Data.RequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.orbekk.protobuf.Data.internal_static_com_orbekk_protobuf_Request_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.orbekk.protobuf.Data.internal_static_com_orbekk_protobuf_Request_fieldAccessorTable; + } + + // Construct using com.orbekk.protobuf.Data.Request.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + fullServiceName_ = ""; + bitField0_ = (bitField0_ & ~0x00000001); + methodName_ = ""; + bitField0_ = (bitField0_ & ~0x00000002); + requestProto_ = com.google.protobuf.ByteString.EMPTY; + bitField0_ = (bitField0_ & ~0x00000004); + requestId_ = 0L; + bitField0_ = (bitField0_ & ~0x00000008); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return com.orbekk.protobuf.Data.Request.getDescriptor(); + } + + public com.orbekk.protobuf.Data.Request getDefaultInstanceForType() { + return com.orbekk.protobuf.Data.Request.getDefaultInstance(); + } + + public com.orbekk.protobuf.Data.Request build() { + com.orbekk.protobuf.Data.Request result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private com.orbekk.protobuf.Data.Request buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + com.orbekk.protobuf.Data.Request result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public com.orbekk.protobuf.Data.Request buildPartial() { + com.orbekk.protobuf.Data.Request result = new com.orbekk.protobuf.Data.Request(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + result.fullServiceName_ = fullServiceName_; + if (((from_bitField0_ & 0x00000002) == 0x00000002)) { + to_bitField0_ |= 0x00000002; + } + result.methodName_ = methodName_; + if (((from_bitField0_ & 0x00000004) == 0x00000004)) { + to_bitField0_ |= 0x00000004; + } + result.requestProto_ = requestProto_; + if (((from_bitField0_ & 0x00000008) == 0x00000008)) { + to_bitField0_ |= 0x00000008; + } + result.requestId_ = requestId_; + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.orbekk.protobuf.Data.Request) { + return mergeFrom((com.orbekk.protobuf.Data.Request)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.orbekk.protobuf.Data.Request other) { + if (other == com.orbekk.protobuf.Data.Request.getDefaultInstance()) return this; + if (other.hasFullServiceName()) { + setFullServiceName(other.getFullServiceName()); + } + if (other.hasMethodName()) { + setMethodName(other.getMethodName()); + } + if (other.hasRequestProto()) { + setRequestProto(other.getRequestProto()); + } + if (other.hasRequestId()) { + setRequestId(other.getRequestId()); + } + this.mergeUnknownFields(other.getUnknownFields()); + 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.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 10: { + bitField0_ |= 0x00000001; + fullServiceName_ = input.readBytes(); + break; + } + case 18: { + bitField0_ |= 0x00000002; + methodName_ = input.readBytes(); + break; + } + case 26: { + bitField0_ |= 0x00000004; + requestProto_ = input.readBytes(); + break; + } + case 32: { + bitField0_ |= 0x00000008; + requestId_ = input.readInt64(); + break; + } + } + } + } + + private int bitField0_; + + // optional string full_service_name = 1; + private java.lang.Object fullServiceName_ = ""; + public boolean hasFullServiceName() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public String getFullServiceName() { + java.lang.Object ref = fullServiceName_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + fullServiceName_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setFullServiceName(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + fullServiceName_ = value; + onChanged(); + return this; + } + public Builder clearFullServiceName() { + bitField0_ = (bitField0_ & ~0x00000001); + fullServiceName_ = getDefaultInstance().getFullServiceName(); + onChanged(); + return this; + } + void setFullServiceName(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000001; + fullServiceName_ = value; + onChanged(); + } + + // optional string method_name = 2; + private java.lang.Object methodName_ = ""; + public boolean hasMethodName() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public String getMethodName() { + java.lang.Object ref = methodName_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + methodName_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setMethodName(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + methodName_ = value; + onChanged(); + return this; + } + public Builder clearMethodName() { + bitField0_ = (bitField0_ & ~0x00000002); + methodName_ = getDefaultInstance().getMethodName(); + onChanged(); + return this; + } + void setMethodName(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000002; + methodName_ = value; + onChanged(); + } + + // optional bytes request_proto = 3; + private com.google.protobuf.ByteString requestProto_ = com.google.protobuf.ByteString.EMPTY; + public boolean hasRequestProto() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public com.google.protobuf.ByteString getRequestProto() { + return requestProto_; + } + public Builder setRequestProto(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000004; + requestProto_ = value; + onChanged(); + return this; + } + public Builder clearRequestProto() { + bitField0_ = (bitField0_ & ~0x00000004); + requestProto_ = getDefaultInstance().getRequestProto(); + onChanged(); + return this; + } + + // optional int64 request_id = 4; + private long requestId_ ; + public boolean hasRequestId() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + public long getRequestId() { + return requestId_; + } + public Builder setRequestId(long value) { + bitField0_ |= 0x00000008; + requestId_ = value; + onChanged(); + return this; + } + public Builder clearRequestId() { + bitField0_ = (bitField0_ & ~0x00000008); + requestId_ = 0L; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:com.orbekk.protobuf.Request) + } + + static { + defaultInstance = new Request(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:com.orbekk.protobuf.Request) + } + + public interface ResponseOrBuilder + extends com.google.protobuf.MessageOrBuilder { + + // optional bytes response_proto = 1; + boolean hasResponseProto(); + com.google.protobuf.ByteString getResponseProto(); + + // optional .com.orbekk.protobuf.Response.RpcError error = 2; + boolean hasError(); + com.orbekk.protobuf.Data.Response.RpcError getError(); + + // optional int64 request_id = 5; + boolean hasRequestId(); + long getRequestId(); + + // optional bool hasFailed = 4; + boolean hasHasFailed(); + boolean getHasFailed(); + + // optional bool canceled = 6; + boolean hasCanceled(); + boolean getCanceled(); + + // optional bool done = 7 [default = true]; + boolean hasDone(); + boolean getDone(); + + // optional string error_text = 3; + boolean hasErrorText(); + String getErrorText(); + } + public static final class Response extends + com.google.protobuf.GeneratedMessage + implements ResponseOrBuilder { + // Use Response.newBuilder() to construct. + private Response(Builder builder) { + super(builder); + } + private Response(boolean noInit) {} + + private static final Response defaultInstance; + public static Response getDefaultInstance() { + return defaultInstance; + } + + public Response getDefaultInstanceForType() { + return defaultInstance; + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.orbekk.protobuf.Data.internal_static_com_orbekk_protobuf_Response_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.orbekk.protobuf.Data.internal_static_com_orbekk_protobuf_Response_fieldAccessorTable; + } + + public enum RpcError + implements com.google.protobuf.ProtocolMessageEnum { + UNKNOWN_SERVICE(0, 0), + UNKNOWN_METHOD(1, 1), + CANCELED(2, 2), + ; + + public static final int UNKNOWN_SERVICE_VALUE = 0; + public static final int UNKNOWN_METHOD_VALUE = 1; + public static final int CANCELED_VALUE = 2; + + + public final int getNumber() { return value; } + + public static RpcError valueOf(int value) { + switch (value) { + case 0: return UNKNOWN_SERVICE; + case 1: return UNKNOWN_METHOD; + case 2: return CANCELED; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static com.google.protobuf.Internal.EnumLiteMap + internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public RpcError findValueByNumber(int number) { + return RpcError.valueOf(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + return getDescriptor().getValues().get(index); + } + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return com.orbekk.protobuf.Data.Response.getDescriptor().getEnumTypes().get(0); + } + + private static final RpcError[] VALUES = { + UNKNOWN_SERVICE, UNKNOWN_METHOD, CANCELED, + }; + + public static RpcError valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + return VALUES[desc.getIndex()]; + } + + private final int index; + private final int value; + + private RpcError(int index, int value) { + this.index = index; + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:com.orbekk.protobuf.Response.RpcError) + } + + private int bitField0_; + // optional bytes response_proto = 1; + public static final int RESPONSE_PROTO_FIELD_NUMBER = 1; + private com.google.protobuf.ByteString responseProto_; + public boolean hasResponseProto() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public com.google.protobuf.ByteString getResponseProto() { + return responseProto_; + } + + // optional .com.orbekk.protobuf.Response.RpcError error = 2; + public static final int ERROR_FIELD_NUMBER = 2; + private com.orbekk.protobuf.Data.Response.RpcError error_; + public boolean hasError() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public com.orbekk.protobuf.Data.Response.RpcError getError() { + return error_; + } + + // optional int64 request_id = 5; + public static final int REQUEST_ID_FIELD_NUMBER = 5; + private long requestId_; + public boolean hasRequestId() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public long getRequestId() { + return requestId_; + } + + // optional bool hasFailed = 4; + public static final int HASFAILED_FIELD_NUMBER = 4; + private boolean hasFailed_; + public boolean hasHasFailed() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + public boolean getHasFailed() { + return hasFailed_; + } + + // optional bool canceled = 6; + public static final int CANCELED_FIELD_NUMBER = 6; + private boolean canceled_; + public boolean hasCanceled() { + return ((bitField0_ & 0x00000010) == 0x00000010); + } + public boolean getCanceled() { + return canceled_; + } + + // optional bool done = 7 [default = true]; + public static final int DONE_FIELD_NUMBER = 7; + private boolean done_; + public boolean hasDone() { + return ((bitField0_ & 0x00000020) == 0x00000020); + } + public boolean getDone() { + return done_; + } + + // optional string error_text = 3; + public static final int ERROR_TEXT_FIELD_NUMBER = 3; + private java.lang.Object errorText_; + public boolean hasErrorText() { + return ((bitField0_ & 0x00000040) == 0x00000040); + } + public String getErrorText() { + java.lang.Object ref = errorText_; + if (ref instanceof String) { + return (String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + String s = bs.toStringUtf8(); + if (com.google.protobuf.Internal.isValidUtf8(bs)) { + errorText_ = s; + } + return s; + } + } + private com.google.protobuf.ByteString getErrorTextBytes() { + java.lang.Object ref = errorText_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((String) ref); + errorText_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private void initFields() { + responseProto_ = com.google.protobuf.ByteString.EMPTY; + error_ = com.orbekk.protobuf.Data.Response.RpcError.UNKNOWN_SERVICE; + requestId_ = 0L; + hasFailed_ = false; + canceled_ = false; + done_ = true; + errorText_ = ""; + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized != -1) return isInitialized == 1; + + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeBytes(1, responseProto_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeEnum(2, error_.getNumber()); + } + if (((bitField0_ & 0x00000040) == 0x00000040)) { + output.writeBytes(3, getErrorTextBytes()); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + output.writeBool(4, hasFailed_); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + output.writeInt64(5, requestId_); + } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + output.writeBool(6, canceled_); + } + if (((bitField0_ & 0x00000020) == 0x00000020)) { + output.writeBool(7, done_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(1, responseProto_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(2, error_.getNumber()); + } + if (((bitField0_ & 0x00000040) == 0x00000040)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(3, getErrorTextBytes()); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + size += com.google.protobuf.CodedOutputStream + .computeBoolSize(4, hasFailed_); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(5, requestId_); + } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + size += com.google.protobuf.CodedOutputStream + .computeBoolSize(6, canceled_); + } + if (((bitField0_ & 0x00000020) == 0x00000020)) { + size += com.google.protobuf.CodedOutputStream + .computeBoolSize(7, done_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static com.orbekk.protobuf.Data.Response parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static com.orbekk.protobuf.Data.Response parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static com.orbekk.protobuf.Data.Response parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static com.orbekk.protobuf.Data.Response parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static com.orbekk.protobuf.Data.Response parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static com.orbekk.protobuf.Data.Response parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static com.orbekk.protobuf.Data.Response parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static com.orbekk.protobuf.Data.Response parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static com.orbekk.protobuf.Data.Response parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static com.orbekk.protobuf.Data.Response parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(com.orbekk.protobuf.Data.Response prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder + implements com.orbekk.protobuf.Data.ResponseOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.orbekk.protobuf.Data.internal_static_com_orbekk_protobuf_Response_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.orbekk.protobuf.Data.internal_static_com_orbekk_protobuf_Response_fieldAccessorTable; + } + + // Construct using com.orbekk.protobuf.Data.Response.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + responseProto_ = com.google.protobuf.ByteString.EMPTY; + bitField0_ = (bitField0_ & ~0x00000001); + error_ = com.orbekk.protobuf.Data.Response.RpcError.UNKNOWN_SERVICE; + bitField0_ = (bitField0_ & ~0x00000002); + requestId_ = 0L; + bitField0_ = (bitField0_ & ~0x00000004); + hasFailed_ = false; + bitField0_ = (bitField0_ & ~0x00000008); + canceled_ = false; + bitField0_ = (bitField0_ & ~0x00000010); + done_ = true; + bitField0_ = (bitField0_ & ~0x00000020); + errorText_ = ""; + bitField0_ = (bitField0_ & ~0x00000040); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return com.orbekk.protobuf.Data.Response.getDescriptor(); + } + + public com.orbekk.protobuf.Data.Response getDefaultInstanceForType() { + return com.orbekk.protobuf.Data.Response.getDefaultInstance(); + } + + public com.orbekk.protobuf.Data.Response build() { + com.orbekk.protobuf.Data.Response result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + private com.orbekk.protobuf.Data.Response buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + com.orbekk.protobuf.Data.Response result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return result; + } + + public com.orbekk.protobuf.Data.Response buildPartial() { + com.orbekk.protobuf.Data.Response result = new com.orbekk.protobuf.Data.Response(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + result.responseProto_ = responseProto_; + if (((from_bitField0_ & 0x00000002) == 0x00000002)) { + to_bitField0_ |= 0x00000002; + } + result.error_ = error_; + if (((from_bitField0_ & 0x00000004) == 0x00000004)) { + to_bitField0_ |= 0x00000004; + } + result.requestId_ = requestId_; + if (((from_bitField0_ & 0x00000008) == 0x00000008)) { + to_bitField0_ |= 0x00000008; + } + result.hasFailed_ = hasFailed_; + if (((from_bitField0_ & 0x00000010) == 0x00000010)) { + to_bitField0_ |= 0x00000010; + } + result.canceled_ = canceled_; + if (((from_bitField0_ & 0x00000020) == 0x00000020)) { + to_bitField0_ |= 0x00000020; + } + result.done_ = done_; + if (((from_bitField0_ & 0x00000040) == 0x00000040)) { + to_bitField0_ |= 0x00000040; + } + result.errorText_ = errorText_; + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.orbekk.protobuf.Data.Response) { + return mergeFrom((com.orbekk.protobuf.Data.Response)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.orbekk.protobuf.Data.Response other) { + if (other == com.orbekk.protobuf.Data.Response.getDefaultInstance()) return this; + if (other.hasResponseProto()) { + setResponseProto(other.getResponseProto()); + } + if (other.hasError()) { + setError(other.getError()); + } + if (other.hasRequestId()) { + setRequestId(other.getRequestId()); + } + if (other.hasHasFailed()) { + setHasFailed(other.getHasFailed()); + } + if (other.hasCanceled()) { + setCanceled(other.getCanceled()); + } + if (other.hasDone()) { + setDone(other.getDone()); + } + if (other.hasErrorText()) { + setErrorText(other.getErrorText()); + } + this.mergeUnknownFields(other.getUnknownFields()); + 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.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder( + this.getUnknownFields()); + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + this.setUnknownFields(unknownFields.build()); + onChanged(); + return this; + } + break; + } + case 10: { + bitField0_ |= 0x00000001; + responseProto_ = input.readBytes(); + break; + } + case 16: { + int rawValue = input.readEnum(); + com.orbekk.protobuf.Data.Response.RpcError value = com.orbekk.protobuf.Data.Response.RpcError.valueOf(rawValue); + if (value == null) { + unknownFields.mergeVarintField(2, rawValue); + } else { + bitField0_ |= 0x00000002; + error_ = value; + } + break; + } + case 26: { + bitField0_ |= 0x00000040; + errorText_ = input.readBytes(); + break; + } + case 32: { + bitField0_ |= 0x00000008; + hasFailed_ = input.readBool(); + break; + } + case 40: { + bitField0_ |= 0x00000004; + requestId_ = input.readInt64(); + break; + } + case 48: { + bitField0_ |= 0x00000010; + canceled_ = input.readBool(); + break; + } + case 56: { + bitField0_ |= 0x00000020; + done_ = input.readBool(); + break; + } + } + } + } + + private int bitField0_; + + // optional bytes response_proto = 1; + private com.google.protobuf.ByteString responseProto_ = com.google.protobuf.ByteString.EMPTY; + public boolean hasResponseProto() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + public com.google.protobuf.ByteString getResponseProto() { + return responseProto_; + } + public Builder setResponseProto(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + responseProto_ = value; + onChanged(); + return this; + } + public Builder clearResponseProto() { + bitField0_ = (bitField0_ & ~0x00000001); + responseProto_ = getDefaultInstance().getResponseProto(); + onChanged(); + return this; + } + + // optional .com.orbekk.protobuf.Response.RpcError error = 2; + private com.orbekk.protobuf.Data.Response.RpcError error_ = com.orbekk.protobuf.Data.Response.RpcError.UNKNOWN_SERVICE; + public boolean hasError() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + public com.orbekk.protobuf.Data.Response.RpcError getError() { + return error_; + } + public Builder setError(com.orbekk.protobuf.Data.Response.RpcError value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + error_ = value; + onChanged(); + return this; + } + public Builder clearError() { + bitField0_ = (bitField0_ & ~0x00000002); + error_ = com.orbekk.protobuf.Data.Response.RpcError.UNKNOWN_SERVICE; + onChanged(); + return this; + } + + // optional int64 request_id = 5; + private long requestId_ ; + public boolean hasRequestId() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + public long getRequestId() { + return requestId_; + } + public Builder setRequestId(long value) { + bitField0_ |= 0x00000004; + requestId_ = value; + onChanged(); + return this; + } + public Builder clearRequestId() { + bitField0_ = (bitField0_ & ~0x00000004); + requestId_ = 0L; + onChanged(); + return this; + } + + // optional bool hasFailed = 4; + private boolean hasFailed_ ; + public boolean hasHasFailed() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + public boolean getHasFailed() { + return hasFailed_; + } + public Builder setHasFailed(boolean value) { + bitField0_ |= 0x00000008; + hasFailed_ = value; + onChanged(); + return this; + } + public Builder clearHasFailed() { + bitField0_ = (bitField0_ & ~0x00000008); + hasFailed_ = false; + onChanged(); + return this; + } + + // optional bool canceled = 6; + private boolean canceled_ ; + public boolean hasCanceled() { + return ((bitField0_ & 0x00000010) == 0x00000010); + } + public boolean getCanceled() { + return canceled_; + } + public Builder setCanceled(boolean value) { + bitField0_ |= 0x00000010; + canceled_ = value; + onChanged(); + return this; + } + public Builder clearCanceled() { + bitField0_ = (bitField0_ & ~0x00000010); + canceled_ = false; + onChanged(); + return this; + } + + // optional bool done = 7 [default = true]; + private boolean done_ = true; + public boolean hasDone() { + return ((bitField0_ & 0x00000020) == 0x00000020); + } + public boolean getDone() { + return done_; + } + public Builder setDone(boolean value) { + bitField0_ |= 0x00000020; + done_ = value; + onChanged(); + return this; + } + public Builder clearDone() { + bitField0_ = (bitField0_ & ~0x00000020); + done_ = true; + onChanged(); + return this; + } + + // optional string error_text = 3; + private java.lang.Object errorText_ = ""; + public boolean hasErrorText() { + return ((bitField0_ & 0x00000040) == 0x00000040); + } + public String getErrorText() { + java.lang.Object ref = errorText_; + if (!(ref instanceof String)) { + String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); + errorText_ = s; + return s; + } else { + return (String) ref; + } + } + public Builder setErrorText(String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000040; + errorText_ = value; + onChanged(); + return this; + } + public Builder clearErrorText() { + bitField0_ = (bitField0_ & ~0x00000040); + errorText_ = getDefaultInstance().getErrorText(); + onChanged(); + return this; + } + void setErrorText(com.google.protobuf.ByteString value) { + bitField0_ |= 0x00000040; + errorText_ = value; + onChanged(); + } + + // @@protoc_insertion_point(builder_scope:com.orbekk.protobuf.Response) + } + + static { + defaultInstance = new Response(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:com.orbekk.protobuf.Response) + } + + private static com.google.protobuf.Descriptors.Descriptor + internal_static_com_orbekk_protobuf_Request_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_com_orbekk_protobuf_Request_fieldAccessorTable; + private static com.google.protobuf.Descriptors.Descriptor + internal_static_com_orbekk_protobuf_Response_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_com_orbekk_protobuf_Response_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,src/main/java/com/orbekk/protobuf/Data" + + ".proto\022\023com.orbekk.protobuf\"d\n\007Request\022\031" + + "\n\021full_service_name\030\001 \001(\t\022\023\n\013method_name" + + "\030\002 \001(\t\022\025\n\rrequest_proto\030\003 \001(\014\022\022\n\nrequest" + + "_id\030\004 \001(\003\"\375\001\n\010Response\022\026\n\016response_proto" + + "\030\001 \001(\014\0225\n\005error\030\002 \001(\0162&.com.orbekk.proto" + + "buf.Response.RpcError\022\022\n\nrequest_id\030\005 \001(" + + "\003\022\021\n\thasFailed\030\004 \001(\010\022\020\n\010canceled\030\006 \001(\010\022\022" + + "\n\004done\030\007 \001(\010:\004true\022\022\n\nerror_text\030\003 \001(\t\"A" + + "\n\010RpcError\022\023\n\017UNKNOWN_SERVICE\020\000\022\022\n\016UNKNO", + "WN_METHOD\020\001\022\014\n\010CANCELED\020\002" + }; + 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; + internal_static_com_orbekk_protobuf_Request_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_com_orbekk_protobuf_Request_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_com_orbekk_protobuf_Request_descriptor, + new java.lang.String[] { "FullServiceName", "MethodName", "RequestProto", "RequestId", }, + com.orbekk.protobuf.Data.Request.class, + com.orbekk.protobuf.Data.Request.Builder.class); + internal_static_com_orbekk_protobuf_Response_descriptor = + getDescriptor().getMessageTypes().get(1); + internal_static_com_orbekk_protobuf_Response_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_com_orbekk_protobuf_Response_descriptor, + new java.lang.String[] { "ResponseProto", "Error", "RequestId", "HasFailed", "Canceled", "Done", "ErrorText", }, + com.orbekk.protobuf.Data.Response.class, + com.orbekk.protobuf.Data.Response.Builder.class); + return null; + } + }; + com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + }, assigner); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/src/main/java/com/orbekk/protobuf/Data.proto b/src/main/java/com/orbekk/protobuf/Data.proto new file mode 100644 index 0000000..168ef29 --- /dev/null +++ b/src/main/java/com/orbekk/protobuf/Data.proto @@ -0,0 +1,27 @@ +package com.orbekk.protobuf; + +// Next tag: 6 +message Request { + optional string full_service_name = 1; + optional string method_name = 2; + optional bytes request_proto = 3; + optional int64 request_id = 4; +} + +// Next tag: 8 +message Response { + optional bytes response_proto = 1; + enum RpcError { + UNKNOWN_SERVICE = 0; + UNKNOWN_METHOD = 1; + CANCELED = 2; + }; + optional RpcError error = 2; + optional int64 request_id = 5; + + // Rpc status + optional bool hasFailed = 4; + optional bool canceled = 6; + optional bool done = 7 [default = true]; + optional string error_text = 3; +} diff --git a/src/main/java/com/orbekk/protobuf/Rpc.java b/src/main/java/com/orbekk/protobuf/Rpc.java index 38ff1ea..9b087d7 100644 --- a/src/main/java/com/orbekk/protobuf/Rpc.java +++ b/src/main/java/com/orbekk/protobuf/Rpc.java @@ -1,1348 +1,99 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: src/main/java/com/orbekk/protobuf/Rpc.proto - package com.orbekk.protobuf; -public final class Rpc { - private Rpc() {} - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistry registry) { - } - public interface RequestOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // optional string full_service_name = 1; - boolean hasFullServiceName(); - String getFullServiceName(); - - // optional string method_name = 2; - boolean hasMethodName(); - String getMethodName(); - - // optional bytes request_proto = 3; - boolean hasRequestProto(); - com.google.protobuf.ByteString getRequestProto(); - - // optional int64 request_id = 4; - boolean hasRequestId(); - long getRequestId(); - } - public static final class Request extends - com.google.protobuf.GeneratedMessage - implements RequestOrBuilder { - // Use Request.newBuilder() to construct. - private Request(Builder builder) { - super(builder); - } - private Request(boolean noInit) {} - - private static final Request defaultInstance; - public static Request getDefaultInstance() { - return defaultInstance; - } - - public Request getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.orbekk.protobuf.Rpc.internal_static_com_orbekk_protobuf_Request_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.orbekk.protobuf.Rpc.internal_static_com_orbekk_protobuf_Request_fieldAccessorTable; - } - - private int bitField0_; - // optional string full_service_name = 1; - public static final int FULL_SERVICE_NAME_FIELD_NUMBER = 1; - private java.lang.Object fullServiceName_; - public boolean hasFullServiceName() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public String getFullServiceName() { - java.lang.Object ref = fullServiceName_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - fullServiceName_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getFullServiceNameBytes() { - java.lang.Object ref = fullServiceName_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - fullServiceName_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional string method_name = 2; - public static final int METHOD_NAME_FIELD_NUMBER = 2; - private java.lang.Object methodName_; - public boolean hasMethodName() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public String getMethodName() { - java.lang.Object ref = methodName_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - methodName_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getMethodNameBytes() { - java.lang.Object ref = methodName_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - methodName_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional bytes request_proto = 3; - public static final int REQUEST_PROTO_FIELD_NUMBER = 3; - private com.google.protobuf.ByteString requestProto_; - public boolean hasRequestProto() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public com.google.protobuf.ByteString getRequestProto() { - return requestProto_; - } - - // optional int64 request_id = 4; - public static final int REQUEST_ID_FIELD_NUMBER = 4; - private long requestId_; - public boolean hasRequestId() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - public long getRequestId() { - return requestId_; - } - - private void initFields() { - fullServiceName_ = ""; - methodName_ = ""; - requestProto_ = com.google.protobuf.ByteString.EMPTY; - requestId_ = 0L; - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeBytes(1, getFullServiceNameBytes()); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeBytes(2, getMethodNameBytes()); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - output.writeBytes(3, requestProto_); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - output.writeInt64(4, requestId_); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(1, getFullServiceNameBytes()); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(2, getMethodNameBytes()); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(3, requestProto_); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - size += com.google.protobuf.CodedOutputStream - .computeInt64Size(4, requestId_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static com.orbekk.protobuf.Rpc.Request parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static com.orbekk.protobuf.Rpc.Request parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static com.orbekk.protobuf.Rpc.Request parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static com.orbekk.protobuf.Rpc.Request parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static com.orbekk.protobuf.Rpc.Request parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static com.orbekk.protobuf.Rpc.Request parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static com.orbekk.protobuf.Rpc.Request parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static com.orbekk.protobuf.Rpc.Request parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static com.orbekk.protobuf.Rpc.Request parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static com.orbekk.protobuf.Rpc.Request parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.CountDownLatch; + +import com.google.protobuf.RpcCallback; +import com.google.protobuf.RpcController; + +public class Rpc implements RpcController { + private String errorText = ""; + private boolean hasFailed; + private boolean canceled; + private List> cancelNotificationListeners = null; - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(com.orbekk.protobuf.Rpc.Request prototype) { - return newBuilder().mergeFrom(prototype); + public Rpc() { } - public Builder toBuilder() { return newBuilder(this); } - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; + public Rpc(Rpc other) { + copyFrom(other); } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements com.orbekk.protobuf.Rpc.RequestOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.orbekk.protobuf.Rpc.internal_static_com_orbekk_protobuf_Request_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.orbekk.protobuf.Rpc.internal_static_com_orbekk_protobuf_Request_fieldAccessorTable; - } - - // Construct using com.orbekk.protobuf.Rpc.Request.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - fullServiceName_ = ""; - bitField0_ = (bitField0_ & ~0x00000001); - methodName_ = ""; - bitField0_ = (bitField0_ & ~0x00000002); - requestProto_ = com.google.protobuf.ByteString.EMPTY; - bitField0_ = (bitField0_ & ~0x00000004); - requestId_ = 0L; - bitField0_ = (bitField0_ & ~0x00000008); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return com.orbekk.protobuf.Rpc.Request.getDescriptor(); - } - - public com.orbekk.protobuf.Rpc.Request getDefaultInstanceForType() { - return com.orbekk.protobuf.Rpc.Request.getDefaultInstance(); - } - - public com.orbekk.protobuf.Rpc.Request build() { - com.orbekk.protobuf.Rpc.Request result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private com.orbekk.protobuf.Rpc.Request buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - com.orbekk.protobuf.Rpc.Request result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public com.orbekk.protobuf.Rpc.Request buildPartial() { - com.orbekk.protobuf.Rpc.Request result = new com.orbekk.protobuf.Rpc.Request(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - result.fullServiceName_ = fullServiceName_; - if (((from_bitField0_ & 0x00000002) == 0x00000002)) { - to_bitField0_ |= 0x00000002; - } - result.methodName_ = methodName_; - if (((from_bitField0_ & 0x00000004) == 0x00000004)) { - to_bitField0_ |= 0x00000004; - } - result.requestProto_ = requestProto_; - if (((from_bitField0_ & 0x00000008) == 0x00000008)) { - to_bitField0_ |= 0x00000008; - } - result.requestId_ = requestId_; - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof com.orbekk.protobuf.Rpc.Request) { - return mergeFrom((com.orbekk.protobuf.Rpc.Request)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(com.orbekk.protobuf.Rpc.Request other) { - if (other == com.orbekk.protobuf.Rpc.Request.getDefaultInstance()) return this; - if (other.hasFullServiceName()) { - setFullServiceName(other.getFullServiceName()); - } - if (other.hasMethodName()) { - setMethodName(other.getMethodName()); - } - if (other.hasRequestProto()) { - setRequestProto(other.getRequestProto()); - } - if (other.hasRequestId()) { - setRequestId(other.getRequestId()); - } - this.mergeUnknownFields(other.getUnknownFields()); - 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.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 10: { - bitField0_ |= 0x00000001; - fullServiceName_ = input.readBytes(); - break; - } - case 18: { - bitField0_ |= 0x00000002; - methodName_ = input.readBytes(); - break; - } - case 26: { - bitField0_ |= 0x00000004; - requestProto_ = input.readBytes(); - break; - } - case 32: { - bitField0_ |= 0x00000008; - requestId_ = input.readInt64(); - break; + + public void copyFrom(Rpc other) { + errorText = other.errorText; + hasFailed = other.hasFailed; + canceled = other.canceled; + if (other.cancelNotificationListeners != null) { + for (RpcCallback listener : + other.cancelNotificationListeners) { + notifyOnCancel(listener); } - } - } - } - - private int bitField0_; - - // optional string full_service_name = 1; - private java.lang.Object fullServiceName_ = ""; - public boolean hasFullServiceName() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public String getFullServiceName() { - java.lang.Object ref = fullServiceName_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - fullServiceName_ = s; - return s; - } else { - return (String) ref; - } - } - public Builder setFullServiceName(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000001; - fullServiceName_ = value; - onChanged(); - return this; - } - public Builder clearFullServiceName() { - bitField0_ = (bitField0_ & ~0x00000001); - fullServiceName_ = getDefaultInstance().getFullServiceName(); - onChanged(); - return this; - } - void setFullServiceName(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000001; - fullServiceName_ = value; - onChanged(); - } - - // optional string method_name = 2; - private java.lang.Object methodName_ = ""; - public boolean hasMethodName() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public String getMethodName() { - java.lang.Object ref = methodName_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - methodName_ = s; - return s; - } else { - return (String) ref; } - } - public Builder setMethodName(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000002; - methodName_ = value; - onChanged(); - return this; - } - public Builder clearMethodName() { - bitField0_ = (bitField0_ & ~0x00000002); - methodName_ = getDefaultInstance().getMethodName(); - onChanged(); - return this; - } - void setMethodName(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000002; - methodName_ = value; - onChanged(); - } - - // optional bytes request_proto = 3; - private com.google.protobuf.ByteString requestProto_ = com.google.protobuf.ByteString.EMPTY; - public boolean hasRequestProto() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public com.google.protobuf.ByteString getRequestProto() { - return requestProto_; - } - public Builder setRequestProto(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000004; - requestProto_ = value; - onChanged(); - return this; - } - public Builder clearRequestProto() { - bitField0_ = (bitField0_ & ~0x00000004); - requestProto_ = getDefaultInstance().getRequestProto(); - onChanged(); - return this; - } - - // optional int64 request_id = 4; - private long requestId_ ; - public boolean hasRequestId() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - public long getRequestId() { - return requestId_; - } - public Builder setRequestId(long value) { - bitField0_ |= 0x00000008; - requestId_ = value; - onChanged(); - return this; - } - public Builder clearRequestId() { - bitField0_ = (bitField0_ & ~0x00000008); - requestId_ = 0L; - onChanged(); - return this; - } - - // @@protoc_insertion_point(builder_scope:com.orbekk.protobuf.Request) - } - - static { - defaultInstance = new Request(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:com.orbekk.protobuf.Request) - } - - public interface ResponseOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // optional bytes response_proto = 1; - boolean hasResponseProto(); - com.google.protobuf.ByteString getResponseProto(); - - // optional .com.orbekk.protobuf.Response.Error error = 2; - boolean hasError(); - com.orbekk.protobuf.Rpc.Response.Error getError(); - - // optional int32 app_error = 4; - boolean hasAppError(); - int getAppError(); - - // optional string error_message = 3; - boolean hasErrorMessage(); - String getErrorMessage(); - - // optional int64 request_id = 5; - boolean hasRequestId(); - long getRequestId(); - } - public static final class Response extends - com.google.protobuf.GeneratedMessage - implements ResponseOrBuilder { - // Use Response.newBuilder() to construct. - private Response(Builder builder) { - super(builder); } - private Response(boolean noInit) {} - private static final Response defaultInstance; - public static Response getDefaultInstance() { - return defaultInstance; + public void writeTo(Data.Response.Builder response) { + response.setHasFailed(hasFailed); + response.setCanceled(canceled); + response.setErrorText(errorText); } - public Response getDefaultInstanceForType() { - return defaultInstance; + public void readFrom(Data.Response response) { + hasFailed = response.getHasFailed(); + canceled = response.getCanceled(); + errorText = response.getErrorText(); } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.orbekk.protobuf.Rpc.internal_static_com_orbekk_protobuf_Response_descriptor; + @Override + public String errorText() { + return errorText; } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.orbekk.protobuf.Rpc.internal_static_com_orbekk_protobuf_Response_fieldAccessorTable; - } - - public enum Error - implements com.google.protobuf.ProtocolMessageEnum { - UNKNOWN_SERVICE(0, 0), - UNKNOWN_METHOD(1, 1), - CANCELED(2, 2), - APP_ERROR(3, 3), - ; - - public static final int UNKNOWN_SERVICE_VALUE = 0; - public static final int UNKNOWN_METHOD_VALUE = 1; - public static final int CANCELED_VALUE = 2; - public static final int APP_ERROR_VALUE = 3; - - - public final int getNumber() { return value; } - - public static Error valueOf(int value) { - switch (value) { - case 0: return UNKNOWN_SERVICE; - case 1: return UNKNOWN_METHOD; - case 2: return CANCELED; - case 3: return APP_ERROR; - default: return null; - } - } - - public static com.google.protobuf.Internal.EnumLiteMap - internalGetValueMap() { - return internalValueMap; - } - private static com.google.protobuf.Internal.EnumLiteMap - internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap() { - public Error findValueByNumber(int number) { - return Error.valueOf(number); - } - }; - - public final com.google.protobuf.Descriptors.EnumValueDescriptor - getValueDescriptor() { - return getDescriptor().getValues().get(index); - } - public final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptorForType() { - return getDescriptor(); - } - public static final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptor() { - return com.orbekk.protobuf.Rpc.Response.getDescriptor().getEnumTypes().get(0); - } - - private static final Error[] VALUES = { - UNKNOWN_SERVICE, UNKNOWN_METHOD, CANCELED, APP_ERROR, - }; - - public static Error valueOf( - com.google.protobuf.Descriptors.EnumValueDescriptor desc) { - if (desc.getType() != getDescriptor()) { - throw new java.lang.IllegalArgumentException( - "EnumValueDescriptor is not for this type."); - } - return VALUES[desc.getIndex()]; - } - - private final int index; - private final int value; - - private Error(int index, int value) { - this.index = index; - this.value = value; - } - - // @@protoc_insertion_point(enum_scope:com.orbekk.protobuf.Response.Error) - } - - private int bitField0_; - // optional bytes response_proto = 1; - public static final int RESPONSE_PROTO_FIELD_NUMBER = 1; - private com.google.protobuf.ByteString responseProto_; - public boolean hasResponseProto() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public com.google.protobuf.ByteString getResponseProto() { - return responseProto_; - } - - // optional .com.orbekk.protobuf.Response.Error error = 2; - public static final int ERROR_FIELD_NUMBER = 2; - private com.orbekk.protobuf.Rpc.Response.Error error_; - public boolean hasError() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public com.orbekk.protobuf.Rpc.Response.Error getError() { - return error_; + + public boolean isOk() { + return !hasFailed && !canceled; } - // optional int32 app_error = 4; - public static final int APP_ERROR_FIELD_NUMBER = 4; - private int appError_; - public boolean hasAppError() { - return ((bitField0_ & 0x00000004) == 0x00000004); + @Override + public boolean failed() { + return hasFailed; } - public int getAppError() { - return appError_; - } - - // optional string error_message = 3; - public static final int ERROR_MESSAGE_FIELD_NUMBER = 3; - private java.lang.Object errorMessage_; - public boolean hasErrorMessage() { - return ((bitField0_ & 0x00000008) == 0x00000008); + + @Override + public boolean isCanceled() { + return canceled; } - public String getErrorMessage() { - java.lang.Object ref = errorMessage_; - if (ref instanceof String) { - return (String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - String s = bs.toStringUtf8(); - if (com.google.protobuf.Internal.isValidUtf8(bs)) { - errorMessage_ = s; + + @Override + public void notifyOnCancel(RpcCallback listener) { + if (cancelNotificationListeners == null) { + cancelNotificationListeners = + new ArrayList>(); } - return s; - } - } - private com.google.protobuf.ByteString getErrorMessageBytes() { - java.lang.Object ref = errorMessage_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - errorMessage_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - // optional int64 request_id = 5; - public static final int REQUEST_ID_FIELD_NUMBER = 5; - private long requestId_; - public boolean hasRequestId() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - public long getRequestId() { - return requestId_; - } - - private void initFields() { - responseProto_ = com.google.protobuf.ByteString.EMPTY; - error_ = com.orbekk.protobuf.Rpc.Response.Error.UNKNOWN_SERVICE; - appError_ = 0; - errorMessage_ = ""; - requestId_ = 0L; - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeBytes(1, responseProto_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeEnum(2, error_.getNumber()); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - output.writeBytes(3, getErrorMessageBytes()); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - output.writeInt32(4, appError_); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - output.writeInt64(5, requestId_); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(1, responseProto_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - size += com.google.protobuf.CodedOutputStream - .computeEnumSize(2, error_.getNumber()); - } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(3, getErrorMessageBytes()); - } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - size += com.google.protobuf.CodedOutputStream - .computeInt32Size(4, appError_); - } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - size += com.google.protobuf.CodedOutputStream - .computeInt64Size(5, requestId_); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static com.orbekk.protobuf.Rpc.Response parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static com.orbekk.protobuf.Rpc.Response parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); + cancelNotificationListeners.add(listener); } - public static com.orbekk.protobuf.Rpc.Response parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static com.orbekk.protobuf.Rpc.Response parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static com.orbekk.protobuf.Rpc.Response parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static com.orbekk.protobuf.Rpc.Response parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static com.orbekk.protobuf.Rpc.Response parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static com.orbekk.protobuf.Rpc.Response parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static com.orbekk.protobuf.Rpc.Response parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static com.orbekk.protobuf.Rpc.Response parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(com.orbekk.protobuf.Rpc.Response prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; + + @Override + public void reset() { + copyFrom(new Rpc()); } - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder - implements com.orbekk.protobuf.Rpc.ResponseOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.orbekk.protobuf.Rpc.internal_static_com_orbekk_protobuf_Response_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.orbekk.protobuf.Rpc.internal_static_com_orbekk_protobuf_Response_fieldAccessorTable; - } - - // Construct using com.orbekk.protobuf.Rpc.Response.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - } - } - private static Builder create() { - return new Builder(); - } - - public Builder clear() { - super.clear(); - responseProto_ = com.google.protobuf.ByteString.EMPTY; - bitField0_ = (bitField0_ & ~0x00000001); - error_ = com.orbekk.protobuf.Rpc.Response.Error.UNKNOWN_SERVICE; - bitField0_ = (bitField0_ & ~0x00000002); - appError_ = 0; - bitField0_ = (bitField0_ & ~0x00000004); - errorMessage_ = ""; - bitField0_ = (bitField0_ & ~0x00000008); - requestId_ = 0L; - bitField0_ = (bitField0_ & ~0x00000010); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return com.orbekk.protobuf.Rpc.Response.getDescriptor(); - } - - public com.orbekk.protobuf.Rpc.Response getDefaultInstanceForType() { - return com.orbekk.protobuf.Rpc.Response.getDefaultInstance(); - } - - public com.orbekk.protobuf.Rpc.Response build() { - com.orbekk.protobuf.Rpc.Response result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - private com.orbekk.protobuf.Rpc.Response buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - com.orbekk.protobuf.Rpc.Response result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return result; - } - - public com.orbekk.protobuf.Rpc.Response buildPartial() { - com.orbekk.protobuf.Rpc.Response result = new com.orbekk.protobuf.Rpc.Response(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - result.responseProto_ = responseProto_; - if (((from_bitField0_ & 0x00000002) == 0x00000002)) { - to_bitField0_ |= 0x00000002; - } - result.error_ = error_; - if (((from_bitField0_ & 0x00000004) == 0x00000004)) { - to_bitField0_ |= 0x00000004; - } - result.appError_ = appError_; - if (((from_bitField0_ & 0x00000008) == 0x00000008)) { - to_bitField0_ |= 0x00000008; - } - result.errorMessage_ = errorMessage_; - if (((from_bitField0_ & 0x00000010) == 0x00000010)) { - to_bitField0_ |= 0x00000010; - } - result.requestId_ = requestId_; - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof com.orbekk.protobuf.Rpc.Response) { - return mergeFrom((com.orbekk.protobuf.Rpc.Response)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(com.orbekk.protobuf.Rpc.Response other) { - if (other == com.orbekk.protobuf.Rpc.Response.getDefaultInstance()) return this; - if (other.hasResponseProto()) { - setResponseProto(other.getResponseProto()); - } - if (other.hasError()) { - setError(other.getError()); - } - if (other.hasAppError()) { - setAppError(other.getAppError()); - } - if (other.hasErrorMessage()) { - setErrorMessage(other.getErrorMessage()); - } - if (other.hasRequestId()) { - setRequestId(other.getRequestId()); - } - this.mergeUnknownFields(other.getUnknownFields()); - 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.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - onChanged(); - return this; - } - break; - } - case 10: { - bitField0_ |= 0x00000001; - responseProto_ = input.readBytes(); - break; - } - case 16: { - int rawValue = input.readEnum(); - com.orbekk.protobuf.Rpc.Response.Error value = com.orbekk.protobuf.Rpc.Response.Error.valueOf(rawValue); - if (value == null) { - unknownFields.mergeVarintField(2, rawValue); - } else { - bitField0_ |= 0x00000002; - error_ = value; - } - break; - } - case 26: { - bitField0_ |= 0x00000008; - errorMessage_ = input.readBytes(); - break; - } - case 32: { - bitField0_ |= 0x00000004; - appError_ = input.readInt32(); - break; - } - case 40: { - bitField0_ |= 0x00000010; - requestId_ = input.readInt64(); - break; + + @Override + public void setFailed(String message) { + hasFailed = true; + errorText = message; + } + + public void cancel() { + canceled = true; + if (cancelNotificationListeners != null) { + for (RpcCallback listener : + cancelNotificationListeners) { + listener.run(null); } - } - } - } - - private int bitField0_; - - // optional bytes response_proto = 1; - private com.google.protobuf.ByteString responseProto_ = com.google.protobuf.ByteString.EMPTY; - public boolean hasResponseProto() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public com.google.protobuf.ByteString getResponseProto() { - return responseProto_; - } - public Builder setResponseProto(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000001; - responseProto_ = value; - onChanged(); - return this; - } - public Builder clearResponseProto() { - bitField0_ = (bitField0_ & ~0x00000001); - responseProto_ = getDefaultInstance().getResponseProto(); - onChanged(); - return this; - } - - // optional .com.orbekk.protobuf.Response.Error error = 2; - private com.orbekk.protobuf.Rpc.Response.Error error_ = com.orbekk.protobuf.Rpc.Response.Error.UNKNOWN_SERVICE; - public boolean hasError() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public com.orbekk.protobuf.Rpc.Response.Error getError() { - return error_; - } - public Builder setError(com.orbekk.protobuf.Rpc.Response.Error value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000002; - error_ = value; - onChanged(); - return this; - } - public Builder clearError() { - bitField0_ = (bitField0_ & ~0x00000002); - error_ = com.orbekk.protobuf.Rpc.Response.Error.UNKNOWN_SERVICE; - onChanged(); - return this; - } - - // optional int32 app_error = 4; - private int appError_ ; - public boolean hasAppError() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public int getAppError() { - return appError_; - } - public Builder setAppError(int value) { - bitField0_ |= 0x00000004; - appError_ = value; - onChanged(); - return this; - } - public Builder clearAppError() { - bitField0_ = (bitField0_ & ~0x00000004); - appError_ = 0; - onChanged(); - return this; - } - - // optional string error_message = 3; - private java.lang.Object errorMessage_ = ""; - public boolean hasErrorMessage() { - return ((bitField0_ & 0x00000008) == 0x00000008); - } - public String getErrorMessage() { - java.lang.Object ref = errorMessage_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - errorMessage_ = s; - return s; - } else { - return (String) ref; } - } - public Builder setErrorMessage(String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000008; - errorMessage_ = value; - onChanged(); - return this; - } - public Builder clearErrorMessage() { - bitField0_ = (bitField0_ & ~0x00000008); - errorMessage_ = getDefaultInstance().getErrorMessage(); - onChanged(); - return this; - } - void setErrorMessage(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000008; - errorMessage_ = value; - onChanged(); - } - - // optional int64 request_id = 5; - private long requestId_ ; - public boolean hasRequestId() { - return ((bitField0_ & 0x00000010) == 0x00000010); - } - public long getRequestId() { - return requestId_; - } - public Builder setRequestId(long value) { - bitField0_ |= 0x00000010; - requestId_ = value; - onChanged(); - return this; - } - public Builder clearRequestId() { - bitField0_ = (bitField0_ & ~0x00000010); - requestId_ = 0L; - onChanged(); - return this; - } - - // @@protoc_insertion_point(builder_scope:com.orbekk.protobuf.Response) } - - static { - defaultInstance = new Response(true); - defaultInstance.initFields(); + + @Override + public void startCancel() { } - - // @@protoc_insertion_point(class_scope:com.orbekk.protobuf.Response) - } - - private static com.google.protobuf.Descriptors.Descriptor - internal_static_com_orbekk_protobuf_Request_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_com_orbekk_protobuf_Request_fieldAccessorTable; - private static com.google.protobuf.Descriptors.Descriptor - internal_static_com_orbekk_protobuf_Response_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_com_orbekk_protobuf_Response_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+src/main/java/com/orbekk/protobuf/Rpc." + - "proto\022\023com.orbekk.protobuf\"d\n\007Request\022\031\n" + - "\021full_service_name\030\001 \001(\t\022\023\n\013method_name\030" + - "\002 \001(\t\022\025\n\rrequest_proto\030\003 \001(\014\022\022\n\nrequest_" + - "id\030\004 \001(\003\"\343\001\n\010Response\022\026\n\016response_proto\030" + - "\001 \001(\014\0222\n\005error\030\002 \001(\0162#.com.orbekk.protob" + - "uf.Response.Error\022\021\n\tapp_error\030\004 \001(\005\022\025\n\r" + - "error_message\030\003 \001(\t\022\022\n\nrequest_id\030\005 \001(\003\"" + - "M\n\005Error\022\023\n\017UNKNOWN_SERVICE\020\000\022\022\n\016UNKNOWN" + - "_METHOD\020\001\022\014\n\010CANCELED\020\002\022\r\n\tAPP_ERROR\020\003" - }; - 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; - internal_static_com_orbekk_protobuf_Request_descriptor = - getDescriptor().getMessageTypes().get(0); - internal_static_com_orbekk_protobuf_Request_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_com_orbekk_protobuf_Request_descriptor, - new java.lang.String[] { "FullServiceName", "MethodName", "RequestProto", "RequestId", }, - com.orbekk.protobuf.Rpc.Request.class, - com.orbekk.protobuf.Rpc.Request.Builder.class); - internal_static_com_orbekk_protobuf_Response_descriptor = - getDescriptor().getMessageTypes().get(1); - internal_static_com_orbekk_protobuf_Response_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_com_orbekk_protobuf_Response_descriptor, - new java.lang.String[] { "ResponseProto", "Error", "AppError", "ErrorMessage", "RequestId", }, - com.orbekk.protobuf.Rpc.Response.class, - com.orbekk.protobuf.Rpc.Response.Builder.class); - return null; - } - }; - com.google.protobuf.Descriptors.FileDescriptor - .internalBuildGeneratedFileFrom(descriptorData, - new com.google.protobuf.Descriptors.FileDescriptor[] { - }, assigner); - } - - // @@protoc_insertion_point(outer_class_scope) } diff --git a/src/main/java/com/orbekk/protobuf/Rpc.proto b/src/main/java/com/orbekk/protobuf/Rpc.proto deleted file mode 100644 index e4865fa..0000000 --- a/src/main/java/com/orbekk/protobuf/Rpc.proto +++ /dev/null @@ -1,24 +0,0 @@ -package com.orbekk.protobuf; - -// Next tag: 6 -message Request { - optional string full_service_name = 1; - optional string method_name = 2; - optional bytes request_proto = 3; - optional int64 request_id = 4; -} - -// Next tag: 6 -message Response { - optional bytes response_proto = 1; - enum Error { - UNKNOWN_SERVICE = 0; - UNKNOWN_METHOD = 1; - CANCELED = 2; - APP_ERROR = 3; - }; - optional Error error = 2; - optional int32 app_error = 4; - optional string error_message = 3; - optional int64 request_id = 5; -} diff --git a/src/main/java/com/orbekk/protobuf/RpcChannel.java b/src/main/java/com/orbekk/protobuf/RpcChannel.java index 56b54c2..94ab8a5 100644 --- a/src/main/java/com/orbekk/protobuf/RpcChannel.java +++ b/src/main/java/com/orbekk/protobuf/RpcChannel.java @@ -7,6 +7,8 @@ import java.net.UnknownHostException; import java.util.Collections; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.atomic.AtomicLong; import java.util.logging.Level; import java.util.logging.Logger; @@ -28,19 +30,20 @@ public class RpcChannel extends Thread implements private Map rpcs = Collections.synchronizedMap( new HashMap()); + private BlockingQueue sockets = new LinkedBlockingQueue(); private static class OngoingRequest implements Closeable { long id; - RpcController controller; + Rpc rpc; RpcCallback done; Message responsePrototype; Map rpcs; - public OngoingRequest(long id, RpcController controller, + public OngoingRequest(long id, Rpc rpc, RpcCallback done, Message responsePrototype, Map rpcs) { this.id = id; - this.controller = controller; + this.rpc = rpc; this.done = done; this.responsePrototype = responsePrototype; this.rpcs = rpcs; @@ -67,10 +70,8 @@ public class RpcChannel extends Thread implements if (socket == null || socket.isClosed()) { try { logger.info("Creating new socket to " + host + ":" + port); - synchronized (this) { - socket = new Socket(host, port); - notify(); - } + socket = new Socket(host, port); + sockets.add(socket); } catch (UnknownHostException e) { return null; } catch (IOException e) { @@ -82,17 +83,18 @@ public class RpcChannel extends Thread implements return socket; } - private Rpc.Request createRequest(Descriptors.MethodDescriptor method, + private Data.Request createRequest(Descriptors.MethodDescriptor method, RpcController controller, Message requestMessage, Message responsePrototype, RpcCallback done) { long id = nextId.incrementAndGet(); - OngoingRequest ongoingRequest = new OngoingRequest(id, controller, + Rpc rpc = (Rpc)controller; + OngoingRequest ongoingRequest = new OngoingRequest(id, rpc, done, responsePrototype, rpcs); rpcs.put(id, ongoingRequest); - Rpc.Request request = Rpc.Request.newBuilder() + Data.Request request = Data.Request.newBuilder() .setRequestId(id) .setFullServiceName(method.getService().getFullName()) .setMethodName(method.getName()) @@ -102,12 +104,13 @@ public class RpcChannel extends Thread implements return request; } - private void finishRequest(Rpc.Response response) { + private void finishRequest(Data.Response response) { OngoingRequest ongoingRequest = rpcs.remove(response.getRequestId()); if (ongoingRequest != null) { try { Message responsePb = ongoingRequest.responsePrototype.toBuilder() .mergeFrom(response.getResponseProto()).build(); + ongoingRequest.rpc.readFrom(response); ongoingRequest.done.run(responsePb); } catch (InvalidProtocolBufferException e) { throw new AssertionError("Should fail here."); @@ -122,7 +125,7 @@ public class RpcChannel extends Thread implements Message responsePrototype, RpcCallback done) { try { - Rpc.Request request = createRequest(method, controller, + Data.Request request = createRequest(method, controller, requestMessage, responsePrototype, done); Socket socket = getSocket(); request.writeDelimitedTo(socket.getOutputStream()); @@ -135,13 +138,17 @@ public class RpcChannel extends Thread implements try { logger.info("Handling responses to socket " + socket); while (!socket.isClosed()) { - Rpc.Response response; - response = Rpc.Response.parseDelimitedFrom( + Data.Response response; + response = Data.Response.parseDelimitedFrom( socket.getInputStream()); finishRequest(response); } } catch (IOException e) { - // Breaks the loop. + if (!rpcs.isEmpty()) { + logger.log(Level.WARNING, "IO Error. Canceling " + + rpcs.size() + " requests.", e); + cancelAllRpcs(); + } } finally { if (socket != null && !socket.isClosed()) { try { @@ -153,17 +160,21 @@ public class RpcChannel extends Thread implements } } + private void cancelAllRpcs() { + synchronized (rpcs) { + for (OngoingRequest request : rpcs.values()) { + request.rpc.setFailed("connection closed"); + request.done.run(null); + } + rpcs.clear(); + } + } + public void run() { while (!Thread.interrupted()) { try { - synchronized (this) { - if (socket == null) { - wait(); - } - } - if (socket != null) { - handleResponses(socket); - } + Socket socket = sockets.take(); + handleResponses(socket); } catch (InterruptedException e) { // Interrupts handled by outer loop } diff --git a/src/main/java/com/orbekk/protobuf/SimpleProtobufClient.java b/src/main/java/com/orbekk/protobuf/SimpleProtobufClient.java deleted file mode 100644 index 7d0dc6a..0000000 --- a/src/main/java/com/orbekk/protobuf/SimpleProtobufClient.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.orbekk.protobuf; - -import java.util.concurrent.CountDownLatch; -import java.util.logging.Logger; - -import com.google.protobuf.RpcCallback; - -public class SimpleProtobufClient { - static final Logger logger = - Logger.getLogger(SimpleProtobufClient.class.getName()); - -// public void run() { -// RpcChannel channel = RpcChannel.create("localhost", 10000); -// Test.TestService test = Test.TestService.newStub(channel); -// Test.TestRequest request = Test.TestRequest.newBuilder() -// .setId("Hello!") -// .build(); -// int count = 10; -// final CountDownLatch stop = new CountDownLatch(count); -// for (int i = 0; i < count; i++) { -// logger.info("Sending request."); -// test.run(null, request, new RpcCallback() { -// @Override public void run(Test.TestResponse response) { -// System.out.println("Response from server: " + response); -// stop.countDown(); -// } -// }); -// } -// try { -// stop.await(); -// } catch (InterruptedException e) { -// // Stop waiting. -// } -// } -// -// public static void main(String[] args) { -// new SimpleProtobufClient().run(); -// } -} diff --git a/src/main/java/com/orbekk/protobuf/SimpleProtobufServer.java b/src/main/java/com/orbekk/protobuf/SimpleProtobufServer.java index 690da81..f597556 100644 --- a/src/main/java/com/orbekk/protobuf/SimpleProtobufServer.java +++ b/src/main/java/com/orbekk/protobuf/SimpleProtobufServer.java @@ -1,27 +1,32 @@ package com.orbekk.protobuf; -import java.util.logging.Level; -import java.util.logging.Logger; -import java.io.OutputStream; import java.io.IOException; +import java.io.OutputStream; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.Socket; -import java.util.Scanner; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; +import java.util.logging.Level; +import java.util.logging.Logger; +import java.util.HashSet; + +import com.google.protobuf.Descriptors; import com.google.protobuf.Message; -import com.google.protobuf.Service; -import com.google.protobuf.RpcController; import com.google.protobuf.RpcCallback; -import com.google.protobuf.Descriptors; -import java.util.Map; -import java.util.HashMap; +import com.google.protobuf.Service; public class SimpleProtobufServer extends Thread { private static Logger logger = Logger.getLogger( SimpleProtobufServer.class.getName()); private ServerSocket serverSocket; + private Set activeClientSockets = + Collections.synchronizedSet(new HashSet()); private Map registeredServices = - new HashMap(); + Collections.synchronizedMap( + new HashMap()); public static SimpleProtobufServer create(int port) { try { @@ -44,7 +49,7 @@ public class SimpleProtobufServer extends Thread { return serverSocket.getLocalPort(); } - public synchronized void registerService(Service service) { + public void registerService(Service service) { String serviceName = service.getDescriptorForType().getFullName(); if (registeredServices.containsKey(serviceName)) { logger.warning("Already registered service with this name."); @@ -53,25 +58,31 @@ public class SimpleProtobufServer extends Thread { registeredServices.put(serviceName, service); } - public void handleRequest(Rpc.Request request, OutputStream out) + public void handleRequest(Data.Request request, OutputStream out) throws IOException { - Service service = registeredServices.get(request.getFullServiceName()); - final Rpc.Response.Builder response = Rpc.Response.newBuilder(); + final Service service = registeredServices.get(request.getFullServiceName()); + Rpc rpc = new Rpc(); + final Data.Response.Builder response = Data.Response.newBuilder(); response.setRequestId(request.getRequestId()); if (service == null) { - response.setError(Rpc.Response.Error.UNKNOWN_SERVICE); + response.setError(Data.Response.RpcError.UNKNOWN_SERVICE); response.build().writeDelimitedTo(out); return; } - Descriptors.MethodDescriptor method = service.getDescriptorForType() + final Descriptors.MethodDescriptor method = service.getDescriptorForType() .findMethodByName(request.getMethodName()); if (method == null) { - response.setError(Rpc.Response.Error.UNKNOWN_METHOD); + response.setError(Data.Response.RpcError.UNKNOWN_METHOD); response.build().writeDelimitedTo(out); return; } RpcCallback doneCallback = new RpcCallback() { @Override public void run(Message responseMessage) { + if (responseMessage == null) { + responseMessage = service + .getResponsePrototype(method) + .toBuilder().build(); + } response.setResponseProto(responseMessage.toByteString()); } }; @@ -79,16 +90,18 @@ public class SimpleProtobufServer extends Thread { .toBuilder() .mergeFrom(request.getRequestProto()) .build(); - service.callMethod(method, null, requestMessage, doneCallback); + service.callMethod(method, rpc, requestMessage, doneCallback); + rpc.writeTo(response); response.build().writeDelimitedTo(out); } private void handleConnection(final Socket connection) { new Thread(new Runnable() { @Override public void run() { + activeClientSockets.add(connection); try { while (true) { - Rpc.Request r1 = Rpc.Request.parseDelimitedFrom( + Data.Request r1 = Data.Request.parseDelimitedFrom( connection.getInputStream()); if (r1 == null) { try { @@ -106,10 +119,28 @@ public class SimpleProtobufServer extends Thread { connection.close(); } catch (IOException e) { } + activeClientSockets.remove(connection); } } }).start(); } + + @Override public void interrupt() { + super.interrupt(); + for (Socket socket : activeClientSockets) { + try { + socket.close(); + } catch (IOException e) { + logger.log(Level.WARNING, "Error closing socket.", e); + } + } + + try { + serverSocket.close(); + } catch (IOException e) { + logger.log(Level.WARNING, "Error closing socket.", e); + } + } public void run() { logger.info("Running server on port " + serverSocket.getLocalPort()); @@ -122,26 +153,6 @@ public class SimpleProtobufServer extends Thread { e); } } + logger.info("Server exits."); } - -// public static void main(String[] args) { -// SimpleProtobufServer server = SimpleProtobufServer.create(10000); -// Test.TestService testService = new Test.TestService() { -// @Override public void run(RpcController controller, -// Test.TestRequest request, -// RpcCallback done) { -// System.out.println("Hello from TestService!"); -// done.run(Test.TestResponse.newBuilder() -// .setId("Hello from server.") -// .build()); -// } -// }; -// server.registerService(testService); -// server.start(); -// try { -// server.join(); -// } catch (InterruptedException e) { -// System.out.println("Stopped."); -// } -// } } diff --git a/src/test/java/com/orbekk/protobuf/ProtobufFunctionalTest.java b/src/test/java/com/orbekk/protobuf/ProtobufFunctionalTest.java index d60a016..1605b28 100644 --- a/src/test/java/com/orbekk/protobuf/ProtobufFunctionalTest.java +++ b/src/test/java/com/orbekk/protobuf/ProtobufFunctionalTest.java @@ -20,6 +20,7 @@ public class ProtobufFunctionalTest { Test.Service service = Test.Service.newStub(channel); @Before public void setUp() { + server.start(); server.registerService(directService); } @@ -37,6 +38,7 @@ public class ProtobufFunctionalTest { public void testB(RpcController controller, Type1 request, RpcCallback done) { controller.setFailed("error"); + done.run(null); } @Override @@ -54,15 +56,50 @@ public class ProtobufFunctionalTest { } } - @org.junit.Test public void respondsNormally() { + @org.junit.Test public void respondsNormally() throws Exception { Test.Type1 request = Test.Type1.newBuilder().build(); int count = 10; final CountDownLatch stop = new CountDownLatch(count); - service.testA(null, request, new RpcCallback() { + for (int i = 0; i < count; i++) { + final Rpc rpc = new Rpc(); + service.testA(rpc, request, new RpcCallback() { + @Override public void run(Type2 result) { + assertThat(result.getMessage(), is("TestA")); + assertThat(rpc.isOk(), is(true)); + stop.countDown(); + } + }); + } + stop.await(); + } + + @org.junit.Test public void testError() throws Exception { + Test.Type1 request = Test.Type1.newBuilder().build(); + final CountDownLatch stop = new CountDownLatch(1); + final Rpc rpc = new Rpc(); + service.testB(rpc, request, new RpcCallback() { + @Override public void run(Type2 result) { + assertThat(rpc.isOk(), is(false)); + assertThat(rpc.failed(), is(true)); + assertThat(rpc.errorText(), is("error")); + stop.countDown(); + } + }); + stop.await(); + } + + @org.junit.Test public void failsWhenServerDies() throws Exception { + Test.Type1 request = Test.Type1.newBuilder().build(); + final CountDownLatch stop = new CountDownLatch(1); + final Rpc rpc = new Rpc(); + service.testC(rpc, request, new RpcCallback() { @Override public void run(Type2 result) { - assertThat(result.getMessage(), is("TestA")); + assertThat(rpc.failed(), is(true)); + assertThat(rpc.errorText(), is("connection closed")); stop.countDown(); } }); + server.interrupt(); + stop.await(); } } -- cgit v1.2.3