//
// 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";

option java_multiple_files = true;
option java_package = "org.apache.servicecomb.pack.contract.grpc";
option java_outer_classname = "TccEventProto";

import "GrpcCommon.proto";

service TccEventService {
  rpc OnConnected (GrpcServiceConfig) returns (stream GrpcTccCoordinateCommand) {
  }
  rpc participate(GrpcTccParticipatedEvent) returns (GrpcAck) {}
  rpc OnTccTransactionStarted (GrpcTccTransactionStartedEvent) returns (GrpcAck) {}
  rpc OnTccTransactionEnded (GrpcTccTransactionEndedEvent) returns (GrpcAck) {}
  rpc OnTccCoordinated(GrpcTccCoordinatedEvent) returns(GrpcAck) {}
  rpc OnDisconnected (GrpcServiceConfig) returns (GrpcAck) {
  }
}

message GrpcTccTransactionStartedEvent {
  int64 timestamp = 1;
  string globalTxId = 2;
  string localTxId = 3;
  string parentTxId = 4;
  string serviceName = 5;
  string instanceId = 6;
}

message GrpcTccParticipatedEvent {
  int64 timestamp = 1;
  string globalTxId = 2;
  string localTxId = 3;
  string parentTxId = 4;
  string serviceName = 5;
  string instanceId = 6;
  string confirmMethod = 7;
  string cancelMethod = 8;
  string status = 9;
}

message GrpcTccTransactionEndedEvent {
  int64 timestamp = 1;
  string globalTxId = 2;
  string localTxId = 3;
  string parentTxId = 4;
  string serviceName = 5;
  string instanceId = 6;
  string status = 7;
}

message GrpcTccCoordinatedEvent {
  int64 timestamp = 1;
  string globalTxId = 2;
  string localTxId = 3;
  string parentTxId = 4;
  string serviceName = 5;
  string instanceId = 6;
  string methodName = 7;
  string status = 8;
}

message GrpcTccCoordinateCommand {
  string globalTxId = 1;
  string localTxId = 2;
  string parentTxId = 3;
  string serviceName = 4;
  string method = 5;
}

