syntax = "proto3";

package experiment;

import "google/protobuf/empty.proto";

message AsyncEvent {
    int32 seq = 1;
    enum EventType {
        BIG_BANG = 0;
        SMALL_BANG = 1;
        NO_BANG = 2;
    }
    EventType type = 2;
    string details = 3;
}

message Packet {
    int32 source = 1;
    bytes content = 2;
}
message Echo {
    string msg = 1;
    float delay = 2;
}

service ExperimentalService {

    rpc GetEcho(Echo) returns(Echo);

    // For server to send async stream to client
    rpc ReceiveStreamedEvents(google.protobuf.Empty)
        returns(stream AsyncEvent);

    // For server to send async packets to client
    rpc ReceivePackets(google.protobuf.Empty) returns(stream Packet);

    // For client to send async packets to server
    rpc SendPackets(stream Packet) returns(google.protobuf.Empty);

}
