mirror of
https://port.numenaute.org/aleajactaest/khanat-opennel-code.git
synced 2024-12-17 14:48:42 +00:00
124 lines
2.4 KiB
PHP
124 lines
2.4 KiB
PHP
<?php
|
|
|
|
class PdrUtil {
|
|
/**
|
|
* Shard seems to be saving guild file every few seconds.
|
|
* Increase cache valid timer a bit.
|
|
*
|
|
* @const int cache expire in seconds
|
|
*/
|
|
const CACHE_MIN_TIME = 15;
|
|
|
|
/**
|
|
* Where does shard keep it's character, guild files
|
|
*
|
|
* @var string
|
|
*/
|
|
private $_shard_save;
|
|
|
|
/**
|
|
* Directory where sheet_id.bin is
|
|
*
|
|
* @var string
|
|
*/
|
|
private $_sheetid_dir;
|
|
|
|
/**
|
|
* Directory for extracted character, guild xml files
|
|
*
|
|
* @var string
|
|
*/
|
|
private $_unpack_dir;
|
|
|
|
/**
|
|
* Public Constructor for PdrUtil
|
|
*
|
|
* @param string $save_path
|
|
* @param string $unpack temp unpack directory, default is /tmp/
|
|
*/
|
|
function __construct($shard_save, $sheetid_dir, $unpack = '/tmp/'){
|
|
$this->_shard_save = $shard_save;
|
|
$this->_sheetid_dir = $sheetid_dir;
|
|
|
|
$this->_unpack_dir = $unpack;
|
|
}
|
|
|
|
function setShardSaveDirectory($dir){
|
|
$this->_shard_save = $dir;
|
|
}
|
|
function getShardSaveDirectory(){
|
|
return $this->_shard_save;
|
|
}
|
|
|
|
function setSheetIdDirectory($dir){
|
|
$this->_sheetid_dir = $dir;
|
|
}
|
|
function getSheetIdDirectory(){
|
|
return $this->_sheetid_dir;
|
|
}
|
|
|
|
function setUnpackDirectory($dir){
|
|
$this->_unpack_dir = $dir;
|
|
}
|
|
function getUnpackDirectory(){
|
|
return $this->_unpack_dir;
|
|
}
|
|
|
|
/**
|
|
* Extract $pdr file to $xml file
|
|
*
|
|
* @param string $pdr
|
|
* @param string $xml
|
|
* @return bool
|
|
*/
|
|
function extract($pdr, $xml){
|
|
if(!file_exists($pdr)){
|
|
return false;
|
|
}
|
|
|
|
$pdr_mtime = filemtime($pdr);
|
|
if(file_exists($xml)){
|
|
$xml_mtime = filemtime($xml);
|
|
}else{
|
|
$xml_mtime = 0;
|
|
}
|
|
|
|
$diff = $pdr_mtime - $xml_mtime;
|
|
if($diff > self::CACHE_MIN_TIME){
|
|
// remove expired xml file
|
|
@unlink($xml);
|
|
|
|
// change working directory to unpack directory to keep pdr_util log file in one place
|
|
$pwd = getcwd();
|
|
chdir($this->_unpack_dir);
|
|
|
|
// run pdr_util
|
|
$cmd = sprintf(' -s%s -x -o%s %s', $this->_sheetid_dir, $xml, $pdr);
|
|
exec(CMD_PDR_UTIL.' '.$cmd);
|
|
|
|
// change working directory back what it was before
|
|
chdir($pwd);
|
|
}
|
|
|
|
// if pdr_util failed, then there is no xml file
|
|
return file_exists($xml);
|
|
}
|
|
|
|
/**
|
|
* @param string $fname
|
|
* @return string ShardSaveDirectory + fname
|
|
*/
|
|
function getSaveFileName($fname){
|
|
return $this->getShardSaveDirectory().'/'.$fname;
|
|
}
|
|
|
|
/**
|
|
* @param string $fname
|
|
* return string TempDirectory + $fname
|
|
*/
|
|
function getXmlFileName($fname){
|
|
return $this->getUnpackDirectory().'/'.$fname;
|
|
}
|
|
|
|
}
|
|
|