import "steammessages.proto";

option optimize_for = SPEED;
option cc_generic_services = false;

enum ESourceEngine {
	k_ESE_Source1 = 0;
	k_ESE_Source2 = 1;
}

enum PartnerAccountType {
	PARTNER_NONE = 0;
	PARTNER_PERFECT_WORLD = 1;
	PARTNER_INVALID = 3;
}

enum GCConnectionStatus {
	GCConnectionStatus_HAVE_SESSION = 0;
	GCConnectionStatus_GC_GOING_DOWN = 1;
	GCConnectionStatus_NO_SESSION = 2;
	GCConnectionStatus_NO_SESSION_IN_LOGON_QUEUE = 3;
	GCConnectionStatus_NO_STEAM = 4;
	GCConnectionStatus_SUSPENDED = 5;
	GCConnectionStatus_STEAM_GOING_DOWN = 6;
}

message CMsgSHA1Digest {
	required fixed64 block1 = 1;
	required fixed64 block2 = 2;
	required fixed32 block3 = 3;
}

message CMsgSOIDOwner {
	optional uint32 type = 1;
	optional uint64 id = 2;
}

message CMsgSOSingleObject {
	optional int32 type_id = 2;
	optional bytes object_data = 3;
	optional fixed64 version = 4;
	optional .CMsgSOIDOwner owner_soid = 5;
	optional uint32 service_id = 6;
}

message CMsgSOMultipleObjects {
	message SingleObject {
		option (msgpool_soft_limit) = 256;
		option (msgpool_hard_limit) = 1024;

		optional int32 type_id = 1;
		optional bytes object_data = 2;
	}

	repeated .CMsgSOMultipleObjects.SingleObject objects_modified = 2;
	optional fixed64 version = 3;
	repeated .CMsgSOMultipleObjects.SingleObject objects_added = 4;
	repeated .CMsgSOMultipleObjects.SingleObject objects_removed = 5;
	optional .CMsgSOIDOwner owner_soid = 6;
	optional uint32 service_id = 7;
}

message CMsgSOCacheSubscribed {
	message SubscribedType {
		optional int32 type_id = 1;
		repeated bytes object_data = 2;
	}

	repeated .CMsgSOCacheSubscribed.SubscribedType objects = 2;
	optional fixed64 version = 3;
	optional .CMsgSOIDOwner owner_soid = 4;
	optional uint32 service_id = 5;
	repeated uint32 service_list = 6;
	optional fixed64 sync_version = 7;
}

message CMsgSOCacheSubscribedUpToDate {
	optional fixed64 version = 1;
	optional .CMsgSOIDOwner owner_soid = 2;
	optional uint32 service_id = 3;
	repeated uint32 service_list = 4;
	optional fixed64 sync_version = 5;
}

message CMsgSOCacheUnsubscribed {
	optional .CMsgSOIDOwner owner_soid = 2;
}

message CMsgSOCacheSubscriptionCheck {
	optional fixed64 version = 2;
	optional .CMsgSOIDOwner owner_soid = 3;
	optional uint32 service_id = 4;
	repeated uint32 service_list = 5;
	optional fixed64 sync_version = 6;
}

message CMsgSOCacheSubscriptionRefresh {
	optional .CMsgSOIDOwner owner_soid = 2;
}

message CMsgSOCacheVersion {
	optional fixed64 version = 1;
}

message CMsgGCMultiplexMessage {
	optional uint32 msgtype = 1;
	optional bytes payload = 2;
	repeated fixed64 steamids = 3;
}

message CMsgGCToGCSubGCStarting {
	optional uint32 dir_index = 1;
}

message CGCToGCMsgMasterAck {
	message Process {
		optional uint32 dir_index = 1;
		repeated uint32 type_instances = 2;
	}

	optional uint32 dir_index = 1;
	optional string machine_name = 3;
	optional string process_name = 4;
	repeated .CGCToGCMsgMasterAck.Process directory = 6;
}

message CGCToGCMsgMasterAck_Response {
	optional int32 eresult = 1 [default = 2];
}

message CMsgGCToGCUniverseStartup {
	optional bool is_initial_startup = 1;
}

message CMsgGCToGCUniverseStartupResponse {
	optional int32 eresult = 1;
}

message CGCToGCMsgMasterStartupComplete {
	message GCInfo {
		optional uint32 dir_index = 1;
		optional string machine_name = 2;
	}

	repeated .CGCToGCMsgMasterStartupComplete.GCInfo gc_info = 1;
}

message CGCToGCMsgRouted {
	optional uint32 msg_type = 1;
	optional fixed64 sender_id = 2;
	optional bytes net_message = 3;
}

message CGCToGCMsgRoutedReply {
	optional uint32 msg_type = 1;
	optional bytes net_message = 2;
}

message CMsgGCUpdateSubGCSessionInfo {
	message CMsgUpdate {
		optional fixed64 steamid = 1;
		optional fixed32 ip = 2;
		optional bool trusted = 3;
	}

	repeated .CMsgGCUpdateSubGCSessionInfo.CMsgUpdate updates = 1;
}

message CMsgGCRequestSubGCSessionInfo {
	optional fixed64 steamid = 1;
}

message CMsgGCRequestSubGCSessionInfoResponse {
	optional fixed32 ip = 1;
	optional bool trusted = 2;
	optional uint32 port = 3;
	optional bool success = 4;
}

message CMsgSOCacheHaveVersion {
	optional .CMsgSOIDOwner soid = 1;
	optional fixed64 version = 2;
	optional uint32 service_id = 3;
	optional uint32 cached_file_version = 4;
}

message CMsgClientHello {
	optional uint32 version = 1;
	repeated .CMsgSOCacheHaveVersion socache_have_versions = 2;
	optional uint32 client_session_need = 3;
	optional .PartnerAccountType client_launcher = 4 [default = PARTNER_NONE];
	optional string secret_key = 5;
	optional uint32 client_language = 6;
	optional .ESourceEngine engine = 7 [default = k_ESE_Source1];
}

message CMsgClientWelcome {
	message Location {
		optional float latitude = 1;
		optional float longitude = 2;
		optional string country = 3;
	}

	optional uint32 version = 1;
	optional bytes game_data = 2;
	repeated .CMsgSOCacheSubscribed outofdate_subscribed_caches = 3;
	repeated .CMsgSOCacheSubscriptionCheck uptodate_subscribed_caches = 4;
	optional .CMsgClientWelcome.Location location = 5;
	optional bytes save_game_key = 6;
	optional fixed32 item_schema_crc = 7;
	optional string items_game_url = 8;
	optional uint32 gc_socache_file_version = 9;
	optional string txn_country_code = 10;
}

message CMsgConnectionStatus {
	optional .GCConnectionStatus status = 1 [default = GCConnectionStatus_HAVE_SESSION];
	optional uint32 client_session_need = 2;
	optional int32 queue_position = 3;
	optional int32 queue_size = 4;
	optional int32 wait_seconds = 5;
	optional int32 estimated_wait_seconds_remaining = 6;
}

message CMsgGCToGCSOCacheSubscribe {
	message CMsgHaveVersions {
		optional uint32 service_id = 1;
		optional uint64 version = 2;
	}

	optional fixed64 subscriber = 1;
	optional fixed64 subscribe_to_id = 2;
	optional fixed64 sync_version = 3;
	repeated .CMsgGCToGCSOCacheSubscribe.CMsgHaveVersions have_versions = 4;
	optional uint32 subscribe_to_type = 5;
}

message CMsgGCToGCSOCacheUnsubscribe {
	optional fixed64 subscriber = 1;
	optional fixed64 unsubscribe_from_id = 2;
	optional uint32 unsubscribe_from_type = 3;
}

message CMsgGCClientPing {
}

message CMsgGCToGCForwardAccountDetails {
	optional fixed64 steamid = 1;
	optional .CGCSystemMsg_GetAccountDetails_Response account_details = 2;
	optional uint32 age_seconds = 3;
}

message CMsgGCToGCLoadSessionSOCache {
	optional uint32 account_id = 1;
	optional .CMsgGCToGCForwardAccountDetails forward_account_details = 2;
}

message CMsgGCToGCLoadSessionSOCacheResponse {
}

message CMsgGCToGCUpdateSessionStats {
	optional uint32 user_sessions = 1;
	optional uint32 server_sessions = 2;
	optional bool in_logon_surge = 3;
}

message CWorkshop_PopulateItemDescriptions_Request {
	message SingleItemDescription {
		optional uint32 gameitemid = 1;
		optional string item_description = 2;
	}

	message ItemDescriptionsLanguageBlock {
		optional string language = 1;
		repeated .CWorkshop_PopulateItemDescriptions_Request.SingleItemDescription descriptions = 2;
	}

	optional uint32 appid = 1;
	repeated .CWorkshop_PopulateItemDescriptions_Request.ItemDescriptionsLanguageBlock languages = 2;
}

message CWorkshop_GetContributors_Request {
	optional uint32 appid = 1;
	optional uint32 gameitemid = 2;
}

message CWorkshop_GetContributors_Response {
	repeated fixed64 contributors = 1;
}

message CWorkshop_SetItemPaymentRules_Request {
	message WorkshopItemPaymentRule {
		optional uint64 workshop_file_id = 1;
		optional float revenue_percentage = 2;
		optional string rule_description = 3;
	}

	message PartnerItemPaymentRule {
		optional uint32 account_id = 1;
		optional float revenue_percentage = 2;
		optional string rule_description = 3;
	}

	optional uint32 appid = 1;
	optional uint32 gameitemid = 2;
	repeated .CWorkshop_SetItemPaymentRules_Request.WorkshopItemPaymentRule associated_workshop_files = 3;
	repeated .CWorkshop_SetItemPaymentRules_Request.PartnerItemPaymentRule partner_accounts = 4;
}

message CWorkshop_SetItemPaymentRules_Response {
}

message CBroadcast_PostGameDataFrame_Request {
	optional uint32 appid = 1;
	optional fixed64 steamid = 2;
	optional fixed64 broadcast_id = 3;
	optional bytes frame_data = 4;
}

message CMsgSerializedSOCache {
	message TypeCache {
		optional uint32 type = 1;
		repeated bytes objects = 2;
		optional uint32 service_id = 3;
	}

	message Cache {
		message Version {
			optional uint32 service = 1;
			optional uint64 version = 2;
		}

		optional uint32 type = 1;
		optional uint64 id = 2;
		repeated .CMsgSerializedSOCache.Cache.Version versions = 3;
		repeated .CMsgSerializedSOCache.TypeCache type_caches = 4;
	}

	optional uint32 file_version = 1;
	repeated .CMsgSerializedSOCache.Cache caches = 2;
	optional uint32 gc_socache_file_version = 3;
}

message CMsgGCToClientPollConvarRequest {
	optional string convar_name = 1;
	optional uint32 poll_id = 2;
}

message CMsgGCToClientPollConvarResponse {
	optional uint32 poll_id = 1;
	optional string convar_value = 2;
}

message CGCMsgCompressedMsgToClient {
	optional uint32 msg_id = 1;
	optional bytes compressed_msg = 2;
}

message CMsgGCToGCMasterBroadcastMessage {
	optional uint32 users_per_second = 1;
	optional bool send_to_users = 2;
	optional bool send_to_servers = 3;
	optional uint32 msg_id = 4;
	optional bytes msg_data = 5;
}

message CMsgGCToGCMasterSubscribeToCache {
	optional uint32 soid_type = 1;
	optional fixed64 soid_id = 2;
	repeated uint32 account_ids = 3;
	repeated fixed64 steam_ids = 4;
}

message CMsgGCToGCMasterSubscribeToCacheResponse {
}

message CMsgGCToGCMasterSubscribeToCacheAsync {
	optional .CMsgGCToGCMasterSubscribeToCache subscribe_msg = 1;
}

message CMsgGCToGCMasterUnsubscribeFromCache {
	optional uint32 soid_type = 1;
	optional fixed64 soid_id = 2;
	repeated uint32 account_ids = 3;
	repeated fixed64 steam_ids = 4;
}

message CMsgGCToGCMasterDestroyCache {
	optional uint32 soid_type = 1;
	optional fixed64 soid_id = 2;
}
