sThread
[ class tree: sThread ] [ index: sThread ] [ all elements ]

Source for file Addr.php

Documentation is available at Addr.php

  1. <?php
  2. /**
  3.  * Parsing API of Host Address format<br>
  4.  * File: sThread/Addr.php
  5.  *
  6.  * @category    Network
  7.  * @package     sThread
  8.  * @subpackage  sThread_CORE
  9.  * @author      JoungKyun.Kim <http://oops.org>
  10.  * @copyright   (c) 2015 OOPS.ORG
  11.  * @license     BSD License
  12.  * @version     $Id$
  13.  * @link        http://pear.oops.org/package/sThread
  14.  * @filesource
  15.  */
  16.  
  17. /**
  18.  * include ePrint package
  19.  */
  20. require_once 'ePrint.php';
  21.  
  22. /**
  23.  * Host 주소 형식 파싱 API
  24.  *
  25.  * @category    Network
  26.  * @package     sThread
  27.  * @subpackage  sThread_CORE
  28.  * @author      JoungKyun.Kim <http://oops.org>
  29.  * @copyright   (c) 2015 OOPS.ORG
  30.  * @license     BSD License
  31.  * @link        http://pear.oops.org/package/sThread
  32.  */
  33. Class sThread_Address {
  34.     // {{{ (string) sThread_Address::parse ($buf)
  35.     /**
  36.      * sThread로 전달된 주소및 옵션의 유효성 검증 및 파싱
  37.      *
  38.      * @access public
  39.      * @return string 
  40.      * @param  string 
  41.      */
  42.     static function parse ($buf{
  43.         $extra '';
  44.         if preg_match ('/^(.+)\|(.+)$/'$buf$matches) ) {
  45.             $buf $matches[1];
  46.             $extra $matches[2];
  47.         }
  48.         $v explode (':'$buf);
  49.         $size count ($v);
  50.  
  51.         if $size || $size {
  52.             if ePrint::$debugLevel >= Vari::DEBUG1 )
  53.                 ePrint::ePrintf ('Error: Argument format is must \'host:port[:module]\' : ' $buf);
  54.             return false;
  55.         }
  56.  
  57.         $new_array[0$v[0];
  58.         switch ($size{
  59.             case :
  60.                 // 포트가 마지막으로 올 경우, 포트와 모듈의 자리 변경
  61.                 if is_numeric ($v[1]) ) {
  62.                     $new_array[1$v[1];
  63.                     $new_array[2$v[2];
  64.                 else {
  65.                     $new_array[1$v[2];
  66.                     $new_array[2$v[1];
  67.                 }
  68.  
  69.                 // 포트는 정확하고, 모듈 이름이 잘못되었을 경우
  70.                 // 보정해 주는 것이 맞을까??
  71.                 //if ( ! sThread_Module::port ($new_array[2]) )
  72.                 //    $new_array[2] = sThread_Module::type ($new_array[1]);
  73.                 break;
  74.             case :
  75.                 if is_numeric (trim ($v[1])) ) {
  76.                     // 포트가 주어졌을 경우 , 포트를 이용하여 어떤
  77.                     // 모듈인지를 확인
  78.                     $new_array[1$v[1];
  79.                     $new_array[2sThread_Module::type ($v[1]);
  80.                 else {
  81.                     // 포트가 주어지지 않았을 경우, 해당 모듈의 포트를
  82.                     // 사용
  83.                     $new_array[1sThread_Module::port ($v[1]);
  84.                     $new_array[2$v[1];
  85.                 }
  86.                 break;
  87.         }
  88.  
  89.         // 모듈이 지원되지 않는 형식이거나, 포트를 알 수 없을 경우, 에러
  90.         if $new_array[1|| $new_array[2{
  91.             if ePrint::$debugLevel >= Vari::DEBUG1 {
  92.                 if $new_array[1&& $new_array[2)
  93.                     ePrint::ePrintf ('Error: %s Unsupport module %s'array ($new_array[0]$new_array[2]));
  94.                 else if $new_array[1&& $new_array[2)
  95.                     ePrint::ePrintf ('Error: %s Unsupport port %d'array ($new_array[0]$new_array[1]));
  96.                 else
  97.                     ePrint::ePrintf ('Error: Argument format is must \'host:port[:module]\'');
  98.             }
  99.             return false;
  100.         }
  101.  
  102.         // 모듈을 지원하지 않는 경우 에러
  103.         if sThread_Module::port ($new_array[2]) ) {
  104.             if ePrint::$debugLevel >= Vari::DEBUG1 )
  105.                 ePrint::ePrintf ('Error: Can\'t find %s module'$new_array[2]);
  106.             return false;
  107.         }
  108.  
  109.         $r join (':'$new_array);
  110.         if $extra )
  111.             $r .= '|' $extra;
  112.  
  113.         return $r;
  114.     //  }}}
  115.  
  116.     // {{{ (object) sThread_Address::extraOption (&$type)
  117.     /**
  118.      * sThread로 주어진 주소값에서 옵션을 분리
  119.      *
  120.      * @access public
  121.      * @return stdClass 
  122.      * @param  string 
  123.      */
  124.     static function extraOption (&$type{
  125.         if preg_match ('/^(.+)\|(.+)$/'$type$matches) )
  126.             return false;
  127.  
  128.         $type $matches[1];
  129.         $buf explode (','$matches[2]);
  130.  
  131.         $r new stdClass;
  132.         foreach $buf as $val {
  133.             if preg_match ('/^(.+)=>(.+)/'$val$matches) )
  134.                 continue;
  135.  
  136.             $key trim ($matches[1]);
  137.             $r->$key trim ($matches[2]);
  138.         }
  139.  
  140.         return $r;
  141.     // }}}
  142. }
  143. ?>

Documentation generated on Tue, 14 May 2019 01:59:39 +0900 by phpDocumentor 1.4.4