blob: 4c03c175c7033635b6a0531800ed7847fe4f99ef [file] [log] [blame]
/**
* 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) {}
}