PHP Classes

File: Netquery.php

Recommend this page to a friend!
  Classes of Zachary Shaver   Netquery   Netquery.php   Download  
File: Netquery.php
Role: Class source
Content type: text/plain
Description: Netquery. The whole kit and kaboodle.
Class: Netquery
Establish a network connection to exchange data
Author: By
Last change:
Date: 20 years ago
Size: 5,676 bytes
 

Contents

Class file image Download
<?php
/*+----------------------------------------------------------+
  | Generic Net Query Class |
  | By Zachary Shaver |
  | Copyright (c) 2003 Zachary Shaver |
  | Email: edward_styles@hotmail.com |
  +----------------------------------------------------------+
  | Email bugs/suggestions to es_anubis@cogeco.ca |
  +----------------------------------------------------------+
  | This script has been created and released under |
  | the GNU GPL and is free to use and redistribute |
  | only if this copyright statement is not removed |
  +----------------------------------------------------------+*/

/*+----------------------------------------------------------+
  |Example of use: |
  +----------------------------------------------------------+
  |This is an example using the reusable query() |
  |In this example we are getting information from a game |
  |server, in this example "Star Trek Voyager: Elite Force" |
  |It is favourable to use this method if you are reusing |
  |the same ports/addresses/commands. |
  +----------------------------------------------------------+
  |//initialize the class |
  |$nq = new netquery; |
  |//set transport method to udp |
  |$nq->method = 'udp'; |
  |//set address of host, IP/hostname |
  |$nq->addr = '127.0.0.1'; |
  |//set port to connect to |
  |$nq->port = '27960'; |
  |//set the garbage filter, to filter out stuff we dont want|
  |$nq->garbage = '˙˙˙˙statusResponse\n\\\\|\^[0-9]'; |
  |//set the data we are sending to the host |
  |$nq->input = '˙˙˙˙getstatus'; |
  |//execute the query and store results to variable. |
  |$result = $nq->query(); |
  +----------------------------------------------------------+*/

/*+----------------------------------------------------------+
  |Notes: |
  | Oh... all errors/problems are stored |
  |in the array $errors[] within the class. |
  |might want to do a quick print_r($nq->errors) or something|
  +----------------------------------------------------------+*/
class netquery
{
   var
$connection;
   var
$method = '';
   var
$addr = '';
   var
$port = '';
   var
$garbage = '';
   var
$input = '';
   var
$output = '';
   var
$errors = array();

   function
netquery()
   {
     
$this->method = 'tcp';
     
$this->garbage = '';
   }
  
  
// Try connecting to the network server.
  
function connect()
   {
      if(
$this->verify())
      {
        
$host = $this->method . '://' . $this->addr;
        
$this->connection = @fsockopen($host,$this->port);
        
stream_set_timeout($this->connection,1);
         if(
$this->connection)
         {
            return
true;
         }
         else
         {
           
$this->errors[] = 'UNABLE_TO_CONNECT';
            return
false;
         }
      }
      else
      {
         return
false;
      }
   }

  
// Attempt the query on the network server.
  
function query()
   {
      if(
$this->connect())
      {
        
fwrite ($this->connection,$this->input);
        
$this->output = fread($this->connection,1);
         if(!empty(
$this->output))
         {
            do
            {
              
$status_pre = socket_get_status($this->connection);
              
$this->output .= fread($this->connection,1);
              
$status_post = socket_get_status($this->connection);
            } while (
$status_pre['unread_bytes'] != $status_post['unread_bytes']);
         }
        
$this->disconnect();
        
$this->output = trim(str_replace("\0",chr(253),$this->output),"\n\r");
         if (!empty(
$this->garbage))
         {
           
$this->output = ereg_replace ($this->garbage, "", $this->output);
         }
        
$this->output = str_replace (chr(253), "\0", $this->output);
         return
$this->output;
      }
      else
      {
         return
'';
      }
   }

  
// Disconnect from the network server.
  
function disconnect()
   {
     
fclose($this->connection);
      return
true;
   }

  
// Reset all variables so we can re-use the class without worrying.
  
function reset()
   {
     
$this->method = '';
     
$this->addr = '';
     
$this->port = '';
     
$this->input = '';
     
$this->output = '';
     
$this->garbage = '';
      return
true;
   }

  
// Verify that all the information required for
   // successful query is here.
  
function verify()
   {
      if(
$this->method == '') $this->errors[] = 'NO_METHOD';
      if(
$this->addr == '') $this->errors[] = 'NO_ADDR';
      if(
$this->port == '') $this->errors[] = 'NO_PORT';
      if(
$this->input == '') $this->errors[] = 'NO_INPUT';
      if(
strlen($this->input)>256) $this->errors[] = 'COMMAND_TOO_LONG';
      if(
$this->method!='' && $this->addr!='' && $this->port!='' && $this->input!='')
      {
         return
true;
      }
      else
      {
        
$this->errors[] = 'UNABLE_TO_VERIFY';
         return
false;
      }
   }
}
?>