- // Static functions
- static function create($crystal_filename)
- {
- if (($brisk_ser = @file_get_contents($crystal_filename)) == FALSE ||
- ($brisk = unserialize($brisk_ser)) == FALSE) {
- fprintf(STDERR, "NEW ROOM\n");
- $brisk = new Brisk($crystal_filename);
- }
- else {
- fprintf(STDERR, "ROOM FROM FILE\n");
- rename($crystal_filename, $crystal_filename.".old");
- }
-
- return $brisk;
- }
-
-
- function load_data()
- {
- GLOBAL $sess;
-
- do {
- if (($tok = @ftok(FTOK_PATH."/main", "C")) == -1) {
- log_main("ftok failed");
- break;
- }
-
- if (($shm_sz = sharedmem_sz($tok)) == -1) {
- log_main("shmop_open failed");
- }
-
- if ($shm_sz == -1)
- $shm_sz = SHM_DIMS_MIN;
-
- if ($shm = shm_attach($tok, $shm_sz)) {
- $brisk = @shm_get_var($shm, $tok); // CHECKED BELOW
-
- log_only("bri == ".($brisk == FALSE ? "FALSE" : "TRUE")." bri === ".($brisk === FALSE ? "FALSE" : "TRUE")." bri isset ".(isset($brisk) ? "TRUE" : "FALSE"));
- if (isset($brisk))
- log_only("bri count ".count($brisk));
-
- if ($brisk == FALSE) {
- log_only("INIT MAIN DATA");
- shm_detach($shm);
-
- $brisk = Brisk::create();
-
- log_shme("Brisk::create");
-
- if (Brisk::save_data($brisk) == FALSE)
- return FALSE;
-
- return $brisk;
- }
- $brisk->shm_sz = $shm_sz;
-
- shm_detach($shm);
-
- for ($i = 0 ; $i < MAX_PLAYERS ; $i++) {
- if (($brisk->user[$i] = User::load_data($i, FALSE)) == FALSE) {
- log_crit("User::load_data failed");
- break;
- }
- }
- if ($i < MAX_PLAYERS) {
- break;
- }
- }
-
- //
- // SHSPLIT: load users from the shared memory
- //
- return ($brisk);
- } while (0);
-
- return (FALSE);
- }
-
-
- function save_data_orig($brisk)
- {
- GLOBAL $sess;
-
- $shm = FALSE;
-
- // var_dump($brisk);
-
- if (($tok = @ftok(FTOK_PATH."/main", "C")) == -1)
- return (FALSE);
-
- while ($brisk->shm_sz < SHM_DIMS_MAX) {
- if (($shm = shm_attach($tok, $brisk->shm_sz)) == FALSE)
- break;
-
- // log_only("PUT_VAR DI ".strlen(serialize($brisk)));
- if (@shm_put_var($shm, $tok, $brisk) != FALSE) {
- shm_detach($shm);
- return (TRUE);
- }
- if (shm_remove($shm) === FALSE) {
- log_only("REMOVE FALLITA");
- break;
- }
- shm_detach($shm);
- $brisk->shm_sz += SHM_DIMS_DLT;
- }
-
- if ($shm)
- shm_detach($shm);
-
- return (FALSE);
- }