import "steammessages_unified_base.steamclient.proto";

option cc_generic_services = true;

message CSiteManagerClient_IncomingClient_Request {
	optional fixed64 site_instanceid = 1;
	optional fixed64 client_steamid = 2;
	optional fixed32 client_local_ip = 3;
	optional bytes connection_key = 4;
}

message CSiteManagerClient_IncomingClient_Response {
}

message CSiteLicense_InitiateAssociation_Request {
	optional fixed64 site_steamid = 1;
	optional fixed64 site_instanceid = 2;
	optional fixed32 client_local_ip = 3;
}

message CSiteLicense_InitiateAssociation_Response {
	optional bytes connection_key = 1;
}

message CSiteLicense_LCSAuthenticate_Request {
	optional fixed64 instanceid = 1;
}

message CSiteLicense_LCSAuthenticate_Response {
	optional uint64 site_id = 1;
	optional string site_name = 2;
	optional bool new_session = 3;
}

message CSiteLicense_LCSAssociateUser_Request {
	optional fixed64 steamid = 1;
	optional fixed32 local_ip = 2;
	optional fixed64 instanceid = 3;
}

message CSiteLicense_LCSAssociateUser_Response {
}

message CSiteLicense_ClientSeatCheckout_Request {
	optional fixed64 steamid = 1;
	optional fixed64 instanceid = 2;
	optional uint32 packageid = 3;
	optional uint32 appid = 4;
}

message CSiteLicense_ClientSeatCheckout_Response {
}

message CSiteLicense_ClientGetAvailableSeats_Request {
	optional uint32 packageid = 1;
}

message CSiteLicense_ClientGetAvailableSeats_Response {
	optional uint32 available_seats = 1;
}

service SiteManagerClient {
	option (service_description) = "Local site manager client service";
	option (service_execution_site) = k_EProtoExecutionSiteSteamClient;
	rpc IncomingClient (.CSiteManagerClient_IncomingClient_Request) returns (.CSiteManagerClient_IncomingClient_Response) {
		option (method_description) = "Rack informing site manager of new inbound client PSK connection";
	}
}
service SiteLicense {
	option (service_description) = "Site License service";
	rpc InitiateAssociation (.CSiteLicense_InitiateAssociation_Request) returns (.CSiteLicense_InitiateAssociation_Response) {
		option (method_description) = "Client is requesting connetion info for local site";
	}
	rpc LCSAuthenticate (.CSiteLicense_LCSAuthenticate_Request) returns (.CSiteLicense_LCSAuthenticate_Response) {
		option (method_description) = "Local cafe server authentication";
	}
	rpc LCSAssociateUser (.CSiteLicense_LCSAssociateUser_Request) returns (.CSiteLicense_LCSAssociateUser_Response) {
		option (method_description) = "Local cafe server wants to grant user access to site";
	}
	rpc ClientSeatCheckout (.CSiteLicense_ClientSeatCheckout_Request) returns (.CSiteLicense_ClientSeatCheckout_Response) {
		option (method_description) = "Client is requesting use of a site license seat";
	}
	rpc ClientGetAvailableSeats (.CSiteLicense_ClientGetAvailableSeats_Request) returns (.CSiteLicense_ClientGetAvailableSeats_Response) {
		option (method_description) = "Client is requesting the number of currently available seats";
	}
}
