import "steammessages.proto";

option optimize_for = SPEED;
option cc_generic_services = false;

enum PartnerAccountType {
	PARTNER_NONE = 0;
	PARTNER_PERFECT_WORLD = 1;
	PARTNER_NEXON = 2;
}

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;
}

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

message CMsgSOSingleObject {
	optional fixed64 owner = 1;
	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 {
		optional int32 type_id = 1;
		optional bytes object_data = 2;
	}

	optional fixed64 owner = 1;
	repeated .CMsgSOMultipleObjects.SingleObject objects = 2;
	optional fixed64 version = 3;
	optional .CMsgSOIDOwner owner_soid = 6;
	optional uint32 service_id = 7;
}

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

	optional fixed64 owner = 1;
	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 fixed64 owner = 1;
}

message CMsgSOCacheSubscriptionCheck {
	optional fixed64 owner = 1;
	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 fixed64 owner = 1;
	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 CGCToGCMsgMasterAck {
	optional uint32 dir_index = 1;
	optional string machine_name = 3;
	optional string process_name = 4;
	repeated uint32 type_instances = 5;
}

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

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;
}

message CMsgGCToGCIncrementRecruitmentLevel {
	optional fixed64 steamid = 1;
}

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

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 = 2;
	optional fixed64 sync_version = 3;
	repeated .CMsgGCToGCSOCacheSubscribe.CMsgHaveVersions have_versions = 4;
}

message CMsgGCToGCSOCacheUnsubscribe {
	optional fixed64 subscriber = 1;
	optional fixed64 unsubscribe_from = 2;
}

message CMsgGCClientPing {
}
