Source for file Vari.php
Documentation is available at Vari.php
* Common Variables of Single Thread Monitoring<br>
* @subpackage sThread_CORE
* @author JoungKyun.Kim <http://oops.org>
* @copyright (c) 2015 OOPS.ORG
* @link http://pear.oops.org/package/sThread
* sThread package에서 사용하는 공통 변수와 변수 관련
* @subpackage sThread_CORE
* @author JoungKyun.Kim <http://oops.org>
* @copyright (c) 2015 OOPS.ORG
* @link http://pear.oops.org/package/sThread
* Action의 결과를 반환 받을 것인지 여부
//const EVENT_CONNECT = 0;
const EVENT_ERROR_CLOSE = - 1;
const EVENT_READY_SEND = 0;
const EVENT_READY_RECV = 1;
const EVENT_SEND_DONE = 1;
const EVENT_READY_CLOSE = 1000;
const EVENT_UNKNOWN = false;
// {{{ (void) Vari::clear ($b = false)
* @param bool (optional) true로 설정하면 필요없는 member만
* 정리한다. false의 경우, Vari Class의 모든
static function clear ($b = false) {
self::objectUnset (self::$res);
self::objectUnset (self::$sess);
self::objectUnset (self::$time);
Vari::$res = (object) array (
Vari::$sess = (object) array (
'recv' => array (), // recieve data buffer
'send' => array (), // socket write complete flag. set 1, complete
'ctime' => array (), // Connection time. It can't believe! :-(
'ptime' => array (), // Processing time
'time' => array () // Total time
Vari::$time = (object) array (
// {{{ (void) Vari::objectUnset (&$r)
* 주어진 파라미터가 object 또는 array일 경우 소속
* 자기 자신을 unset 하지는 못하므로, 이 함수 호출 후에
* @param mixed unset할 array 또는 object
switch (($type = gettype ($r))) {
foreach ( $r as $key => $val ) {
switch (($subtype = gettype ($val))) {
if ( $type == 'array' ) {
self::objectUnset ($r[$key]);
self::objectUnset ($r->$key);
// {{{ (void) Vari::objectCopy (&$r, $obj)
* 2번째 파라미터에 주어진 값을 다른 메모리 주소에
switch (($type = gettype ($obj))) {
foreach ( $obj as $key => $val ) {
switch (($subtype = gettype ($val))) {
if ( $type == 'array' ) {
self::objectCopy ($r[$key], $val);
self::objectCopy ($r->$key, $val);
$r[$key] = self::varCopy ($val);
$r->$key = self::varCopy ($val);
$r = self::varCopy ($val);
// {{{ (mixed) Vari::varCopy ($var)
* 입력된 값을 다른 주소의 메모리에 copy하여 반환
// {{{ (string) Vari::chkTime ($o, $n)
* @param string 먼저 측정된 microtime() 의 결과값
* @param string 나중에 측정된 microtime() 의 결과값
* @param int 보정할 millisencond 값
static function chkTime ($o, $n, $t = 0) {
$o = self::hmicrotime ($o);
$n = self::hmicrotime ($n);
#echo "############## $o\n";
#echo "############## $n\n";
#echo "############## $t\n";
#echo "############## $r\n";
return sprintf ('%.3f msec', $r * 1000);
// {{{ (string) Vari::timeCalc ($a)
if ( preg_match ('/(.*)[\s]+msec/', $t, $matches) )
$time += $matches[1] * 1000;
$time += $matches[1] * 1000000;
if ( $time >= 1000000 ) {
return sprintf ('%.3f %s', $time / $div, $unit);
// {{{ (string) Vari::binaryDecode ($bin, $ret = false)
* binary data를 hex data로 변환
* @param string binary data
* @param boot (optional) true로 설정하면 결과값을 반환한다.
for ( $i= 0; $i< $len; $i++ ) {
$r .= ( ($i % 16) == 0 ) ? "\n" : ' ';
// {{{ (string) Vari::objectInit (&$obj)
* 주어진 변수가 empty이거나 object가 아닐경우
// {{{ private (float) Vari::hmicrotime ($t)
* microtime 의 결과값을 sec로 보정
* @param string microtime() 의 결과 값
static private function hmicrotime ($t) {
if ( preg_match ('/^([^ ]+)[ \t](.+)/', $t, $matches) )
return (float) $matches[2] + (float) $matches[1];
|