我将ScalaPB用于我的 protobuf 编译器,它为我的协议缓冲区生成 Scala 案例类、解析器和序列化程序。
由于 ScalaPB,我在 .proto 文件中有一个简单的 protobuf 消息,该文件已编译为 Scala 案例类。
option java_outer_classname = "MovementProtos";
message Move {
required string direction = 1;
required string mode = 2;
}
该文件已编译并允许我执行以下操作:
val move = Move(direction = "up", mode = "walk")
我有一个 Akka 演员处理 TCP 连接。
class PacketHandler extends Actor {
def receive: Receive = {
case m: Move =>
// successfully matched against Move case class message
case Tcp.Received(data) =>
// didn't match any messages
case _: Tcp.ConnectionClosed =>
context.stop(self)
}
}
如果我向 my 发送Move
protobuf 消息PacketHandler
,它是否会成功匹配我的Move
案例类以及我如何编写 my receive
?
如何发送Move
protobuf 消息?假设当它成功匹配Move
protobuf 消息时,它会回显它。
def receive: Receive = {
case m: Move =>
// successfully matched against Move case class message
// now echo back 'm' over the wire
sender ! Tcp.Write(???)
...
}
我没有客户来测试我的PacketHandler
演员,所以我一直在使用 telnet。
了解编码消息的确切外观也很有用,Move
这样我就可以通过 telnet 创建连接并通过线路发送编码消息并测试它在到达时是否被解码PacketHandler
。