Login   Register  
PHP Classes
elePHPant
Icontem

File: Netquery.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  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: 11 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;
      }
   }
}
?>