<?php
require_once($INC . "/sql.inc.php");
require_once($INC . "/cache.inc.php");
require_once($INC . "/prof.inc.php");
$rg_state_error = "";
if (!isset($rg_state_debug))
$rg_state_debug = FALSE;
function rg_state_set_error($str)
{
global $rg_state_error;
$rg_state_error = $str;
rg_log($str);
}
function rg_state_error()
{
global $rg_state_error;
return $rg_state_error;
}
/*
* Get state
*/
function rg_state_get($db, $var)
{
global $rg_state_debug;
rg_prof_start("state_get");
if ($rg_state_debug)
rg_log_enter("state_get: var=$var");
$ret = FALSE;
while (1) {
// Try cache first
$r = rg_cache_get("state::" . $var);
if ($r !== FALSE) {
$ret = $r;
break;
}
// Not found in cache, try the database
$params = array("var" => $var);
$sql = "SELECT value FROM state WHERE var = @@var@@ LIMIT 1";
$res = rg_sql_query_params($db, $sql, $params);
if ($res === FALSE) {
rg_state_set_error(rg_sql_error());
break;
}
$rows = rg_sql_num_rows($res);
if ($rows == 0) {
$ret = "";
} else {
$row = rg_sql_fetch_array($res);
$ret = $row['value'];
rg_cache_set("state::" . $var, $ret, RG_SOCKET_NO_WAIT);
}
rg_sql_free_result($res);
break;
}
if ($rg_state_debug)
rg_log_exit();
rg_prof_end("state_get");
return $ret;
}
/*
* Return a state as uint
*/
function rg_state_get_uint($db, $var)
{
$r = rg_state_get($db, $var);
if ($r === FALSE)
return FALSE;
return intval($r);
}
/*
* Set state
*/
function rg_state_set($db, $var, $value)
{
global $rg_state_debug;
rg_prof_start("state_set");
if ($rg_state_debug)
rg_log_enter("state_set: $var = $value");
$ret = FALSE;
while (1) {
$params = array("var" => $var, "value" => $value);
$old = rg_state_get($db, $var);
if ($old === FALSE)
break;
if (strcmp($old, $value) == 0)
return TRUE;
if ($old === "") {
$sql = "INSERT INTO state (var, value)"
. " VALUES (@@var@@, @@value@@)";
} else {
$sql = "UPDATE state SET value = @@value@@"
. " WHERE var = @@var@@";
}
$res = rg_sql_query_params($db, $sql, $params);
if ($res === FALSE) {
rg_state_set_error(rg_sql_error());
break;
}
rg_sql_free_result($res);
rg_cache_set("state::" . $var, $value, RG_SOCKET_NO_WAIT);
$ret = TRUE;
break;
}
if ($rg_state_debug)
rg_log_exit();
rg_prof_end("state_set");
return $ret;
}
?>
Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"
Clone this repository using HTTP(S):
git clone https://code.reversed.top/user/xaizek/rocketgit
Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@code.reversed.top/user/xaizek/rocketgit
You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a
pull request:
... clone the repository ...
... make some changes and some commits ...
git push origin master