added P10_Channel.class.php and recv_burst
[PHP-P10.git] / Uplink / Uplink.class.php
index 7cd1d77b601a70a77abdb22ce5bc359c45f7e50e..5c86c95b6afb0d6e183892e85b9d190b63a9e9e9 100644 (file)
@@ -52,6 +52,7 @@ 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 +206,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 +339,51 @@ class Uplink {
                $user->quit($args[0]);
        }
        
+       private function recv_burst($from, $args) {
+               //AK B #aide 1292621006 +tn ALAMH:o
+               $name = $args[0];
+               $create_time = $args[1];
+               $channel = P10_Channel::getChannelByName($name);
+               if($name == 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]) != 6) {
+                               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                                     *
         ********************************************************************************************/