added EventHandler idea (not implemented, yet)
[PHP-P10.git] / Uplink / Uplink.class.php
index 7cd1d77b601a70a77abdb22ce5bc359c45f7e50e..b49c3f6ef763fb90437d02138ef9c87eb7393513 100644 (file)
  *
  * void setValidateServer(String $name, String $password)
  *     sets additional security relevant information about the remote server.
+ *
+ * void setEventHandler(EventHandler $event_handler)
+ *     sets the EventHandlder
  */
 require_once("Client.class.php");
 require_once("Numerics.class.php");
 require_once("P10Formatter.class.php");
 require_once("P10_Server.class.php");
 require_once("P10_User.class.php");
+require_once("P10_Channel.class.php");
 require_once("P10_ModeSets.class.php");
 
 class Uplink {
@@ -205,6 +209,9 @@ class Uplink {
                        case "Q":
                                $this->recv_quit($from, $arguments);
                                break;
+                       case "B":
+                               $this->recv_burst($from, $arguments);
+                               break;
                //default
                        default:
                                //unknown cmd
@@ -335,6 +342,50 @@ class Uplink {
                $user->quit($args[0]);
        }
        
+       private function recv_burst($from, $args) {
+               $name = $args[0];
+               $create_time = $args[1];
+               $channel = P10_Channel::getChannelByName($name);
+               if($channel == null)
+                       $channel = new P10_Channel($name);
+               $modes = $channel->getModes();
+               $userstr = $args[count($args)-1];
+               $modeparamcount = count($args)-3;
+               if($userstr[0] == "%") {
+                       //ban list
+                       $banlist = explode(" ", substr($userstr, 1));
+                       foreach($banlist as $ban) {
+                               //TODO: save bans
+                       }
+                       $userstr = $args[count($args)-2];
+                       $modeparamcount--;
+               }
+               $users = explode(",",$userstr);
+               $isop = false; $isvoice = false;
+               foreach($users as $user) {
+                       $uexp = explode(":", $user);
+                       if(strlen($uexp[0]) != 5) {
+                               trigger_error("burst parse error: '".$uexp[0]."' is not an user numeric.", E_USER_ERROR);
+                               return;
+                       }
+                       if(count($uexp) > 1) {
+                               $isop = false;
+                               $isvoice = false;
+                               for($i = 0; $i < strlen($uexp[1]); $i++) {
+                                       if($uexp[1][0] == "@") $isop = true;
+                                       if($uexp[1][0] == "+") $isvoice = true;
+                               }
+                       }
+                       $user = P10_User::getUserByNum($uexp[0]);
+                       if($user == null) {
+                               trigger_error("burst parse error: cant find User '".$uexp[0]."'.", E_USER_ERROR);
+                               return;
+                       }
+                       $channel->burstUser($user, $isop, $isvoice);
+               }
+               $modes->parseModes(implode(array_slice($args, 2, $modeparamcount)));
+       }
+       
        /********************************************************************************************
         *                                     SERVER FUNCTIONS                                     *
         ********************************************************************************************/