<?php
/**
 * @file network_api.php
 * @brief RGS-GAD Game Index - Network API
 * 
 * @date 2019-01-28
 * @version 1.05-190128
 */
 
/**
* @brief Inizializzazione il SOAP server
*/
function init_network() {
	global $use_playforreal;
	if (!$use_playforreal) {
		return null;
	} else {
		try {
			return new SoapClient("{$_SERVER["REQUEST_SCHEME"]}://".IP_HOST_SYSTEM.NETWORK_WSDL_PATH."/?wsdl", array('cache_wsdl' => WSDL_CACHE_NONE));
		} catch (SoapFault $fault) {
			SET_ERROR(ERR_INIT_WSDL, return_lang('Unexpected', 'error'));
			return null;
		}
	}
}
 
/**
 * @brief Richiede l'apertura di una sessione di gioco
 * 
 * @param  [in]  player_uid     UID del player
 * @param  [in]  game_uid       UID del gioco
 * @param  [in]  amount         Cifra da depositare sulla sessione
 * @param [out]  session_uid    UID della session di gioco creata
 */
function open_session($player_uid, $game_uid, $amount, &$session_uid) {
	global $network;
	//
	$rc = 0;
	//
	$response = $network->OpenSession($player_uid, $game_uid, $amount);
	$json_response = json_encode($response);
	//
	if (!is_array($response) || !array_key_exists('error', $response)) {
		$rc = 1;
	} else if ($response['error'] != 0) {
		$rc = $response['error'];
	} else if (!array_key_exists('session', $response)) {
		$rc = 2;
	} else {
		$session_uid = $response['session']; // Memorizza il session UID
	}
	//
	return $rc;
}

/**
 * @brief Esegue la chiamata al network per richiedere la chiususra della sessione di gioco
 * 
 * @param [in] session_uid      Session UID della sessione di gioco
 * @param [in] forced           Booleano per indicare se forzare o meno il logout
 * 
 * @return     rc               Codice di errore (0 => Nessun errore)
 */
function close_session_TODEL($session_uid, $forced = true) {
	global $network;
	//
	$rc = 0;
	//
	$response = $network->CloseSession($session_uid, $forced);
	$json_response = json_encode($response);
	//
	if (!is_array($response) || !array_key_exists('error', $response)) {
		$rc = 1;
	} else if ($response['error'] != 0) {
		$rc = $response['error'];
		//
		// NOTA: la chiusura di una sessione di gioco potrebbe causare errore nel caso il link sia memorizzato dal browser
		//       per questo motivo si sovrascrive l'errore e si forza il caricamento della pagina
		$rc = 0;
	} else if (!array_key_exists('result', $response)) {
		$rc = 2;
	} else {
		$rc = ($response['result']) ? 0 : 3;
	}
	//
	return $rc;
}

/**
 * @brief Esegue la chiamata al network per richiedere i dati di una specifica sessione di gioco
 * 
 * @param [in] session_uid      Session UID della sessione di gioco
 * 
 * @return     rc               Codice di errore (0 => Nessun errore)
 */
function get_session($session_uid) {
	global $network;
	//
	$rc = 0;
	//
	$response = $network->GetSession($session_uid);
	$json_response = json_encode($response);
	//
	if (!is_array($response) || !array_key_exists('error', $response)) {
		$rc = 1;
	} else if ($response['error'] != 0) {
		$rc = $response['error'];
	} else if (!array_key_exists('session_item', $response)) {
		$rc = 2;
	} else {
		// Non vengono letti parametri in quanto non sono necessari
	}
	//
	return $rc;
}

/**
 * @brief Richiede i dettagli delle partite inerenti alla sessione di gioco
 * 
 * @param [in] session_uid      Session UID della sessione di gioco
 * 
 * @return     rc               Codice di errore (0 => Nessun errore)
 */
function get_rounds($session_uid) {
	global $network;
	//
	$rc = 0;
	//
	$response = $network->GetRounds($session_uid);
	$json_response = json_encode($response);
	if (!is_array($response) || !array_key_exists('error', $response)) {
		$rc = 1;
	} else if ($response['error'] != 0) {
		$rc = $response['error'];
	} else if (!array_key_exists('round_items', $response)) {
		$rc = 2;
	} else {
		// Non vengono letti parametri in quanto non sono necessari
	}
	//
	return $rc;
}

/**
 * @brief Esegue il logout dalla sessione di gioco
 * 
 * @param [in]  session_UID    UID della sessione di gioco
 * @param [in]  client_token   Token del client di gioco
 * @param [in]  force          Forzatura chiusura
 * @param [out] error          Testo di errore
 */ 
function _logout($session_UID, $force, &$url) {
	if (NOT_ERROR()) {
		//
		$dbs = initDBS();
		//
		$session = Select($dbs, GAD_TB_SESSIONS, array('ID', 'ClientID', 'ServerID', 'BuyTotal', 'PlayerID', 'State'), array('UID' => $session_UID));
		if ($session['info']['num_rows'] == 0) {
			SET_ERROR(ERR_DB_SESSION_NOT_FOUND, return_lang('Unexpected', 'error'));
		} else if ($session['info']['num_rows'] > 1) {
			SET_ERROR(ERR_DB_SESSION_TOO_MANY, return_lang('Unexpected', 'error'));
		} else {
			$rc = close_session($session_UID, $force);
			if ($rc != 0) {
				SET_ERROR($rc, return_lang('Unexpected', 'error'));
			} else if (DEFAULT_ACTIVE_CMD_GET_INFO_OPTIONAL) {
				$rc = get_session($session_UID);
				if ($rc != 0) {
					SET_ERROR($rc, return_lang('Unexpected', 'error'));
				} else {
					$rc = get_rounds($session_UID);
					if ($rc != 0) {
						SET_ERROR($rc, return_lang('Unexpected', 'error'));
					}
				}
			}
			if (NOT_ERROR()) {
				$url = "{$_SERVER['REQUEST_SCHEME']}://" . $_SERVER["HTTP_HOST"] . str_replace("index.php", "", $_SERVER["DOCUMENT_URI"]);
			}
		}
	}
}
?>
