added saxdb & continued BotLoader
authorpk910 <philipp@zoelle1.de>
Wed, 27 Jul 2011 22:41:06 +0000 (00:41 +0200)
committerpk910 <philipp@zoelle1.de>
Wed, 27 Jul 2011 22:41:06 +0000 (00:41 +0200)
BotLoader/Bot.class.php
BotLoader/BotLoader.class.php
BotLoader/saxdb.class.php [new file with mode: 0644]
BotLoader/saxdb.php [new file with mode: 0644]
Uplink/Uplink.class.php
tmp/tmpdir.txt [new file with mode: 0644]

index 0a3c506b3634d2dcfb4758c8648fa3de24d5ae95..1fdbc416ff4761c853cc5a752e57a7f80e444d1e 100644 (file)
@@ -39,6 +39,14 @@ class Bot {
        public function loop() {
        
        }
+       
+       public function writeDB() {
+               
+       }
+       
+       public function readDB($value) {
+       
+       }
 
 }
 
index 2b89cb392a6e60d975051c826587c523abb61125..df06eeaed4d1f137aeb63ff3b6cecf3f5f45c5c6 100644 (file)
  *
  */
 require_once("Bot.class.php");
+require_once("saxdb.class.php");
 
 class BotLoader {
        private $uplink;
+       private $saxdb;
+       private $botdb;
+       private $loadedBots = array();
        
        public function __construct($uplink) {
                $this->uplink = $uplink;
+               $this->saxdb = new saxdb();
+               $this->saxdb->loadDB("php_p10.db");
+               $this->botdb = $this->saxdb->getSection("BotLoader");
        }
        
        public function loadBots() {
+               if(array_key_exists("bots", $this->botdb) && is_array($this->botdb["bots"])) {
+                       foreach($this->botdb["bots"] as $name => $botfile) {
+                               $this->loadBot($name, $botfile);
+                       }
+               } else {
+                       $this->botdb["bots"] = array();
+               }
+       }
        
+       private function loadBot($name, $botfile) {
+               if(array_key_exists($name, $this->loadedBots)) return;
+               //load bot
+               if(!array_key_exists($name, $this->botdb["bots"])) {
+                       $this->botdb["bots"][$name] = $botfile;
+               }
        }
        
 }
diff --git a/BotLoader/saxdb.class.php b/BotLoader/saxdb.class.php
new file mode 100644 (file)
index 0000000..15b36c2
--- /dev/null
@@ -0,0 +1,172 @@
+<?php
+/********************************* PHP-P10 ******************************
+ *    P10 uplink class by pk910   (c)2011 pk910                         *
+ ************************************************************************
+ *                          Version 2 (OOP)                             *
+ *                                                                      *
+ * PHP-P10 is free software; you can redistribute it and/or modify      *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or    *
+ * (at your option) any later version.                                  *
+ *                                                                      *
+ * This program is distributed in the hope that it will be useful,      *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of       *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the        *
+ * GNU General Public License for more details.                         *
+ *                                                                      *
+ * You should have received a copy of the GNU General Public License    *
+ * along with PHP-P10; if not, write to the Free Software Foundation,   *
+ * Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.       *
+ *                                                                      *
+ ************************************************************************
+ * 
+ *  BotLoader/saxdb.class.php
+ *
+ * Simple PHP P10 database.
+ *
+ */
+
+class saxdb {
+       const PARSER_ISSTRING  = 0x0001;
+       const PARSER_ISESCAPED = 0x0002;
+       const PARSER_ISBLOCK   = 0x0004;
+       const PARSER_EXPECT_VALUE = 0x0008;
+       const PARSER_STRING_LIST  = 0x0010;
+       private $database = array();
+       
+       public function loadDB($name) {
+               if(file_exists($name)) {
+                       $fp = fopen($name, "r");
+                       $db = fread($fp, filesize($name));
+                       fclose($fp);
+                       $this->database = $this->parseDB($db);
+               }
+       }
+       
+       public function writeDB($name) {
+               $fp = fopen($name, "w");
+               $db = $this->serializeDB($this->database);
+               fwrite($fp, $db);
+               fclose($fp);
+       }
+       
+       public function getSection($name) {
+               if(array_key_exists($name, $this->database)) {
+                       return $this->database[$name];
+               } else {
+                       return array();
+               }
+       }
+       
+       public function setSection($name, $value) {
+               $this->database[$name] = $value;
+       }
+       
+       private function parseDB($db) {
+               $parserflags = 0;
+               $openblocks = 0;
+               $buffer = "";
+               $cache = array();
+               $output = array();
+               for($i = 0; $i < strlen($db); $i++) {
+                       if(($parserflags & self::PARSER_ISBLOCK) && $db[$i] != "{" && $db[$i] != "}") {
+                               $buffer .= $db[$i];
+                               continue;
+                       }
+                       if(($parserflags & self::PARSER_ISSTRING) && $db[$i] != "\"") {
+                               $buffer .= $db[$i];
+                               continue;
+                       }
+                       if($parserflags & self::PARSER_ISESCAPED) {
+                               $buffer .= $db[$i];
+                               $parserflags &= ~self::PARSER_ISESCAPED;
+                               continue;
+                       }
+                       switch($db[$i]) {
+                               case "\\":
+                                       $parserflags |= self::PARSER_ISESCAPED;
+                                       break;
+                               case "\"":
+                                       if($parserflags & self::PARSER_ISSTRING) {
+                                               $parserflags &= ~self::PARSER_ISSTRING;
+                                               if($parserflags & self::PARSER_STRING_LIST) {
+                                                       $cache['list'][] = $buffer;
+                                               } else if($parserflags & self::PARSER_EXPECT_VALUE) {
+                                                       //we've got a full entry
+                                                       $output[$cache['name']] = $buffer;
+                                                       $parserflags &= ~self::PARSER_EXPECT_VALUE;
+                                               } else {
+                                                       //we've only got the name of the next entry
+                                                       $cache['name'] = $buffer;
+                                                       $parserflags |= self::PARSER_EXPECT_VALUE;
+                                               }
+                                       } else {
+                                               $buffer = ""; //clear the buffer
+                                               $parserflags |= self::PARSER_ISSTRING;
+                                       }
+                                       break;
+                               case "{":
+                                       //block (it must be a value)
+                                       if($parserflags & self::PARSER_ISBLOCK) {
+                                               $openblocks++;
+                                               $buffer .= $db[$i];
+                                       } else {
+                                               $parserflags |= self::PARSER_ISBLOCK;
+                                               $buffer = "";
+                                       }
+                                       break;
+                               case "}":
+                                       if($parserflags & self::PARSER_ISBLOCK) {
+                                               $openblocks--;
+                                               if($openblocks == -1) {
+                                                       $parserflags &= ~self::PARSER_ISBLOCK;
+                                                       if($parserflags & self::PARSER_EXPECT_VALUE) {
+                                                               $output[$cache['name']] = $this->parseDB($buffer);
+                                                               $parserflags &= ~self::PARSER_EXPECT_VALUE;
+                                                       }
+                                               } else {
+                                                       $buffer .= $db[$i];
+                                               }
+                                       }
+                                       break;
+                               case "(":
+                                       if(!($parserflags & self::PARSER_STRING_LIST)) {
+                                               $cache['list'] = array();
+                                               $parserflags |= self::PARSER_STRING_LIST;
+                                       }
+                                       break;
+                               case ")":
+                                       if(($parserflags & self::PARSER_STRING_LIST)) {
+                                               $parserflags &= ~self::PARSER_STRING_LIST;
+                                               if($parserflags & self::PARSER_EXPECT_VALUE) {
+                                                       $output[$cache['name']] = $cache['list'];
+                                                       $parserflags &= ~self::PARSER_EXPECT_VALUE;
+                                               }
+                                       }
+                                       break;
+                               default:
+                                       $buffer .= $db[$i];
+                                       break;
+                       }
+               }
+               return $output;
+       }
+       
+       private function serializeDB($db, $dbstring = "") {
+               foreach($db as $name => $value) {
+                       if(!is_array($value) && !is_string($value) && !is_numeric($value)) continue;
+                       $dbstring .= "\"".str_replace("\"","\\\"", $name)."\"";
+                       if(is_array($value)) {
+                               $dbstring .= "{";
+                               $dbstring .= $this->serializeDB($value, $dbstring);
+                               $dbstring .= "}";
+                       } else {
+                               $dbstring .= "\"".str_replace("\"","\\\"", $value)."\"";
+                       }
+               }
+               return $dbstring;
+       }
+       
+}
+
+?>
\ No newline at end of file
diff --git a/BotLoader/saxdb.php b/BotLoader/saxdb.php
new file mode 100644 (file)
index 0000000..f60d65e
--- /dev/null
@@ -0,0 +1,160 @@
+<?php
+/********************************* PHP-P10 ******************************
+ *    P10 uplink class by pk910   (c)2011 pk910                         *
+ ************************************************************************
+ *                          Version 2 (OOP)                             *
+ *                                                                      *
+ * PHP-P10 is free software; you can redistribute it and/or modify      *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or    *
+ * (at your option) any later version.                                  *
+ *                                                                      *
+ * This program is distributed in the hope that it will be useful,      *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of       *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the        *
+ * GNU General Public License for more details.                         *
+ *                                                                      *
+ * You should have received a copy of the GNU General Public License    *
+ * along with PHP-P10; if not, write to the Free Software Foundation,   *
+ * Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.       *
+ *                                                                      *
+ ************************************************************************
+ * 
+ *  BotLoader/saxdb.class.php
+ *
+ * Simple PHP P10 database.
+ *
+ */
+
+class saxdb {
+       const PARSER_ISSTRING  = 0x0001;
+       const PARSER_ISESCAPED = 0x0002;
+       const PARSER_ISBLOCK   = 0x0004;
+       const PARSER_EXPECT_VALUE = 0x0008;
+       const PARSER_STRING_LIST  = 0x0010;
+       private $database = array();
+       
+       public function loadDB($name) {
+               if(file_exists($name)) {
+                       $fp = fopen($name, "r");
+                       $db = fread($fp, filesize($name));
+                       fclose($fp);
+                       $this->database = $this->parseDB($db);
+               }
+       }
+       
+       public function writeDB($name) {
+               $fp = fopen($name, "w");
+               $db = $this->serializeDB($this->database);
+               fwrite($fp, $db);
+               fclose($fp);
+       }
+       
+       private function parseDB($db) {
+               $parserflags = 0;
+               $openblocks = 0;
+               $buffer = "";
+               $cache = array();
+               $output = array();
+               for($i = 0; $i < strlen($db); $i++) {
+                       if(($parserflags & self::PARSER_ISBLOCK) && $db[$i] != "{" && $db[$i] != "}") {
+                               $buffer .= $db[$i];
+                               continue;
+                       }
+                       if(($parserflags & self::PARSER_ISSTRING) && $db[$i] != "\"") {
+                               $buffer .= $db[$i];
+                               continue;
+                       }
+                       if($parserflags & self::PARSER_ISESCAPED) {
+                               $buffer .= $db[$i];
+                               $parserflags &= ~self::PARSER_ISESCAPED;
+                               continue;
+                       }
+                       switch($db[$i]) {
+                               case "\\":
+                                       $parserflags |= self::PARSER_ISESCAPED;
+                                       break;
+                               case "\"":
+                                       if($parserflags & self::PARSER_ISSTRING) {
+                                               $parserflags &= ~self::PARSER_ISSTRING;
+                                               if($parserflags & self::PARSER_STRING_LIST) {
+                                                       $cache['list'][] = $buffer;
+                                               } else if($parserflags & self::PARSER_EXPECT_VALUE) {
+                                                       //we've got a full entry
+                                                       $output[$cache['name']] = $buffer;
+                                                       $parserflags &= ~self::PARSER_EXPECT_VALUE;
+                                               } else {
+                                                       //we've only got the name of the next entry
+                                                       $cache['name'] = $buffer;
+                                                       $parserflags |= self::PARSER_EXPECT_VALUE;
+                                               }
+                                       } else {
+                                               $buffer = ""; //clear the buffer
+                                               $parserflags |= self::PARSER_ISSTRING;
+                                       }
+                                       break;
+                               case "{":
+                                       //block (it must be a value)
+                                       if($parserflags & self::PARSER_ISBLOCK) {
+                                               $openblocks++;
+                                               $buffer .= $db[$i];
+                                       } else {
+                                               $parserflags |= self::PARSER_ISBLOCK;
+                                               $buffer = "";
+                                       }
+                                       break;
+                               case "}":
+                                       if($parserflags & self::PARSER_ISBLOCK) {
+                                               $openblocks--;
+                                               if($openblocks == -1) {
+                                                       $parserflags &= ~self::PARSER_ISBLOCK;
+                                                       if($parserflags & self::PARSER_EXPECT_VALUE) {
+                                                               $output[$cache['name']] = $this->parseDB($buffer);
+                                                               $parserflags &= ~self::PARSER_EXPECT_VALUE;
+                                                       }
+                                               } else {
+                                                       $buffer .= $db[$i];
+                                               }
+                                       }
+                                       break;
+                               case "(":
+                                       if(!($parserflags & self::PARSER_STRING_LIST)) {
+                                               $cache['list'] = array();
+                                               $parserflags |= self::PARSER_STRING_LIST;
+                                       }
+                                       break;
+                               case ")":
+                                       if(($parserflags & self::PARSER_STRING_LIST)) {
+                                               $parserflags &= ~self::PARSER_STRING_LIST;
+                                               if($parserflags & self::PARSER_EXPECT_VALUE) {
+                                                       $output[$cache['name']] = $cache['list'];
+                                                       $parserflags &= ~self::PARSER_EXPECT_VALUE;
+                                               }
+                                       }
+                                       break;
+                               default:
+                                       $buffer .= $db[$i];
+                                       break;
+                       }
+               }
+               return $output;
+       }
+       
+       private function serializeDB($db, $dbstring = "") {
+               foreach($db as $name => $value) {
+                       if(!is_array($value) && !is_string($value) && !is_numeric($value)) continue;
+                       $dbstring .= "\"".str_replace("\"","\\\"", $name)."\"";
+                       if(is_array($value)) {
+                               $dbstring .= "{";
+                               $dbstring .= $this->serializeDB($value, $dbstring);
+                               $dbstring .= "}";
+                       } else {
+                               $dbstring .= "\"".str_replace("\"","\\\"", $value)."\"";
+                       }
+               }
+               return $dbstring;
+       }
+       
+}
+
+?>
\ No newline at end of file
index 524d392c1084db3e72e6e8cb632c43d34e807a98..d7d40fa86b3e4100ee10a4a42f4bf4907e111c89 100644 (file)
@@ -443,6 +443,7 @@ class Uplink {
                $users = explode(",",$userstr);
                $isop = false; $isvoice = false;
                foreach($users as $user) {
+                       if($user == "") continue;
                        $uexp = explode(":", $user);
                        if(strlen($uexp[0]) != 5) {
                                trigger_error("burst parse error: '".$uexp[0]."' is not an user numeric.", E_USER_ERROR);
diff --git a/tmp/tmpdir.txt b/tmp/tmpdir.txt
new file mode 100644 (file)
index 0000000..c9a7f7b
--- /dev/null
@@ -0,0 +1 @@
+temp dir for bot classes
\ No newline at end of file