diff --git a/examples/src/main/java/com/linkedin/norbert/javacompat/network/Ping.java b/examples/src/main/java/com/linkedin/norbert/javacompat/network/Ping.java index d16b5717..d6d5946d 100644 --- a/examples/src/main/java/com/linkedin/norbert/javacompat/network/Ping.java +++ b/examples/src/main/java/com/linkedin/norbert/javacompat/network/Ping.java @@ -28,10 +28,14 @@ public Ping(long timestamp) { } class PingSerializer implements Serializer { - public String nameOfRequestMessage() { + public String requestName() { return "ping"; } + public String responseName() { + return "pong"; + } + public byte[] requestToBytes(Ping message) { return NorbertExampleProtos.Ping.newBuilder().setTimestamp(message.timestamp).build().toByteArray(); } diff --git a/examples/src/main/scala/com/linkedin/norbert/network/PingRequest.scala b/examples/src/main/scala/com/linkedin/norbert/network/PingRequest.scala index 2d111216..837dba66 100644 --- a/examples/src/main/scala/com/linkedin/norbert/network/PingRequest.scala +++ b/examples/src/main/scala/com/linkedin/norbert/network/PingRequest.scala @@ -19,7 +19,8 @@ import com.linkedin.norbert.protos.NorbertExampleProtos object Ping { implicit case object PingSerializer extends Serializer[Ping, Ping] { - def nameOfRequestMessage = "ping" + def requestName = "ping" + def responseName = "pong" def requestToBytes(message: Ping) = NorbertExampleProtos.Ping.newBuilder.setTimestamp(message.timestamp).build.toByteArray diff --git a/network/src/main/scala/com/linkedin/norbert/network/JavaSerializer.scala b/network/src/main/scala/com/linkedin/norbert/network/JavaSerializer.scala index 3ebe2354..d59cd00d 100644 --- a/network/src/main/scala/com/linkedin/norbert/network/JavaSerializer.scala +++ b/network/src/main/scala/com/linkedin/norbert/network/JavaSerializer.scala @@ -27,7 +27,8 @@ object JavaSerializer { class JavaSerializer[RequestMsg, ResponseMsg](requestClass: Class[RequestMsg], responseClass: Class[ResponseMsg]) extends Serializer[RequestMsg, ResponseMsg] { - def nameOfRequestMessage = requestClass.getName + " -> " + responseClass.getName + def requestName = requestClass.getName + def responseName = responseClass.getName private def toBytes[T](message: T): Array[Byte] = { val baos = new ByteArrayOutputStream @@ -57,7 +58,9 @@ object ProtobufSerializer { } class ProtobufSerializer[RequestMsg <: Message, ResponseMsg <: Message](requestPrototype: RequestMsg, responsePrototype: ResponseMsg) extends Serializer[RequestMsg, ResponseMsg] { - def nameOfRequestMessage = requestPrototype.getDescriptorForType.getFullName + def requestName = requestPrototype.getDescriptorForType.getFullName + + def responseName = responsePrototype.getDescriptorForType.getFullName def requestToBytes(request: RequestMsg) = request.toByteArray diff --git a/network/src/main/scala/com/linkedin/norbert/network/Request.scala b/network/src/main/scala/com/linkedin/norbert/network/Request.scala index 38b6a5a2..647fdfe4 100644 --- a/network/src/main/scala/com/linkedin/norbert/network/Request.scala +++ b/network/src/main/scala/com/linkedin/norbert/network/Request.scala @@ -25,7 +25,7 @@ case class Request[RequestMsg, ResponseMsg](message: RequestMsg, node: Node, val timestamp = System.currentTimeMillis def name: String = { - inputSerializer.nameOfRequestMessage + inputSerializer.requestName } def requestBytes: Array[Byte] = outputSerializer.requestToBytes(message) diff --git a/network/src/main/scala/com/linkedin/norbert/network/Serializer.scala b/network/src/main/scala/com/linkedin/norbert/network/Serializer.scala index f30b4b57..bf666e3c 100644 --- a/network/src/main/scala/com/linkedin/norbert/network/Serializer.scala +++ b/network/src/main/scala/com/linkedin/norbert/network/Serializer.scala @@ -23,19 +23,15 @@ import java.io.{OutputStream, InputStream} */ trait Serializer[RequestMsg, ResponseMsg] extends InputSerializer[RequestMsg, ResponseMsg] with OutputSerializer[RequestMsg, ResponseMsg] - // Split up for correct variance trait OutputSerializer[-RequestMsg, -ResponseMsg] { + def responseName: String def requestToBytes(request: RequestMsg): Array[Byte] def responseToBytes(response: ResponseMsg): Array[Byte] } trait InputSerializer[+RequestMsg, +ResponseMsg] { - def nameOfRequestMessage: String - + def requestName: String def requestFromBytes(bytes: Array[Byte]): RequestMsg def responseFromBytes(bytes: Array[Byte]): ResponseMsg } - -// def writeSerializedRequestMessage(message: RequestMsg, output: OutputStream): Unit -// def readSerializedResponseMessage(input: InputStream): ResponseMsg diff --git a/network/src/main/scala/com/linkedin/norbert/network/netty/ServerChannelHandler.scala b/network/src/main/scala/com/linkedin/norbert/network/netty/ServerChannelHandler.scala index 8dd84ece..c5ecf882 100644 --- a/network/src/main/scala/com/linkedin/norbert/network/netty/ServerChannelHandler.scala +++ b/network/src/main/scala/com/linkedin/norbert/network/netty/ServerChannelHandler.scala @@ -128,7 +128,7 @@ class ServerChannelHandler(serviceName: String, channelGroup: ChannelGroup, mess case Left(ex) => ResponseHelper.errorResponse(context.requestId, ex) case Right(responseMsg) => ResponseHelper.responseBuilder(context.requestId) - .setMessageName(is.nameOfRequestMessage) + .setMessageName(os.responseName) .setMessage(ByteString.copyFrom(os.responseToBytes(responseMsg))) .build } diff --git a/network/src/main/scala/com/linkedin/norbert/network/server/MessageHandlerRegistryComponent.scala b/network/src/main/scala/com/linkedin/norbert/network/server/MessageHandlerRegistryComponent.scala index 80a5602b..3438ad6c 100644 --- a/network/src/main/scala/com/linkedin/norbert/network/server/MessageHandlerRegistryComponent.scala +++ b/network/src/main/scala/com/linkedin/norbert/network/server/MessageHandlerRegistryComponent.scala @@ -32,7 +32,7 @@ class MessageHandlerRegistry { (implicit is: InputSerializer[RequestMsg, ResponseMsg], os: OutputSerializer[RequestMsg, ResponseMsg]) { if(handler == null) throw new NullPointerException - handlerMap += (is.nameOfRequestMessage -> MessageHandlerEntry(is, os, handler)) + handlerMap += (is.requestName -> MessageHandlerEntry(is, os, handler)) } @throws(classOf[InvalidMessageException]) @@ -52,7 +52,7 @@ class MessageHandlerRegistry { @throws(classOf[InvalidMessageException]) def handlerFor[RequestMsg, ResponseMsg](request: RequestMsg) (implicit is: InputSerializer[RequestMsg, ResponseMsg]): RequestMsg => ResponseMsg = { - handlerFor[RequestMsg, ResponseMsg](is.nameOfRequestMessage) + handlerFor[RequestMsg, ResponseMsg](is.requestName) } @throws(classOf[InvalidMessageException]) diff --git a/network/src/test/scala/com/linkedin/norbert/network/server/MessageExecutorSpec.scala b/network/src/test/scala/com/linkedin/norbert/network/server/MessageExecutorSpec.scala index d2beeab7..8c7bee0f 100644 --- a/network/src/test/scala/com/linkedin/norbert/network/server/MessageExecutorSpec.scala +++ b/network/src/test/scala/com/linkedin/norbert/network/server/MessageExecutorSpec.scala @@ -31,7 +31,7 @@ class MessageExecutorSpec extends Specification with Mockito with WaitFor with S val unregisteredSerializer = { val s = mock[Serializer[Ping, Ping]] - s.nameOfRequestMessage returns ("Foo") + s.requestName returns ("Foo") s } diff --git a/network/src/test/scala/com/linkedin/norbert/network/server/MessageHandlerRegistrySpec.scala b/network/src/test/scala/com/linkedin/norbert/network/server/MessageHandlerRegistrySpec.scala index 0be54e20..e9de8064 100644 --- a/network/src/test/scala/com/linkedin/norbert/network/server/MessageHandlerRegistrySpec.scala +++ b/network/src/test/scala/com/linkedin/norbert/network/server/MessageHandlerRegistrySpec.scala @@ -36,14 +36,14 @@ class MessageHandlerRegistrySpec extends Specification with Mockito with SampleM "return the handler for the specified request message" in { messageHandlerRegistry.registerHandler(handler) - val h = messageHandlerRegistry.handlerFor[Ping, Ping](serializer.nameOfRequestMessage) + val h = messageHandlerRegistry.handlerFor[Ping, Ping](serializer.requestName) h(request) must be_==(request) handled must be_==(request) } "throw an InvalidMessageException if no handler is registered" in { - messageHandlerRegistry.handlerFor(serializer.nameOfRequestMessage) must throwA[InvalidMessageException] + messageHandlerRegistry.handlerFor(serializer.requestName) must throwA[InvalidMessageException] } "return true if the provided response is a valid response for the given request" in { diff --git a/project/build.properties b/project/build.properties index f6dbaaa9..b75ce8be 100644 --- a/project/build.properties +++ b/project/build.properties @@ -3,6 +3,6 @@ project.organization=com.linkedin.norbert project.name=norbert sbt.version=0.7.4 -project.version=0.6.0 +project.version=0.6.1 build.scala.versions=2.8.0 project.initialize=false