From cfdde6b86b243cf412c1bb90e4e39de882d1c2e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kjetil=20=C3=98rbekk?= Date: Thu, 5 Apr 2012 16:36:03 +0200 Subject: Better server design. Proper handling of asynchronous requests on the server. --- pom.xml | 2 +- src/main/java/com/orbekk/example/Example.java | 302 +++---- .../com/orbekk/protobuf/ConnectionHandler.java | 94 +++ src/main/java/com/orbekk/protobuf/Data.java | 877 ++++++--------------- src/main/java/com/orbekk/protobuf/Data.proto | 1 + .../com/orbekk/protobuf/RequestDispatcher.java | 107 +++ .../java/com/orbekk/protobuf/RequestHandler.java | 32 - src/main/java/com/orbekk/protobuf/RpcChannel.java | 3 + .../java/com/orbekk/protobuf/ServiceHolder.java | 29 + .../com/orbekk/protobuf/SimpleProtobufServer.java | 150 ++-- .../orbekk/protobuf/ProtobufFunctionalTest.java | 2 +- src/test/java/com/orbekk/protobuf/Test.java | 532 ++++--------- 12 files changed, 782 insertions(+), 1349 deletions(-) create mode 100644 src/main/java/com/orbekk/protobuf/ConnectionHandler.java create mode 100644 src/main/java/com/orbekk/protobuf/RequestDispatcher.java delete mode 100644 src/main/java/com/orbekk/protobuf/RequestHandler.java create mode 100644 src/main/java/com/orbekk/protobuf/ServiceHolder.java diff --git a/pom.xml b/pom.xml index 3319230..e5cee74 100644 --- a/pom.xml +++ b/pom.xml @@ -18,7 +18,7 @@ com.google.protobuf protobuf-java - 2.4.1 + 2.3.0 junit diff --git a/src/main/java/com/orbekk/example/Example.java b/src/main/java/com/orbekk/example/Example.java index 9aa5f2b..511cf35 100644 --- a/src/main/java/com/orbekk/example/Example.java +++ b/src/main/java/com/orbekk/example/Example.java @@ -8,15 +8,11 @@ public final class Example { public static void registerAllExtensions( com.google.protobuf.ExtensionRegistry registry) { } - public interface EmptyOrBuilder - extends com.google.protobuf.MessageOrBuilder { - } public static final class Empty extends - com.google.protobuf.GeneratedMessage - implements EmptyOrBuilder { + com.google.protobuf.GeneratedMessage { // Use Empty.newBuilder() to construct. - private Empty(Builder builder) { - super(builder); + private Empty() { + initFields(); } private Empty(boolean noInit) {} @@ -41,12 +37,7 @@ public final class Example { private void initFields() { } - private byte memoizedIsInitialized = -1; public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - memoizedIsInitialized = 1; return true; } @@ -67,13 +58,6 @@ public final class Example { 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.example.Example.Empty parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { @@ -148,49 +132,34 @@ public final class Example { } 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.example.Example.EmptyOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.orbekk.example.Example.internal_static_com_orbekk_example_Empty_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.orbekk.example.Example.internal_static_com_orbekk_example_Empty_fieldAccessorTable; - } + com.google.protobuf.GeneratedMessage.Builder { + private com.orbekk.example.Example.Empty result; // Construct using com.orbekk.example.Example.Empty.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } + private Builder() {} - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - } - } private static Builder create() { - return new Builder(); + Builder builder = new Builder(); + builder.result = new com.orbekk.example.Example.Empty(); + return builder; + } + + protected com.orbekk.example.Example.Empty internalGetResult() { + return result; } public Builder clear() { - super.clear(); + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new com.orbekk.example.Example.Empty(); return this; } public Builder clone() { - return create().mergeFrom(buildPartial()); + return create().mergeFrom(result); } public com.google.protobuf.Descriptors.Descriptor @@ -202,28 +171,33 @@ public final class Example { return com.orbekk.example.Example.Empty.getDefaultInstance(); } + public boolean isInitialized() { + return result.isInitialized(); + } public com.orbekk.example.Example.Empty build() { - com.orbekk.example.Example.Empty result = buildPartial(); - if (!result.isInitialized()) { + if (result != null && !isInitialized()) { throw newUninitializedMessageException(result); } - return result; + return buildPartial(); } private com.orbekk.example.Example.Empty buildParsed() throws com.google.protobuf.InvalidProtocolBufferException { - com.orbekk.example.Example.Empty result = buildPartial(); - if (!result.isInitialized()) { + if (!isInitialized()) { throw newUninitializedMessageException( result).asInvalidProtocolBufferException(); } - return result; + return buildPartial(); } public com.orbekk.example.Example.Empty buildPartial() { - com.orbekk.example.Example.Empty result = new com.orbekk.example.Example.Empty(this); - onBuilt(); - return result; + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + com.orbekk.example.Example.Empty returnMe = result; + result = null; + return returnMe; } public Builder mergeFrom(com.google.protobuf.Message other) { @@ -241,10 +215,6 @@ public final class Example { return this; } - public final boolean isInitialized() { - return true; - } - public Builder mergeFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) @@ -257,13 +227,11 @@ public final class Example { 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; @@ -278,25 +246,18 @@ public final class Example { static { defaultInstance = new Empty(true); + com.orbekk.example.Example.internalForceInit(); defaultInstance.initFields(); } // @@protoc_insertion_point(class_scope:com.orbekk.example.Empty) } - public interface FortuneReplyOrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // required string fortune = 1; - boolean hasFortune(); - String getFortune(); - } public static final class FortuneReply extends - com.google.protobuf.GeneratedMessage - implements FortuneReplyOrBuilder { + com.google.protobuf.GeneratedMessage { // Use FortuneReply.newBuilder() to construct. - private FortuneReply(Builder builder) { - super(builder); + private FortuneReply() { + initFields(); } private FortuneReply(boolean noInit) {} @@ -319,60 +280,25 @@ public final class Example { return com.orbekk.example.Example.internal_static_com_orbekk_example_FortuneReply_fieldAccessorTable; } - private int bitField0_; // required string fortune = 1; public static final int FORTUNE_FIELD_NUMBER = 1; - private java.lang.Object fortune_; - public boolean hasFortune() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public String getFortune() { - java.lang.Object ref = fortune_; - 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)) { - fortune_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getFortuneBytes() { - java.lang.Object ref = fortune_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - fortune_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } + private boolean hasFortune; + private java.lang.String fortune_ = ""; + public boolean hasFortune() { return hasFortune; } + public java.lang.String getFortune() { return fortune_; } private void initFields() { - fortune_ = ""; } - private byte memoizedIsInitialized = -1; public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized != -1) return isInitialized == 1; - - if (!hasFortune()) { - memoizedIsInitialized = 0; - return false; - } - memoizedIsInitialized = 1; + if (!hasFortune) return false; return true; } public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeBytes(1, getFortuneBytes()); + if (hasFortune()) { + output.writeString(1, getFortune()); } getUnknownFields().writeTo(output); } @@ -383,22 +309,15 @@ public final class Example { if (size != -1) return size; size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { + if (hasFortune()) { size += com.google.protobuf.CodedOutputStream - .computeBytesSize(1, getFortuneBytes()); + .computeStringSize(1, getFortune()); } 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.example.Example.FortuneReply parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { @@ -473,51 +392,34 @@ public final class Example { } 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.example.Example.FortuneReplyOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.orbekk.example.Example.internal_static_com_orbekk_example_FortuneReply_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.orbekk.example.Example.internal_static_com_orbekk_example_FortuneReply_fieldAccessorTable; - } + com.google.protobuf.GeneratedMessage.Builder { + private com.orbekk.example.Example.FortuneReply result; // Construct using com.orbekk.example.Example.FortuneReply.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } + private Builder() {} - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - } - } private static Builder create() { - return new Builder(); + Builder builder = new Builder(); + builder.result = new com.orbekk.example.Example.FortuneReply(); + return builder; + } + + protected com.orbekk.example.Example.FortuneReply internalGetResult() { + return result; } public Builder clear() { - super.clear(); - fortune_ = ""; - bitField0_ = (bitField0_ & ~0x00000001); + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new com.orbekk.example.Example.FortuneReply(); return this; } public Builder clone() { - return create().mergeFrom(buildPartial()); + return create().mergeFrom(result); } public com.google.protobuf.Descriptors.Descriptor @@ -529,35 +431,33 @@ public final class Example { return com.orbekk.example.Example.FortuneReply.getDefaultInstance(); } + public boolean isInitialized() { + return result.isInitialized(); + } public com.orbekk.example.Example.FortuneReply build() { - com.orbekk.example.Example.FortuneReply result = buildPartial(); - if (!result.isInitialized()) { + if (result != null && !isInitialized()) { throw newUninitializedMessageException(result); } - return result; + return buildPartial(); } private com.orbekk.example.Example.FortuneReply buildParsed() throws com.google.protobuf.InvalidProtocolBufferException { - com.orbekk.example.Example.FortuneReply result = buildPartial(); - if (!result.isInitialized()) { + if (!isInitialized()) { throw newUninitializedMessageException( result).asInvalidProtocolBufferException(); } - return result; + return buildPartial(); } public com.orbekk.example.Example.FortuneReply buildPartial() { - com.orbekk.example.Example.FortuneReply result = new com.orbekk.example.Example.FortuneReply(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); } - result.fortune_ = fortune_; - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; + com.orbekk.example.Example.FortuneReply returnMe = result; + result = null; + return returnMe; } public Builder mergeFrom(com.google.protobuf.Message other) { @@ -578,14 +478,6 @@ public final class Example { return this; } - public final boolean isInitialized() { - if (!hasFortune()) { - - return false; - } - return true; - } - public Builder mergeFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) @@ -598,69 +490,51 @@ public final class Example { 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; - fortune_ = input.readBytes(); + setFortune(input.readString()); break; } } } } - private int bitField0_; // required string fortune = 1; - private java.lang.Object fortune_ = ""; public boolean hasFortune() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public String getFortune() { - java.lang.Object ref = fortune_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - fortune_ = s; - return s; - } else { - return (String) ref; - } + return result.hasFortune(); } - public Builder setFortune(String value) { + public java.lang.String getFortune() { + return result.getFortune(); + } + public Builder setFortune(java.lang.String value) { if (value == null) { throw new NullPointerException(); } - bitField0_ |= 0x00000001; - fortune_ = value; - onChanged(); + result.hasFortune = true; + result.fortune_ = value; return this; } public Builder clearFortune() { - bitField0_ = (bitField0_ & ~0x00000001); - fortune_ = getDefaultInstance().getFortune(); - onChanged(); + result.hasFortune = false; + result.fortune_ = getDefaultInstance().getFortune(); return this; } - void setFortune(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000001; - fortune_ = value; - onChanged(); - } // @@protoc_insertion_point(builder_scope:com.orbekk.example.FortuneReply) } static { defaultInstance = new FortuneReply(true); + com.orbekk.example.Example.internalForceInit(); defaultInstance.initFields(); } @@ -682,7 +556,7 @@ public final class Example { public static com.google.protobuf.Service newReflectiveService( final Interface impl) { return new FortuneService() { - @java.lang.Override + @Override public void getFortune( com.google.protobuf.RpcController controller, com.orbekk.example.Example.Empty request, @@ -944,5 +818,7 @@ public final class Example { }, assigner); } + public static void internalForceInit() {} + // @@protoc_insertion_point(outer_class_scope) } diff --git a/src/main/java/com/orbekk/protobuf/ConnectionHandler.java b/src/main/java/com/orbekk/protobuf/ConnectionHandler.java new file mode 100644 index 0000000..1c93a05 --- /dev/null +++ b/src/main/java/com/orbekk/protobuf/ConnectionHandler.java @@ -0,0 +1,94 @@ +package com.orbekk.protobuf; + +import java.io.IOException; +import java.net.Socket; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.ExecutorService; + +public class ConnectionHandler { + private final Socket connection; + private final BlockingQueue dispatcherOutput; + private final RequestDispatcher dispatcher; + + private class IncomingHandler implements Runnable { + @Override public void run() { + dispatcher.start(); + while (!connection.isClosed()) { + try { + Data.Request r = Data.Request.parseDelimitedFrom( + connection.getInputStream()); + if (r == null) { + tryCloseConnection(); + } else { + try { + dispatcher.handleRequest(r); + } catch (InterruptedException e) { + tryCloseConnection(); + return; + } + } + } catch (IOException e) { + tryCloseConnection(); + } + } + dispatcher.interrupt(); + } + } + + private class OutgoingHandler implements Runnable { + @Override public void run() { + while (!connection.isClosed()) { + try { + Data.Response response = dispatcherOutput.take(); + try { + response.writeDelimitedTo(connection.getOutputStream()); + } catch (IOException e) { + tryCloseConnection(); + } + } catch (InterruptedException e) { + tryCloseConnection(); + } + } + dispatcher.interrupt(); + } + } + + public static ConnectionHandler create(Socket connection, + ExecutorService requestPool, ServiceHolder services) { + BlockingQueue dispatcherOutput = + new ArrayBlockingQueue(RequestDispatcher.DEFAULT_QUEUE_SIZE); + RequestDispatcher dispatcher = new RequestDispatcher( + requestPool, dispatcherOutput, services); + return new ConnectionHandler(connection, dispatcherOutput, + dispatcher); + } + + ConnectionHandler(Socket connection, + BlockingQueue dispatcherOutput, + RequestDispatcher dispatcher) { + this.connection = connection; + this.dispatcherOutput = dispatcherOutput; + this.dispatcher = dispatcher; + } + + public void closeConnection() { + tryCloseConnection(); + } + + private void tryCloseConnection() { + try { + connection.close(); + } catch (IOException e) { + // Assume connection is closed. + } + } + + public Runnable createIncomingHandler() { + return new IncomingHandler(); + } + + public Runnable createOutgoingHandler() { + return new OutgoingHandler(); + } +} diff --git a/src/main/java/com/orbekk/protobuf/Data.java b/src/main/java/com/orbekk/protobuf/Data.java index e0f364a..c958236 100644 --- a/src/main/java/com/orbekk/protobuf/Data.java +++ b/src/main/java/com/orbekk/protobuf/Data.java @@ -8,31 +8,11 @@ public final class 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 { + com.google.protobuf.GeneratedMessage { // Use Request.newBuilder() to construct. - private Request(Builder builder) { - super(builder); + private Request() { + initFields(); } private Request(boolean noInit) {} @@ -55,120 +35,54 @@ public final class Data { 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; - } - } + private boolean hasFullServiceName; + private java.lang.String fullServiceName_ = ""; + public boolean hasFullServiceName() { return hasFullServiceName; } + public java.lang.String getFullServiceName() { return fullServiceName_; } // 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; - } - } + private boolean hasMethodName; + private java.lang.String methodName_ = ""; + public boolean hasMethodName() { return hasMethodName; } + public java.lang.String getMethodName() { return methodName_; } // 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_; - } + private boolean hasRequestProto; + private com.google.protobuf.ByteString requestProto_ = com.google.protobuf.ByteString.EMPTY; + public boolean hasRequestProto() { return hasRequestProto; } + 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 boolean hasRequestId; + private long requestId_ = 0L; + public boolean hasRequestId() { return hasRequestId; } + 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 (hasFullServiceName()) { + output.writeString(1, getFullServiceName()); } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeBytes(2, getMethodNameBytes()); + if (hasMethodName()) { + output.writeString(2, getMethodName()); } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - output.writeBytes(3, requestProto_); + if (hasRequestProto()) { + output.writeBytes(3, getRequestProto()); } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - output.writeInt64(4, requestId_); + if (hasRequestId()) { + output.writeInt64(4, getRequestId()); } getUnknownFields().writeTo(output); } @@ -179,34 +93,27 @@ public final class Data { if (size != -1) return size; size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { + if (hasFullServiceName()) { size += com.google.protobuf.CodedOutputStream - .computeBytesSize(1, getFullServiceNameBytes()); + .computeStringSize(1, getFullServiceName()); } - if (((bitField0_ & 0x00000002) == 0x00000002)) { + if (hasMethodName()) { size += com.google.protobuf.CodedOutputStream - .computeBytesSize(2, getMethodNameBytes()); + .computeStringSize(2, getMethodName()); } - if (((bitField0_ & 0x00000004) == 0x00000004)) { + if (hasRequestProto()) { size += com.google.protobuf.CodedOutputStream - .computeBytesSize(3, requestProto_); + .computeBytesSize(3, getRequestProto()); } - if (((bitField0_ & 0x00000008) == 0x00000008)) { + if (hasRequestId()) { size += com.google.protobuf.CodedOutputStream - .computeInt64Size(4, requestId_); + .computeInt64Size(4, getRequestId()); } 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 { @@ -281,57 +188,34 @@ public final class Data { } 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; - } + com.google.protobuf.GeneratedMessage.Builder { + private com.orbekk.protobuf.Data.Request result; // Construct using com.orbekk.protobuf.Data.Request.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } + private Builder() {} - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - } - } private static Builder create() { - return new Builder(); + Builder builder = new Builder(); + builder.result = new com.orbekk.protobuf.Data.Request(); + return builder; + } + + protected com.orbekk.protobuf.Data.Request internalGetResult() { + return result; } 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); + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new com.orbekk.protobuf.Data.Request(); return this; } public Builder clone() { - return create().mergeFrom(buildPartial()); + return create().mergeFrom(result); } public com.google.protobuf.Descriptors.Descriptor @@ -343,47 +227,33 @@ public final class Data { return com.orbekk.protobuf.Data.Request.getDefaultInstance(); } + public boolean isInitialized() { + return result.isInitialized(); + } public com.orbekk.protobuf.Data.Request build() { - com.orbekk.protobuf.Data.Request result = buildPartial(); - if (!result.isInitialized()) { + if (result != null && !isInitialized()) { throw newUninitializedMessageException(result); } - return result; + return buildPartial(); } private com.orbekk.protobuf.Data.Request buildParsed() throws com.google.protobuf.InvalidProtocolBufferException { - com.orbekk.protobuf.Data.Request result = buildPartial(); - if (!result.isInitialized()) { + if (!isInitialized()) { throw newUninitializedMessageException( result).asInvalidProtocolBufferException(); } - return result; + return buildPartial(); } 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; + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); } - 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; + com.orbekk.protobuf.Data.Request returnMe = result; + result = null; + return returnMe; } public Builder mergeFrom(com.google.protobuf.Message other) { @@ -413,10 +283,6 @@ public final class Data { return this; } - public final boolean isInitialized() { - return true; - } - public Builder mergeFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) @@ -429,157 +295,114 @@ public final class Data { 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(); + setFullServiceName(input.readString()); break; } case 18: { - bitField0_ |= 0x00000002; - methodName_ = input.readBytes(); + setMethodName(input.readString()); break; } case 26: { - bitField0_ |= 0x00000004; - requestProto_ = input.readBytes(); + setRequestProto(input.readBytes()); break; } case 32: { - bitField0_ |= 0x00000008; - requestId_ = input.readInt64(); + setRequestId(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; - } + return result.hasFullServiceName(); + } + public java.lang.String getFullServiceName() { + return result.getFullServiceName(); } - public Builder setFullServiceName(String value) { + public Builder setFullServiceName(java.lang.String value) { if (value == null) { throw new NullPointerException(); } - bitField0_ |= 0x00000001; - fullServiceName_ = value; - onChanged(); + result.hasFullServiceName = true; + result.fullServiceName_ = value; return this; } public Builder clearFullServiceName() { - bitField0_ = (bitField0_ & ~0x00000001); - fullServiceName_ = getDefaultInstance().getFullServiceName(); - onChanged(); + result.hasFullServiceName = false; + result.fullServiceName_ = getDefaultInstance().getFullServiceName(); 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; - } + return result.hasMethodName(); + } + public java.lang.String getMethodName() { + return result.getMethodName(); } - public Builder setMethodName(String value) { + public Builder setMethodName(java.lang.String value) { if (value == null) { throw new NullPointerException(); } - bitField0_ |= 0x00000002; - methodName_ = value; - onChanged(); + result.hasMethodName = true; + result.methodName_ = value; return this; } public Builder clearMethodName() { - bitField0_ = (bitField0_ & ~0x00000002); - methodName_ = getDefaultInstance().getMethodName(); - onChanged(); + result.hasMethodName = false; + result.methodName_ = getDefaultInstance().getMethodName(); 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); + return result.hasRequestProto(); } public com.google.protobuf.ByteString getRequestProto() { - return requestProto_; + return result.getRequestProto(); } public Builder setRequestProto(com.google.protobuf.ByteString value) { if (value == null) { throw new NullPointerException(); } - bitField0_ |= 0x00000004; - requestProto_ = value; - onChanged(); + result.hasRequestProto = true; + result.requestProto_ = value; return this; } public Builder clearRequestProto() { - bitField0_ = (bitField0_ & ~0x00000004); - requestProto_ = getDefaultInstance().getRequestProto(); - onChanged(); + result.hasRequestProto = false; + result.requestProto_ = getDefaultInstance().getRequestProto(); return this; } // optional int64 request_id = 4; - private long requestId_ ; public boolean hasRequestId() { - return ((bitField0_ & 0x00000008) == 0x00000008); + return result.hasRequestId(); } public long getRequestId() { - return requestId_; + return result.getRequestId(); } public Builder setRequestId(long value) { - bitField0_ |= 0x00000008; - requestId_ = value; - onChanged(); + result.hasRequestId = true; + result.requestId_ = value; return this; } public Builder clearRequestId() { - bitField0_ = (bitField0_ & ~0x00000008); - requestId_ = 0L; - onChanged(); + result.hasRequestId = false; + result.requestId_ = 0L; return this; } @@ -588,49 +411,18 @@ public final class Data { static { defaultInstance = new Request(true); + com.orbekk.protobuf.Data.internalForceInit(); 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 { + com.google.protobuf.GeneratedMessage { // Use Response.newBuilder() to construct. - private Response(Builder builder) { - super(builder); + private Response() { + initFields(); } private Response(boolean noInit) {} @@ -658,12 +450,9 @@ public final class Data { UNKNOWN_SERVICE(0, 0), UNKNOWN_METHOD(1, 1), CANCELED(2, 2), + INVALID_PROTOBUF(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 final int getNumber() { return value; } @@ -672,6 +461,7 @@ public final class Data { case 0: return UNKNOWN_SERVICE; case 1: return UNKNOWN_METHOD; case 2: return CANCELED; + case 3: return INVALID_PROTOBUF; default: return null; } } @@ -684,8 +474,8 @@ public final class Data { internalValueMap = new com.google.protobuf.Internal.EnumLiteMap() { public RpcError findValueByNumber(int number) { - return RpcError.valueOf(number); - } + return RpcError.valueOf(number) + ; } }; public final com.google.protobuf.Descriptors.EnumValueDescriptor @@ -702,9 +492,8 @@ public final class Data { } private static final RpcError[] VALUES = { - UNKNOWN_SERVICE, UNKNOWN_METHOD, CANCELED, + UNKNOWN_SERVICE, UNKNOWN_METHOD, CANCELED, INVALID_PROTOBUF, }; - public static RpcError valueOf( com.google.protobuf.Descriptors.EnumValueDescriptor desc) { if (desc.getType() != getDescriptor()) { @@ -713,152 +502,99 @@ public final class Data { } return VALUES[desc.getIndex()]; } - private final int index; private final int value; - private RpcError(int index, int value) { this.index = index; this.value = value; } + static { + com.orbekk.protobuf.Data.getDescriptor(); + } + // @@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_; - } + private boolean hasResponseProto; + private com.google.protobuf.ByteString responseProto_ = com.google.protobuf.ByteString.EMPTY; + public boolean hasResponseProto() { return hasResponseProto; } + 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 boolean hasError; 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_; - } + public boolean hasError() { return hasError; } + 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_; - } + private boolean hasRequestId; + private long requestId_ = 0L; + public boolean hasRequestId() { return hasRequestId; } + 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_; - } + private boolean hasHasFailed; + private boolean hasFailed_ = false; + public boolean hasHasFailed() { return hasHasFailed; } + 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_; - } + private boolean hasCanceled; + private boolean canceled_ = false; + public boolean hasCanceled() { return hasCanceled; } + 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_; - } + private boolean hasDone; + private boolean done_ = true; + public boolean hasDone() { return hasDone; } + 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 boolean hasErrorText; + private java.lang.String errorText_ = ""; + public boolean hasErrorText() { return hasErrorText; } + public java.lang.String getErrorText() { return errorText_; } 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 (hasResponseProto()) { + output.writeBytes(1, getResponseProto()); } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeEnum(2, error_.getNumber()); + if (hasError()) { + output.writeEnum(2, getError().getNumber()); } - if (((bitField0_ & 0x00000040) == 0x00000040)) { - output.writeBytes(3, getErrorTextBytes()); + if (hasErrorText()) { + output.writeString(3, getErrorText()); } - if (((bitField0_ & 0x00000008) == 0x00000008)) { - output.writeBool(4, hasFailed_); + if (hasHasFailed()) { + output.writeBool(4, getHasFailed()); } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - output.writeInt64(5, requestId_); + if (hasRequestId()) { + output.writeInt64(5, getRequestId()); } - if (((bitField0_ & 0x00000010) == 0x00000010)) { - output.writeBool(6, canceled_); + if (hasCanceled()) { + output.writeBool(6, getCanceled()); } - if (((bitField0_ & 0x00000020) == 0x00000020)) { - output.writeBool(7, done_); + if (hasDone()) { + output.writeBool(7, getDone()); } getUnknownFields().writeTo(output); } @@ -869,46 +605,39 @@ public final class Data { if (size != -1) return size; size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { + if (hasResponseProto()) { size += com.google.protobuf.CodedOutputStream - .computeBytesSize(1, responseProto_); + .computeBytesSize(1, getResponseProto()); } - if (((bitField0_ & 0x00000002) == 0x00000002)) { + if (hasError()) { size += com.google.protobuf.CodedOutputStream - .computeEnumSize(2, error_.getNumber()); + .computeEnumSize(2, getError().getNumber()); } - if (((bitField0_ & 0x00000040) == 0x00000040)) { + if (hasErrorText()) { size += com.google.protobuf.CodedOutputStream - .computeBytesSize(3, getErrorTextBytes()); + .computeStringSize(3, getErrorText()); } - if (((bitField0_ & 0x00000008) == 0x00000008)) { + if (hasHasFailed()) { size += com.google.protobuf.CodedOutputStream - .computeBoolSize(4, hasFailed_); + .computeBoolSize(4, getHasFailed()); } - if (((bitField0_ & 0x00000004) == 0x00000004)) { + if (hasRequestId()) { size += com.google.protobuf.CodedOutputStream - .computeInt64Size(5, requestId_); + .computeInt64Size(5, getRequestId()); } - if (((bitField0_ & 0x00000010) == 0x00000010)) { + if (hasCanceled()) { size += com.google.protobuf.CodedOutputStream - .computeBoolSize(6, canceled_); + .computeBoolSize(6, getCanceled()); } - if (((bitField0_ & 0x00000020) == 0x00000020)) { + if (hasDone()) { size += com.google.protobuf.CodedOutputStream - .computeBoolSize(7, done_); + .computeBoolSize(7, getDone()); } 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 { @@ -983,63 +712,34 @@ public final class Data { } 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; - } + com.google.protobuf.GeneratedMessage.Builder { + private com.orbekk.protobuf.Data.Response result; // Construct using com.orbekk.protobuf.Data.Response.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } + private Builder() {} - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - } - } private static Builder create() { - return new Builder(); + Builder builder = new Builder(); + builder.result = new com.orbekk.protobuf.Data.Response(); + return builder; + } + + protected com.orbekk.protobuf.Data.Response internalGetResult() { + return result; } 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); + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new com.orbekk.protobuf.Data.Response(); return this; } public Builder clone() { - return create().mergeFrom(buildPartial()); + return create().mergeFrom(result); } public com.google.protobuf.Descriptors.Descriptor @@ -1051,59 +751,33 @@ public final class Data { return com.orbekk.protobuf.Data.Response.getDefaultInstance(); } + public boolean isInitialized() { + return result.isInitialized(); + } public com.orbekk.protobuf.Data.Response build() { - com.orbekk.protobuf.Data.Response result = buildPartial(); - if (!result.isInitialized()) { + if (result != null && !isInitialized()) { throw newUninitializedMessageException(result); } - return result; + return buildPartial(); } private com.orbekk.protobuf.Data.Response buildParsed() throws com.google.protobuf.InvalidProtocolBufferException { - com.orbekk.protobuf.Data.Response result = buildPartial(); - if (!result.isInitialized()) { + if (!isInitialized()) { throw newUninitializedMessageException( result).asInvalidProtocolBufferException(); } - return result; + return buildPartial(); } 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; + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); } - result.errorText_ = errorText_; - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; + com.orbekk.protobuf.Data.Response returnMe = result; + result = null; + return returnMe; } public Builder mergeFrom(com.google.protobuf.Message other) { @@ -1142,10 +816,6 @@ public final class Data { return this; } - public final boolean isInitialized() { - return true; - } - public Builder mergeFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) @@ -1158,20 +828,17 @@ public final class Data { 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(); + setResponseProto(input.readBytes()); break; } case 16: { @@ -1180,215 +847,176 @@ public final class Data { if (value == null) { unknownFields.mergeVarintField(2, rawValue); } else { - bitField0_ |= 0x00000002; - error_ = value; + setError(value); } break; } case 26: { - bitField0_ |= 0x00000040; - errorText_ = input.readBytes(); + setErrorText(input.readString()); break; } case 32: { - bitField0_ |= 0x00000008; - hasFailed_ = input.readBool(); + setHasFailed(input.readBool()); break; } case 40: { - bitField0_ |= 0x00000004; - requestId_ = input.readInt64(); + setRequestId(input.readInt64()); break; } case 48: { - bitField0_ |= 0x00000010; - canceled_ = input.readBool(); + setCanceled(input.readBool()); break; } case 56: { - bitField0_ |= 0x00000020; - done_ = input.readBool(); + setDone(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); + return result.hasResponseProto(); } public com.google.protobuf.ByteString getResponseProto() { - return responseProto_; + return result.getResponseProto(); } public Builder setResponseProto(com.google.protobuf.ByteString value) { if (value == null) { throw new NullPointerException(); } - bitField0_ |= 0x00000001; - responseProto_ = value; - onChanged(); + result.hasResponseProto = true; + result.responseProto_ = value; return this; } public Builder clearResponseProto() { - bitField0_ = (bitField0_ & ~0x00000001); - responseProto_ = getDefaultInstance().getResponseProto(); - onChanged(); + result.hasResponseProto = false; + result.responseProto_ = getDefaultInstance().getResponseProto(); 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); + return result.hasError(); } public com.orbekk.protobuf.Data.Response.RpcError getError() { - return error_; + return result.getError(); } public Builder setError(com.orbekk.protobuf.Data.Response.RpcError value) { if (value == null) { throw new NullPointerException(); } - bitField0_ |= 0x00000002; - error_ = value; - onChanged(); + result.hasError = true; + result.error_ = value; return this; } public Builder clearError() { - bitField0_ = (bitField0_ & ~0x00000002); - error_ = com.orbekk.protobuf.Data.Response.RpcError.UNKNOWN_SERVICE; - onChanged(); + result.hasError = false; + result.error_ = com.orbekk.protobuf.Data.Response.RpcError.UNKNOWN_SERVICE; return this; } // optional int64 request_id = 5; - private long requestId_ ; public boolean hasRequestId() { - return ((bitField0_ & 0x00000004) == 0x00000004); + return result.hasRequestId(); } public long getRequestId() { - return requestId_; + return result.getRequestId(); } public Builder setRequestId(long value) { - bitField0_ |= 0x00000004; - requestId_ = value; - onChanged(); + result.hasRequestId = true; + result.requestId_ = value; return this; } public Builder clearRequestId() { - bitField0_ = (bitField0_ & ~0x00000004); - requestId_ = 0L; - onChanged(); + result.hasRequestId = false; + result.requestId_ = 0L; return this; } // optional bool hasFailed = 4; - private boolean hasFailed_ ; public boolean hasHasFailed() { - return ((bitField0_ & 0x00000008) == 0x00000008); + return result.hasHasFailed(); } public boolean getHasFailed() { - return hasFailed_; + return result.getHasFailed(); } public Builder setHasFailed(boolean value) { - bitField0_ |= 0x00000008; - hasFailed_ = value; - onChanged(); + result.hasHasFailed = true; + result.hasFailed_ = value; return this; } public Builder clearHasFailed() { - bitField0_ = (bitField0_ & ~0x00000008); - hasFailed_ = false; - onChanged(); + result.hasHasFailed = false; + result.hasFailed_ = false; return this; } // optional bool canceled = 6; - private boolean canceled_ ; public boolean hasCanceled() { - return ((bitField0_ & 0x00000010) == 0x00000010); + return result.hasCanceled(); } public boolean getCanceled() { - return canceled_; + return result.getCanceled(); } public Builder setCanceled(boolean value) { - bitField0_ |= 0x00000010; - canceled_ = value; - onChanged(); + result.hasCanceled = true; + result.canceled_ = value; return this; } public Builder clearCanceled() { - bitField0_ = (bitField0_ & ~0x00000010); - canceled_ = false; - onChanged(); + result.hasCanceled = false; + result.canceled_ = false; return this; } // optional bool done = 7 [default = true]; - private boolean done_ = true; public boolean hasDone() { - return ((bitField0_ & 0x00000020) == 0x00000020); + return result.hasDone(); } public boolean getDone() { - return done_; + return result.getDone(); } public Builder setDone(boolean value) { - bitField0_ |= 0x00000020; - done_ = value; - onChanged(); + result.hasDone = true; + result.done_ = value; return this; } public Builder clearDone() { - bitField0_ = (bitField0_ & ~0x00000020); - done_ = true; - onChanged(); + result.hasDone = false; + result.done_ = true; 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; - } + return result.hasErrorText(); + } + public java.lang.String getErrorText() { + return result.getErrorText(); } - public Builder setErrorText(String value) { + public Builder setErrorText(java.lang.String value) { if (value == null) { throw new NullPointerException(); } - bitField0_ |= 0x00000040; - errorText_ = value; - onChanged(); + result.hasErrorText = true; + result.errorText_ = value; return this; } public Builder clearErrorText() { - bitField0_ = (bitField0_ & ~0x00000040); - errorText_ = getDefaultInstance().getErrorText(); - onChanged(); + result.hasErrorText = false; + result.errorText_ = getDefaultInstance().getErrorText(); 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); + com.orbekk.protobuf.Data.internalForceInit(); defaultInstance.initFields(); } @@ -1418,13 +1046,14 @@ public final class 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" + + "_id\030\004 \001(\003\"\223\002\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\004done\030\007 \001(\010:\004true\022\022\n\nerror_text\030\003 \001(\t\"W" + "\n\010RpcError\022\023\n\017UNKNOWN_SERVICE\020\000\022\022\n\016UNKNO", - "WN_METHOD\020\001\022\014\n\010CANCELED\020\002" + "WN_METHOD\020\001\022\014\n\010CANCELED\020\002\022\024\n\020INVALID_PRO" + + "TOBUF\020\003" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { @@ -1456,5 +1085,7 @@ public final class Data { }, assigner); } + public static void internalForceInit() {} + // @@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 index 168ef29..b018de7 100644 --- a/src/main/java/com/orbekk/protobuf/Data.proto +++ b/src/main/java/com/orbekk/protobuf/Data.proto @@ -15,6 +15,7 @@ message Response { UNKNOWN_SERVICE = 0; UNKNOWN_METHOD = 1; CANCELED = 2; + INVALID_PROTOBUF = 3; }; optional RpcError error = 2; optional int64 request_id = 5; diff --git a/src/main/java/com/orbekk/protobuf/RequestDispatcher.java b/src/main/java/com/orbekk/protobuf/RequestDispatcher.java new file mode 100644 index 0000000..65239af --- /dev/null +++ b/src/main/java/com/orbekk/protobuf/RequestDispatcher.java @@ -0,0 +1,107 @@ +package com.orbekk.protobuf; + +import java.io.IOException; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.ExecutorService; + +import com.google.protobuf.Descriptors; +import com.google.protobuf.InvalidProtocolBufferException; +import com.google.protobuf.Message; +import com.google.protobuf.RpcCallback; +import com.google.protobuf.Service; + +public class RequestDispatcher extends Thread { + public static int DEFAULT_QUEUE_SIZE = 50; + private volatile boolean isStopped = false; + private final BlockingQueue output; + private final ServiceHolder services; + + /** A pool that can be shared among all dispatchers. */ + private final ExecutorService pool; + + private static class RequestHandler implements Runnable { + private final Data.Request request; + private final Data.Response.Builder response = + Data.Response.newBuilder(); + private final BlockingQueue output; + private final ServiceHolder services; + private final Rpc rpc = new Rpc(); + + private final RpcCallback callback = + new RpcCallback() { + @Override public void run(Message responseMessage) { + if (responseMessage != null) { + response.setResponseProto(responseMessage.toByteString()); + } + rpc.writeTo(response); + try { + output.put(response.build()); + } catch (InterruptedException e) { + // Terminate callback. + return; + } + } + }; + + public RequestHandler(Data.Request request, + BlockingQueue output, + ServiceHolder services) { + this.request = request; + this.output = output; + this.services = services; + } + + public void internalRun() throws InterruptedException { + Service service = services.get(request.getFullServiceName()); + if (service == null) { + response.setError(Data.Response.RpcError.UNKNOWN_SERVICE); + output.put(response.build()); + return; + } + + Descriptors.MethodDescriptor method = + service.getDescriptorForType() + .findMethodByName(request.getMethodName()); + if (method == null) { + response.setError(Data.Response.RpcError.UNKNOWN_METHOD); + output.put(response.build()); + return; + } + + Message requestMessage = null; + try { + requestMessage = service.getRequestPrototype(method) + .toBuilder().mergeFrom(request.getRequestProto()).build(); + } catch (InvalidProtocolBufferException e) { + response.setError(Data.Response.RpcError.INVALID_PROTOBUF); + output.put(response.build()); + return; + } + + response.setRequestId(request.getRequestId()); + service.callMethod(method, rpc, requestMessage, callback); + } + + @Override public void run() { + try { + internalRun(); + } catch (InterruptedException e) { + // Terminate request. + return; + } + } + } + + public RequestDispatcher(ExecutorService pool, + BlockingQueue output, + ServiceHolder services) { + this.pool = pool; + this.output = output; + this.services = services; + } + + public void handleRequest(Data.Request request) throws InterruptedException { + RequestHandler handler = new RequestHandler(request, output, services); + pool.execute(handler); + } +} diff --git a/src/main/java/com/orbekk/protobuf/RequestHandler.java b/src/main/java/com/orbekk/protobuf/RequestHandler.java deleted file mode 100644 index 0232a2c..0000000 --- a/src/main/java/com/orbekk/protobuf/RequestHandler.java +++ /dev/null @@ -1,32 +0,0 @@ -import java.util.concurrent.BlockingQueue; - -/** - * TODO: Move services to this class. - */ - -public class RequestHandler extends Thread { - private volatile boolean isStopped = false; - private final BlockingQueue input; - private final BlockingQueue output; - - public RequestHandler(BlockingQueue input, - BlockingQueue output) { - this.input = input; - this.output = output; - } - - private void handleRequest() { - - } - - @Override public void run() { - while (!isStopped) { - handleRequest(); - } - } - - @Override public void interrupt() { - super.interrupt(); - isStopped = true; - } -} diff --git a/src/main/java/com/orbekk/protobuf/RpcChannel.java b/src/main/java/com/orbekk/protobuf/RpcChannel.java index 90d4521..a4f1282 100644 --- a/src/main/java/com/orbekk/protobuf/RpcChannel.java +++ b/src/main/java/com/orbekk/protobuf/RpcChannel.java @@ -156,6 +156,9 @@ public class RpcChannel extends Thread implements Data.Response response; response = Data.Response.parseDelimitedFrom( socket.getInputStream()); + if (response == null) { + throw new IOException("No response."); + } finishRequest(response); } } catch (IOException e) { diff --git a/src/main/java/com/orbekk/protobuf/ServiceHolder.java b/src/main/java/com/orbekk/protobuf/ServiceHolder.java new file mode 100644 index 0000000..cab9a5e --- /dev/null +++ b/src/main/java/com/orbekk/protobuf/ServiceHolder.java @@ -0,0 +1,29 @@ +package com.orbekk.protobuf; + +import java.util.concurrent.ConcurrentHashMap; +import java.util.logging.Logger; + +import com.google.protobuf.Service; + +public class ServiceHolder { + private static final Logger logger = Logger.getLogger( + ServiceHolder.class.getName()); + private final ConcurrentHashMap services = + new ConcurrentHashMap(); + + public ServiceHolder() { + } + + public void registerService (Service service) { + String serviceName = service.getDescriptorForType().getFullName(); + Service previousService = services.put(serviceName, service); + if (previousService != null) { + logger.warning("Replaced service " + previousService + " with " + + service); + } + } + + public Service get(String fullServiceName) { + return services.get(fullServiceName); + } +} diff --git a/src/main/java/com/orbekk/protobuf/SimpleProtobufServer.java b/src/main/java/com/orbekk/protobuf/SimpleProtobufServer.java index 4fc9808..14887d8 100644 --- a/src/main/java/com/orbekk/protobuf/SimpleProtobufServer.java +++ b/src/main/java/com/orbekk/protobuf/SimpleProtobufServer.java @@ -16,54 +16,63 @@ package com.orbekk.protobuf; import java.io.IOException; -import java.io.OutputStream; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.Socket; 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 java.util.Set; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.logging.Level; +import java.util.logging.Logger; -import com.google.protobuf.Descriptors; -import com.google.protobuf.Message; -import com.google.protobuf.RpcCallback; import com.google.protobuf.Service; public class SimpleProtobufServer extends Thread { - private volatile boolean isStopped = false; + private static int DEFAULT_NUM_HANDLERS = 20; + private static int DEFAULT_CONCURRENT_REQUESTS = 1; + private final static Logger logger = Logger.getLogger( SimpleProtobufServer.class.getName()); private final ServerSocket serverSocket; - private final Set activeClientSockets = - Collections.synchronizedSet(new HashSet()); - private final Map registeredServices = - Collections.synchronizedMap(new HashMap()); - private final ExecutorService pool; - - public static SimpleProtobufServer create(int port, int maxNumHandlers) { + private final ExecutorService incomingHandlerPool; + private final ExecutorService outgoingHandlerPool = + Executors.newCachedThreadPool(); + private final ExecutorService requestHandlerPool; + private final ServiceHolder services = new ServiceHolder(); + private final Set activeConnections = + Collections.synchronizedSet(new HashSet()); + + public static SimpleProtobufServer create(int port) { + return create(port, DEFAULT_NUM_HANDLERS, DEFAULT_CONCURRENT_REQUESTS); + } + + public static SimpleProtobufServer create(int port, int maxNumHandlers, + int maxConcurrentRequests) { try { InetSocketAddress address = new InetSocketAddress(port); ServerSocket serverSocket = new ServerSocket(); serverSocket.setReuseAddress(true); serverSocket.bind(address); - ExecutorService pool = + ExecutorService incomingHandlerPool = Executors.newFixedThreadPool(maxNumHandlers); - return new SimpleProtobufServer(serverSocket, pool); + ExecutorService requestHandlerPool = + Executors.newFixedThreadPool(maxConcurrentRequests); + return new SimpleProtobufServer(serverSocket, incomingHandlerPool, + requestHandlerPool); } catch (IOException e) { logger.log(Level.WARNING, "Could not create server. ", e); return null; } } - public SimpleProtobufServer(ServerSocket serverSocket, ExecutorService pool) { + public SimpleProtobufServer(ServerSocket serverSocket, + ExecutorService incomingHandlerPool, + ExecutorService requestHandlerPool) { this.serverSocket = serverSocket; - this.pool = pool; + this.incomingHandlerPool = incomingHandlerPool; + this.requestHandlerPool = requestHandlerPool; } public int getPort() { @@ -71,97 +80,40 @@ public class SimpleProtobufServer extends Thread { } public void registerService(Service service) { - String serviceName = service.getDescriptorForType().getFullName(); - if (registeredServices.containsKey(serviceName)) { - logger.warning("Already registered service with this name."); - } - logger.info("Registering service: " + serviceName); - registeredServices.put(serviceName, service); + services.registerService(service); } - public void handleRequest(Data.Request request, OutputStream out) - throws IOException { - 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(Data.Response.RpcError.UNKNOWN_SERVICE); - response.build().writeDelimitedTo(out); + private synchronized void handleConnection(Socket connection) { + if (serverSocket.isClosed()) { return; } - final Descriptors.MethodDescriptor method = service.getDescriptorForType() - .findMethodByName(request.getMethodName()); - if (method == null) { - 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()); - } - }; - Message requestMessage = service.getRequestPrototype(method) - .toBuilder() - .mergeFrom(request.getRequestProto()) - .build(); - service.callMethod(method, rpc, requestMessage, doneCallback); - rpc.writeTo(response); - response.build().writeDelimitedTo(out); - } - - private void handleConnection(final Socket connection) { - if (isStopped) { - return; - } - Runnable handler = new Runnable() { + + final ConnectionHandler handler = ConnectionHandler.create( + connection, requestHandlerPool, services); + activeConnections.add(handler); + final Runnable realIncomingHandler = handler.createIncomingHandler(); + + class HelperHandler implements Runnable { @Override public void run() { - logger.info("Handling client connection " + connection); - activeClientSockets.add(connection); + activeConnections.add(handler); try { - while (true) { - Data.Request r1 = Data.Request.parseDelimitedFrom( - connection.getInputStream()); - if (r1 == null) { - try { - connection.close(); - } catch (IOException e) { - // Connection is closed. - } - } - handleRequest(r1, connection.getOutputStream()); - } - } catch (IOException e) { - logger.info("Closed connection: " + connection); + realIncomingHandler.run(); } finally { - try { - connection.close(); - } catch (IOException e) { - } - activeClientSockets.remove(connection); + activeConnections.remove(handler); } } - }; - pool.execute(handler); + } + + incomingHandlerPool.execute(new HelperHandler()); + outgoingHandlerPool.execute(handler.createOutgoingHandler()); } - @Override public void interrupt() { + @Override public synchronized void interrupt() { super.interrupt(); - isStopped = true; - for (Socket socket : activeClientSockets) { - try { - socket.close(); - } catch (IOException e) { - logger.log(Level.WARNING, "Error closing socket.", e); - } + for (ConnectionHandler handler : activeConnections) { + handler.closeConnection(); } - + try { serverSocket.close(); } catch (IOException e) { diff --git a/src/test/java/com/orbekk/protobuf/ProtobufFunctionalTest.java b/src/test/java/com/orbekk/protobuf/ProtobufFunctionalTest.java index cb1cf0d..9e599a4 100644 --- a/src/test/java/com/orbekk/protobuf/ProtobufFunctionalTest.java +++ b/src/test/java/com/orbekk/protobuf/ProtobufFunctionalTest.java @@ -28,7 +28,7 @@ import com.orbekk.protobuf.Test.Type2; public class ProtobufFunctionalTest { CountDownLatch returnC = new CountDownLatch(1); - SimpleProtobufServer server = SimpleProtobufServer.create(0, 50); + SimpleProtobufServer server = SimpleProtobufServer.create(0, 50, 1); int serverport = server.getPort(); RpcChannel channel = RpcChannel.create("localhost", serverport); TestService directService = new TestService(); diff --git a/src/test/java/com/orbekk/protobuf/Test.java b/src/test/java/com/orbekk/protobuf/Test.java index 3fe8efb..d396e60 100644 --- a/src/test/java/com/orbekk/protobuf/Test.java +++ b/src/test/java/com/orbekk/protobuf/Test.java @@ -8,27 +8,11 @@ public final class Test { public static void registerAllExtensions( com.google.protobuf.ExtensionRegistry registry) { } - public interface Type1OrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // optional int32 a = 1; - boolean hasA(); - int getA(); - - // optional int32 b = 2; - boolean hasB(); - int getB(); - - // optional string message = 3; - boolean hasMessage(); - String getMessage(); - } public static final class Type1 extends - com.google.protobuf.GeneratedMessage - implements Type1OrBuilder { + com.google.protobuf.GeneratedMessage { // Use Type1.newBuilder() to construct. - private Type1(Builder builder) { - super(builder); + private Type1() { + initFields(); } private Type1(boolean noInit) {} @@ -51,84 +35,44 @@ public final class Test { return com.orbekk.protobuf.Test.internal_static_com_orbekk_protobuf_Type1_fieldAccessorTable; } - private int bitField0_; // optional int32 a = 1; public static final int A_FIELD_NUMBER = 1; - private int a_; - public boolean hasA() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public int getA() { - return a_; - } + private boolean hasA; + private int a_ = 0; + public boolean hasA() { return hasA; } + public int getA() { return a_; } // optional int32 b = 2; public static final int B_FIELD_NUMBER = 2; - private int b_; - public boolean hasB() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public int getB() { - return b_; - } + private boolean hasB; + private int b_ = 0; + public boolean hasB() { return hasB; } + public int getB() { return b_; } // optional string message = 3; public static final int MESSAGE_FIELD_NUMBER = 3; - private java.lang.Object message_; - public boolean hasMessage() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public String getMessage() { - java.lang.Object ref = message_; - 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)) { - message_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getMessageBytes() { - java.lang.Object ref = message_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - message_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } + private boolean hasMessage; + private java.lang.String message_ = ""; + public boolean hasMessage() { return hasMessage; } + public java.lang.String getMessage() { return message_; } private void initFields() { - a_ = 0; - b_ = 0; - message_ = ""; } - 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.writeInt32(1, a_); + if (hasA()) { + output.writeInt32(1, getA()); } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeInt32(2, b_); + if (hasB()) { + output.writeInt32(2, getB()); } - if (((bitField0_ & 0x00000004) == 0x00000004)) { - output.writeBytes(3, getMessageBytes()); + if (hasMessage()) { + output.writeString(3, getMessage()); } getUnknownFields().writeTo(output); } @@ -139,30 +83,23 @@ public final class Test { if (size != -1) return size; size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { + if (hasA()) { size += com.google.protobuf.CodedOutputStream - .computeInt32Size(1, a_); + .computeInt32Size(1, getA()); } - if (((bitField0_ & 0x00000002) == 0x00000002)) { + if (hasB()) { size += com.google.protobuf.CodedOutputStream - .computeInt32Size(2, b_); + .computeInt32Size(2, getB()); } - if (((bitField0_ & 0x00000004) == 0x00000004)) { + if (hasMessage()) { size += com.google.protobuf.CodedOutputStream - .computeBytesSize(3, getMessageBytes()); + .computeStringSize(3, getMessage()); } 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.Test.Type1 parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { @@ -237,55 +174,34 @@ public final class Test { } 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.Test.Type1OrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.orbekk.protobuf.Test.internal_static_com_orbekk_protobuf_Type1_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.orbekk.protobuf.Test.internal_static_com_orbekk_protobuf_Type1_fieldAccessorTable; - } + com.google.protobuf.GeneratedMessage.Builder { + private com.orbekk.protobuf.Test.Type1 result; // Construct using com.orbekk.protobuf.Test.Type1.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } + private Builder() {} - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - } - } private static Builder create() { - return new Builder(); + Builder builder = new Builder(); + builder.result = new com.orbekk.protobuf.Test.Type1(); + return builder; + } + + protected com.orbekk.protobuf.Test.Type1 internalGetResult() { + return result; } public Builder clear() { - super.clear(); - a_ = 0; - bitField0_ = (bitField0_ & ~0x00000001); - b_ = 0; - bitField0_ = (bitField0_ & ~0x00000002); - message_ = ""; - bitField0_ = (bitField0_ & ~0x00000004); + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new com.orbekk.protobuf.Test.Type1(); return this; } public Builder clone() { - return create().mergeFrom(buildPartial()); + return create().mergeFrom(result); } public com.google.protobuf.Descriptors.Descriptor @@ -297,43 +213,33 @@ public final class Test { return com.orbekk.protobuf.Test.Type1.getDefaultInstance(); } + public boolean isInitialized() { + return result.isInitialized(); + } public com.orbekk.protobuf.Test.Type1 build() { - com.orbekk.protobuf.Test.Type1 result = buildPartial(); - if (!result.isInitialized()) { + if (result != null && !isInitialized()) { throw newUninitializedMessageException(result); } - return result; + return buildPartial(); } private com.orbekk.protobuf.Test.Type1 buildParsed() throws com.google.protobuf.InvalidProtocolBufferException { - com.orbekk.protobuf.Test.Type1 result = buildPartial(); - if (!result.isInitialized()) { + if (!isInitialized()) { throw newUninitializedMessageException( result).asInvalidProtocolBufferException(); } - return result; + return buildPartial(); } public com.orbekk.protobuf.Test.Type1 buildPartial() { - com.orbekk.protobuf.Test.Type1 result = new com.orbekk.protobuf.Test.Type1(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - result.a_ = a_; - if (((from_bitField0_ & 0x00000002) == 0x00000002)) { - to_bitField0_ |= 0x00000002; - } - result.b_ = b_; - if (((from_bitField0_ & 0x00000004) == 0x00000004)) { - to_bitField0_ |= 0x00000004; + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); } - result.message_ = message_; - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; + com.orbekk.protobuf.Test.Type1 returnMe = result; + result = null; + return returnMe; } public Builder mergeFrom(com.google.protobuf.Message other) { @@ -360,10 +266,6 @@ public final class Test { return this; } - public final boolean isInitialized() { - return true; - } - public Builder mergeFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) @@ -376,144 +278,106 @@ public final class Test { 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 8: { - bitField0_ |= 0x00000001; - a_ = input.readInt32(); + setA(input.readInt32()); break; } case 16: { - bitField0_ |= 0x00000002; - b_ = input.readInt32(); + setB(input.readInt32()); break; } case 26: { - bitField0_ |= 0x00000004; - message_ = input.readBytes(); + setMessage(input.readString()); break; } } } } - private int bitField0_; // optional int32 a = 1; - private int a_ ; public boolean hasA() { - return ((bitField0_ & 0x00000001) == 0x00000001); + return result.hasA(); } public int getA() { - return a_; + return result.getA(); } public Builder setA(int value) { - bitField0_ |= 0x00000001; - a_ = value; - onChanged(); + result.hasA = true; + result.a_ = value; return this; } public Builder clearA() { - bitField0_ = (bitField0_ & ~0x00000001); - a_ = 0; - onChanged(); + result.hasA = false; + result.a_ = 0; return this; } // optional int32 b = 2; - private int b_ ; public boolean hasB() { - return ((bitField0_ & 0x00000002) == 0x00000002); + return result.hasB(); } public int getB() { - return b_; + return result.getB(); } public Builder setB(int value) { - bitField0_ |= 0x00000002; - b_ = value; - onChanged(); + result.hasB = true; + result.b_ = value; return this; } public Builder clearB() { - bitField0_ = (bitField0_ & ~0x00000002); - b_ = 0; - onChanged(); + result.hasB = false; + result.b_ = 0; return this; } // optional string message = 3; - private java.lang.Object message_ = ""; public boolean hasMessage() { - return ((bitField0_ & 0x00000004) == 0x00000004); - } - public String getMessage() { - java.lang.Object ref = message_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - message_ = s; - return s; - } else { - return (String) ref; - } + return result.hasMessage(); } - public Builder setMessage(String value) { + public java.lang.String getMessage() { + return result.getMessage(); + } + public Builder setMessage(java.lang.String value) { if (value == null) { throw new NullPointerException(); } - bitField0_ |= 0x00000004; - message_ = value; - onChanged(); + result.hasMessage = true; + result.message_ = value; return this; } public Builder clearMessage() { - bitField0_ = (bitField0_ & ~0x00000004); - message_ = getDefaultInstance().getMessage(); - onChanged(); + result.hasMessage = false; + result.message_ = getDefaultInstance().getMessage(); return this; } - void setMessage(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000004; - message_ = value; - onChanged(); - } // @@protoc_insertion_point(builder_scope:com.orbekk.protobuf.Type1) } static { defaultInstance = new Type1(true); + com.orbekk.protobuf.Test.internalForceInit(); defaultInstance.initFields(); } // @@protoc_insertion_point(class_scope:com.orbekk.protobuf.Type1) } - public interface Type2OrBuilder - extends com.google.protobuf.MessageOrBuilder { - - // optional int32 result = 1; - boolean hasResult(); - int getResult(); - - // optional string message = 2; - boolean hasMessage(); - String getMessage(); - } public static final class Type2 extends - com.google.protobuf.GeneratedMessage - implements Type2OrBuilder { + com.google.protobuf.GeneratedMessage { // Use Type2.newBuilder() to construct. - private Type2(Builder builder) { - super(builder); + private Type2() { + initFields(); } private Type2(boolean noInit) {} @@ -536,70 +400,34 @@ public final class Test { return com.orbekk.protobuf.Test.internal_static_com_orbekk_protobuf_Type2_fieldAccessorTable; } - private int bitField0_; // optional int32 result = 1; public static final int RESULT_FIELD_NUMBER = 1; - private int result_; - public boolean hasResult() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - public int getResult() { - return result_; - } + private boolean hasResult; + private int result_ = 0; + public boolean hasResult() { return hasResult; } + public int getResult() { return result_; } // optional string message = 2; public static final int MESSAGE_FIELD_NUMBER = 2; - private java.lang.Object message_; - public boolean hasMessage() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public String getMessage() { - java.lang.Object ref = message_; - 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)) { - message_ = s; - } - return s; - } - } - private com.google.protobuf.ByteString getMessageBytes() { - java.lang.Object ref = message_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((String) ref); - message_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } + private boolean hasMessage; + private java.lang.String message_ = ""; + public boolean hasMessage() { return hasMessage; } + public java.lang.String getMessage() { return message_; } private void initFields() { - result_ = 0; - message_ = ""; } - 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.writeInt32(1, result_); + if (hasResult()) { + output.writeInt32(1, getResult()); } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeBytes(2, getMessageBytes()); + if (hasMessage()) { + output.writeString(2, getMessage()); } getUnknownFields().writeTo(output); } @@ -610,26 +438,19 @@ public final class Test { if (size != -1) return size; size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { + if (hasResult()) { size += com.google.protobuf.CodedOutputStream - .computeInt32Size(1, result_); + .computeInt32Size(1, getResult()); } - if (((bitField0_ & 0x00000002) == 0x00000002)) { + if (hasMessage()) { size += com.google.protobuf.CodedOutputStream - .computeBytesSize(2, getMessageBytes()); + .computeStringSize(2, getMessage()); } 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.Test.Type2 parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { @@ -704,53 +525,34 @@ public final class Test { } 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.Test.Type2OrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.orbekk.protobuf.Test.internal_static_com_orbekk_protobuf_Type2_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.orbekk.protobuf.Test.internal_static_com_orbekk_protobuf_Type2_fieldAccessorTable; - } + com.google.protobuf.GeneratedMessage.Builder { + private com.orbekk.protobuf.Test.Type2 result; // Construct using com.orbekk.protobuf.Test.Type2.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } + private Builder() {} - private Builder(BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - } - } private static Builder create() { - return new Builder(); + Builder builder = new Builder(); + builder.result = new com.orbekk.protobuf.Test.Type2(); + return builder; + } + + protected com.orbekk.protobuf.Test.Type2 internalGetResult() { + return result; } public Builder clear() { - super.clear(); - result_ = 0; - bitField0_ = (bitField0_ & ~0x00000001); - message_ = ""; - bitField0_ = (bitField0_ & ~0x00000002); + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new com.orbekk.protobuf.Test.Type2(); return this; } public Builder clone() { - return create().mergeFrom(buildPartial()); + return create().mergeFrom(result); } public com.google.protobuf.Descriptors.Descriptor @@ -762,39 +564,33 @@ public final class Test { return com.orbekk.protobuf.Test.Type2.getDefaultInstance(); } + public boolean isInitialized() { + return result.isInitialized(); + } public com.orbekk.protobuf.Test.Type2 build() { - com.orbekk.protobuf.Test.Type2 result = buildPartial(); - if (!result.isInitialized()) { + if (result != null && !isInitialized()) { throw newUninitializedMessageException(result); } - return result; + return buildPartial(); } private com.orbekk.protobuf.Test.Type2 buildParsed() throws com.google.protobuf.InvalidProtocolBufferException { - com.orbekk.protobuf.Test.Type2 result = buildPartial(); - if (!result.isInitialized()) { + if (!isInitialized()) { throw newUninitializedMessageException( result).asInvalidProtocolBufferException(); } - return result; + return buildPartial(); } public com.orbekk.protobuf.Test.Type2 buildPartial() { - com.orbekk.protobuf.Test.Type2 result = new com.orbekk.protobuf.Test.Type2(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; - } - result.result_ = result_; - if (((from_bitField0_ & 0x00000002) == 0x00000002)) { - to_bitField0_ |= 0x00000002; + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); } - result.message_ = message_; - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; + com.orbekk.protobuf.Test.Type2 returnMe = result; + result = null; + return returnMe; } public Builder mergeFrom(com.google.protobuf.Message other) { @@ -818,10 +614,6 @@ public final class Test { return this; } - public final boolean isInitialized() { - return true; - } - public Builder mergeFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) @@ -834,95 +626,73 @@ public final class Test { 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 8: { - bitField0_ |= 0x00000001; - result_ = input.readInt32(); + setResult(input.readInt32()); break; } case 18: { - bitField0_ |= 0x00000002; - message_ = input.readBytes(); + setMessage(input.readString()); break; } } } } - private int bitField0_; // optional int32 result = 1; - private int result_ ; public boolean hasResult() { - return ((bitField0_ & 0x00000001) == 0x00000001); + return result.hasResult(); } public int getResult() { - return result_; + return result.getResult(); } public Builder setResult(int value) { - bitField0_ |= 0x00000001; - result_ = value; - onChanged(); + result.hasResult = true; + result.result_ = value; return this; } public Builder clearResult() { - bitField0_ = (bitField0_ & ~0x00000001); - result_ = 0; - onChanged(); + result.hasResult = false; + result.result_ = 0; return this; } // optional string message = 2; - private java.lang.Object message_ = ""; public boolean hasMessage() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - public String getMessage() { - java.lang.Object ref = message_; - if (!(ref instanceof String)) { - String s = ((com.google.protobuf.ByteString) ref).toStringUtf8(); - message_ = s; - return s; - } else { - return (String) ref; - } + return result.hasMessage(); + } + public java.lang.String getMessage() { + return result.getMessage(); } - public Builder setMessage(String value) { + public Builder setMessage(java.lang.String value) { if (value == null) { throw new NullPointerException(); } - bitField0_ |= 0x00000002; - message_ = value; - onChanged(); + result.hasMessage = true; + result.message_ = value; return this; } public Builder clearMessage() { - bitField0_ = (bitField0_ & ~0x00000002); - message_ = getDefaultInstance().getMessage(); - onChanged(); + result.hasMessage = false; + result.message_ = getDefaultInstance().getMessage(); return this; } - void setMessage(com.google.protobuf.ByteString value) { - bitField0_ |= 0x00000002; - message_ = value; - onChanged(); - } // @@protoc_insertion_point(builder_scope:com.orbekk.protobuf.Type2) } static { defaultInstance = new Type2(true); + com.orbekk.protobuf.Test.internalForceInit(); defaultInstance.initFields(); } @@ -954,7 +724,7 @@ public final class Test { public static com.google.protobuf.Service newReflectiveService( final Interface impl) { return new Service() { - @java.lang.Override + @Override public void testA( com.google.protobuf.RpcController controller, com.orbekk.protobuf.Test.Type1 request, @@ -962,7 +732,7 @@ public final class Test { impl.testA(controller, request, done); } - @java.lang.Override + @Override public void testB( com.google.protobuf.RpcController controller, com.orbekk.protobuf.Test.Type1 request, @@ -970,7 +740,7 @@ public final class Test { impl.testB(controller, request, done); } - @java.lang.Override + @Override public void testC( com.google.protobuf.RpcController controller, com.orbekk.protobuf.Test.Type1 request, @@ -1340,5 +1110,7 @@ public final class Test { }, assigner); } + public static void internalForceInit() {} + // @@protoc_insertion_point(outer_class_scope) } -- cgit v1.2.3