Source for file echo.php
Documentation is available at echo.php
* UDP protocol에 대한 검사는 정확성을 보장하지 못한다.
* @subpackage sThread_Module
* @author JoungKyun.Kim <http://oops.org>
* @copyright (c) 2015 OOPS.ORG
* @link http://pear.oops.org/package/sThread
* UDP protocol에 대한 검사는 정확성을 보장하지 못한다.
* @subpackage sThread_Module
* @author JoungKyun.Kim <http://oops.org>
* @copyright (c) 2015 OOPS.ORG
* @link http://pear.oops.org/package/sThread
* 이 변수의 값이 true로 셋팅이 되면, clear_session
* method를 만들어 줘야 한다. 반대로 false 상태에서는
* clear_session method가 존재하지 않아도 상관이 없다.
// {{{ (void) sThread_ECHO::__construct (void)
$this->port = &self::$port;
// {{{ (void) sThread_ECHO::init (void)
self::$clearsession = false;
// {{{ (int) sThread_ECHO::check_buf_status ($status)
* 현재 상태가 event read 상태인지 event write 상태인지
case self::ECHO_REQUEST :
return Vari::EVENT_READY_SEND;
case self::ECHO_RESPONSE :
return Vari::EVENT_READY_RECV;
return Vari::EVENT_READY_CLOSE;
return Vari::EVENT_UNKNOWN;
// {{{ (string) sThread_ECHO::call_status ($status, $call = false)
* 현재의 status(integer) 또는 현재 status의 handler 이름을
* @param boolean true로 설정했을 경우 현재 status의 handler
case self::ECHO_REQUEST :
case self::ECHO_RESPONSE :
$r = Vari::EVENT_UNKNOWN;
if ( $call !== false && $r !== Vari::EVENT_UNKNOWN )
// {{{ (boolean) sThread_ECHO::change_status (&$sess, $key)
* @param boolean 변경한 상태가 마지막 단계일 경우 false를
* @param stdClass sThread 세션 변수 reference
if ( $sess->status[$key] === self::ECHO_CLOSE )
// {{{ (void) sThread_ECHO::set_last_status (&$sess, $key)
* @param stdClass sThread 세션 변수 reference
$sess->status[$key] = self::ECHO_CLOSE;
// {{{ (boolean) sThread_ECHO::clear_session ($key) {
* session에서 사용한 변수(self::$sess)의 값을 정리한다.
* self::$clearsession == false 일 경우, clear_session method
* Handler는 call_status 메소드에 정의된 값들 중
* Vari::EVENT_UNKNOWN를 제외한 모든 status의 constant string을
* Handler 이름은 sThread_MODULE::call_status 메소드를
* handler는 다음의 구조를 가지며, 실제로 전송을 하거나 받는
* handler_name (&$ses, $key)
* write handler는 실제로 전송을 하지 않고 전송할
* handler_name (&$sess, $key, $recv)
* read handler의 반환값은 다음과 같이 지정을 해야 한다.
* false => 전송 받을 것이 남아 있음
* 이 의미는 sThread가 read handler에서 결과값에 따라
* true는 다음 단계로 전환을 하고, false는 현 status를
* 유지하며, null의 경우 connection을 종료를 한다.
// {{{ (string) sThread_ECHO::echo_request (&$sess, $key)
* @param stdClass 세션 object
// {{{ (boolean) sThread_ECHO::echo_response (&$sess, $key, $recv)
* @return bool|null결과 값은 다음과 같다.
* <li>true: 모든 전송이 완료</li>
* <li>false: 전송할 것이 남아 있음. readcallback에서
* false를 받으면 status를 유지한다.</li>
* <li>null: 전송 중 에러 발생</li>
* @param stdClass 세션 object
* @param mixed read callback에서 전송받은 누적 데이터
list ($host, $port, $type) = $sess->addr[$key];
$sess->recv[$key] .= $recv;
//if ( ! preg_match ('/data$/', $sess->recv[$key]) )
if ( $sess->recv[$key] != "echo data\r\n" )
if ( Vari::$result === true )
unset ($sess->recv[$key]);
|