philips-cnc6600-interpreter/src/State/Persister.php

50 lines
959 B
PHP

<?php
namespace State;
use Machine\CNC6600;
use RuntimeException;
class Persister
{
private const WORKING_DIR = __DIR__ . '/../../var';
public function persist(string $identifier, CNC6600 $CNC6600): void
{
$filename = $this->getFilename($identifier);
$state = serialize($CNC6600);
$state = gzcompress($state, 6);
@file_put_contents($filename, $state);
}
public function load(string $identifier): CNC6600
{
$filename = $this->getFilename($identifier);
$this->guardStateFileDoesNotExist($filename);
$state = file_get_contents($filename);
$state = gzuncompress($state);
return unserialize($state);
}
public function getFilename(string $identifier): string
{
$identifier = md5("machine_state_$identifier");
return self::WORKING_DIR . "/$identifier";
}
private function guardStateFileDoesNotExist(string $filename): void
{
if (!file_exists($filename)) {
throw new RuntimeException('State not found');
}
}
}