<?

class TR_00000 
{    
    var 
$conn;                // 게이트웨이 connection
    
var $packet;                // 패킷

    
var $trcode        '00000';    // TRCODE

    
var $rtcd;                // tr응답결과(연속여부, 에러여부, 메세지코드)
    
var $contkey_in        '';        // 입력연속키
    
var $contkey_out    '';        // 아웃연속키

    
var $InData$OutData$ArrData;    // 파싱한 결과물 들어가는 어레이
    
var $ErrMsg        '';        // tr처리중에 발생한 에러 메시지 저장공간
        
    
var $inblock_size    0;     // InBlock 사이즈
    
var $outblock_size    0;    // OutBlock 사이즈
    
var $arrblock_size    0;    // ArrBlock 사이즈
    
var $tot_size        0;    // InBlock+OutBlock+ArrBlock

    
var $offset_arrblock    0;
    
    var 
$inblock_cnt    0;    // InBlock 레코드 카운트
    
var $outblock_cnt    0;    // OutBlock 레코드 카운트
    
var $arrblock_cnt    0;    // ArrBlock 레코드 카운트
    
    
var $arr_record_size    0;    // 개별레코드 사이즈
    
var $arr_cnt        0;    // 레코드 갯수
    
var $arr_ret_cnt    0;    // 응답받은 레코드 갯수

    
var $arr_check_pos    = -1;    // 연속부분에 껍데기 레코드인지 체크하는 필드 인덱스
    
var $arr_contkey_idx    = -1;    // 인부분에 연속키 인덱스, 다음번에 tr올릴때 필요해
        
    
var $geja        '';

    
// 생성자
    
function TR_00000($conn){
        
$this->conn $conn;
    }

    
// 디버깅용
    
function debug(){
        echo 
'<pre>';        
        
var_dump ($this->OutData);
        
var_dump ($this->ArrData);
        
var_dump ($this->rtcd);
        echo 
'</pre>';
    }
    
    
// 디버깅용
    
function debug_all(){
        echo 
'<pre>';
        
var_dump ($this);
        echo 
'</pre>';
    }

    
// 패킷을 홀라당 보여줘
    
function dump(){
        
zeroin_dump_packet($this->packet);
    }
    
    
/***
    실적으로 호출이 일어나는 부분
    하는일이 좀 많은데,, 세분화도 가능해..
    
    1) 인데이터 체크
    2) 환경체크
    3) 콜
    4) 응답 결과 분석(정상처리 됐나..)
    5) 아웃 블럭 파싱
    6) 어레이 블럭 파싱
    ***/
    
function call(){

        if(
$this->validate()) { //입력값이 바른가 체크
            
if(!is_resource($this->conn)){ // 게이트웨이 연결이 바른가 체크
                
$this->ErrMsg '모의투자 주문서버 연결 실패';            
            }else{
                
//요청을 해볼까나
                
$rtn zeroin_send_recv($this->conn$this->packet);
                if(!
$rtn){
                    
// 전송중에 오류 발생 깨갱...
                    
$this->ErrMsg '모의투자 주문서버 전송 실패';
                }
            }
        }
        
// tr처리가 잘되었을까?
        
$this->rtcd zeroin_get_alldata($this->packet);
        
        
// outblock 파싱
        // 키셋팅은 변수명으로도 가능하고
        // idx로도 가능하지만,,, 난 그냥 변수명으로 할란다.
        // 알아먹기가 쉽다.
        
for($i 0$i $this->outblock_cnt$i++) {
            if(
$this->OutBlock[$i][2] == 's')
                
$rtn zeroin_read_string($this->packet,
                            
$this->OutBlock[$i][4]+$this->inblock_size,
                            
$this->OutBlock[$i][3]);
            else if(
$this->OutBlock[$i][2] == 'd')
                
$rtn zeroin_read_double($this->packet,
                            
$this->OutBlock[$i][4]+$this->inblock_size,
                            
$this->OutBlock[$i][3]);    
            else if(
$this->OutBlock[$i][2] == 'i')
                
$rtn zeroin_read_int($this->packet,
                            
$this->OutBlock[$i][4]+$this->inblock_size,
                            
$this->OutBlock[$i][3]);        
            
            
$this->OutData[$this->OutBlock[$i][5]] = $rtn ;
        }

        
// 에러를 만나면,,, 어레이 파싱은 하지 말아부러라..
        
if($this->rtcd['rtcode'] == '1') return;

        
// 연속키를 퍼오자
        
if($this->arr_contkey_idx >= 0) {
            
$this->contkey_out zeroin_read_string($this->packet,
                        
$this->InBlock[$this->arr_contkey_idx][4],
                        
$this->InBlock[$this->arr_contkey_idx][3]);                        
        }
        
        
// arrblock 파싱
        
$cal_offset $this->offset_arrblock;        
        for(
$j 0$j $this->arr_cnt$j++) {            

            if(
$this->arr_check_pos >= 0) {
                
$rtn zeroin_read_string($this->packet,
                            
$this->ArrBlock[$this->arr_check_pos][4]+ $cal_offset,
                            
$this->ArrBlock[$this->arr_check_pos][3]);

                if(
$rtn[0] == ' ') break;
            }
            
            for(
$i 0$i $this->arrblock_cnt$i++) {                        
                if(
$this->ArrBlock[$i][2] == 's')
                    
$rtn zeroin_read_string($this->packet,
                            
$this->ArrBlock[$i][4]+ $cal_offset,
                            
$this->ArrBlock[$i][3]);
                else if(
$this->ArrBlock[$i][2] == 'd')
                    
$rtn zeroin_read_double($this->packet,
                            
$this->ArrBlock[$i][4]+ $cal_offset,
                            
$this->ArrBlock[$i][3]);    
                else if(
$this->ArrBlock[$i][2] == 'i')
                    
$rtn zeroin_read_int($this->packet,
                            
$this->ArrBlock[$i][4]+ $cal_offset,
                            
$this->ArrBlock[$i][3]);        
                
                
$this->ArrData[$this->arr_ret_cnt][$this->ArrBlock[$i][5]] = $rtn;        
            }
            
$cal_offset += $this-> arr_record_size;
            
$this->arr_ret_cnt++;
        }
        
    }

    
// 인데이터 셋팅.
    
function set(){
    }

    
// 인데이터 셋후에 패킷을 빌드한다.
    
function ready(){
    }

    
// 입력받은 값을 체크해보는거.. 쓸데없이 게이트웨이한테 일주지 말자.
    
function validate(){
        return 
true;
    }
    
    
// 받은 데이터를 뿌린다.
    
function output(){
        echo 
"메시지 : " $this->rtcd['msg1'] . $this->ErrMsg "</td></tr>";
    }

    
}