| /** |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| **/ |
| |
| syntax = "proto3"; |
| |
| package tmb.internal.net; |
| |
| // Common TMB message types: |
| message TaggedTmbMessage { |
| uint32 message_type = 1; |
| bytes message_body = 2; |
| } |
| |
| message AnnotatedTmbMessage { |
| TaggedTmbMessage tagged_message = 1; |
| uint32 sender = 2; |
| uint64 send_time = 3; // Nanoseconds since epoch. |
| int64 message_id = 4; |
| } |
| |
| // Multipurpose request/response messages: |
| message EmptyMessage { |
| } |
| |
| message BoolStatus { |
| bool status = 1; |
| } |
| |
| // Connect() |
| message ConnectResponse { |
| uint32 client = 1; |
| } |
| |
| // Disconnect() |
| message DisconnectRequest { |
| uint32 client = 1; |
| } |
| |
| // RegisterClientAsSender()/RegisterClientAsReceiver() |
| message RegistrationRequest { |
| uint32 client = 1; |
| uint32 message_type = 2; |
| } |
| |
| // Send() |
| message SendRequest { |
| uint32 sender = 1; |
| |
| // Address: |
| bool send_to_all = 2; |
| repeated uint32 explicit_recipient = 3; |
| |
| // Style: |
| bool broadcast = 4; |
| uint64 timeout = 5; // Nanoseconds since epoch. |
| |
| TaggedTmbMessage msg = 6; |
| |
| uint32 priority = 7; |
| bool cancellable = 8; |
| } |
| |
| message SendResponse { |
| enum Status { |
| OK = 0; |
| NO_RECEIVERS = 1; |
| SENDER_NOT_CONNECTED = 2; |
| SENDER_NOT_REGISTERED_FOR_MESSAGE_TYPE = 3; |
| RECEIVER_NOT_REGISTERED_FOR_MESSAGE_TYPE = 4; |
| } |
| |
| Status status = 1; |
| int64 message_id = 2; |
| } |
| |
| // Various forms of Receive() |
| message ReceiveRequest { |
| uint32 receiver = 1; |
| uint32 minimum_priority = 2; |
| uint64 maximum_messages = 3; |
| bool delete_immediately = 4; |
| } |
| |
| // DeleteMessages()/CancelMessages() |
| message DeleteOrCancelRequest { |
| uint32 client = 1; |
| repeated int64 message_id = 2; |
| } |
| |
| // CountQueuedMessagesForClient() |
| message CountQueuedMessagesRequest { |
| uint32 client = 1; |
| } |
| |
| message CountQueuedMessagesResponse { |
| uint64 message_count = 1; |
| } |
| |
| // TMB service description. |
| service MessageBus { |
| rpc ResetBus (EmptyMessage) returns (EmptyMessage) {} |
| rpc Connect (EmptyMessage) returns (ConnectResponse) {} |
| rpc Disconnect (DisconnectRequest) returns (BoolStatus) {} |
| rpc RegisterClientAsSender (RegistrationRequest) returns (BoolStatus) {} |
| rpc RegisterClientAsReceiver (RegistrationRequest) returns (BoolStatus) {} |
| rpc Send (SendRequest) returns (SendResponse) {} |
| // TODO(chasseur): Look into doing server-side blocking version of Receive() |
| // to avoid client-side polling. |
| rpc Receive (ReceiveRequest) returns (stream AnnotatedTmbMessage) {} |
| rpc Delete (DeleteOrCancelRequest) returns (EmptyMessage) {} |
| rpc SenderCancel (DeleteOrCancelRequest) returns (EmptyMessage) {} |
| rpc ReceiverCancel (DeleteOrCancelRequest) returns (EmptyMessage) {} |
| rpc CountQueuedMessages (CountQueuedMessagesRequest) |
| returns (CountQueuedMessagesResponse) {} |
| } |