import "citadel_gcmessages_common.proto";

enum ECitadelGameMessages {
	k_EMsgGameServerToClientConnectionStatus = 10;
	k_EMsgGameServerToClientInitialGameState = 12;
	k_EMsgGameServerToClientGameCompleted = 13;
	k_EMsgGameServerToClientGoodbye = 15;
}

enum ECitadelDisconnectReason {
	k_ECitadelDisconnectReason_UserLeaveMatch = 1001;
	k_ECitadelDisconnectReason_UserQuitApp = 1002;
	k_ECitadelDisconnectReason_UserCancel = 1003;
	k_ECitadelDisconnectReason_Goodbye = 1004;
	k_ECitadelDisconnectReason_BadMessage = 2001;
	k_ECitadelDisconnectReason_GameDestroyedUnexpectedly = 2002;
	k_ECitadelDisconnectReason_ChangingServer = 2003;
	k_ECitadelDisconnectReason_OldConnection = 2004;
	k_ECitadelDisconnectReason_GoodbyeUnrecognizedGame = 2005;
}

message CMsgClientServerHeader {
	optional uint64 game_instance_id = 1;
	optional uint32 local_player_index = 2;
	optional bytes payload = 3;
	optional .ECitadelGameMessages msg_id = 4 [default = k_EMsgGameServerToClientConnectionStatus];
}

message CMsgGameServerToClientGameCompleted {
}

message CMsgGameServerToClientGoodbye {
}

message CMsgGameServerToClientConnectionStatus {
	message Player {
		optional int32 player_slot = 1 [default = -1];
		optional .CMsgGameServerToClientConnectionStatus.EStatus status = 2 [default = k_EConnected];
		optional bool inactivity_ticking = 3;
		optional uint32 inactivity_ms_remaining = 4;
		optional uint32 inactivity_anim_ms_remaining = 5;
	}

	enum EStatus {
		k_EConnected = 1;
		k_EDisconnected = 2;
	}

	repeated .CMsgGameServerToClientConnectionStatus.Player players = 1;
}

message CClientReconnectInfo {
	optional fixed64 server_steam_id = 1;
	optional uint64 lobby_id = 2;
	optional uint32 time_updated = 3;
	optional uint32 udp_connect_ip = 4;
	optional uint32 udp_connect_port = 5;
	optional uint32 compatibility_version = 6;
}

message CMsgClientAccountSyncStorageFile {
	optional uint32 version = 1;
	repeated uint32 ids = 2;
	repeated uint32 values = 3;
}
