+ 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);
+ $channel->setCreateTime($create_time);
+ $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--;
+ }
+ if($userstr[0] == "+") { //MODE String
+ $modeparamcount++;
+ $userstr = "";
+ }
+ $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);
+ if($this->eventHandler)
+ $this->eventHandler->event_join($user, $channel, true);
+ }
+ $modes->parseModes(implode(array_slice($args, 2, $modeparamcount)));
+ }
+
+ private function recv_join($from, $args) {
+ $user = P10_User::getUserByNum($from);
+ if($user == null) {
+ trigger_error("Server tries to join an user that does not exist or was not found on recv_join.", E_USER_ERROR);
+ return;
+ }
+ $channel = P10_Channel::getChannelByName($args[0]);
+ if($channel == null)
+ $channel = new P10_Channel($args[0]);
+ $channel->joinUser($user);
+ if($this->eventHandler)
+ $this->eventHandler->event_join($user, $channel, false);
+ }
+
+ private function recv_part($from, $args) {
+ $user = P10_User::getUserByNum($from);
+ if($user == null) {
+ trigger_error("Server tries to part an user that does not exist or was not found on recv_join.", E_USER_ERROR);
+ return;
+ }
+ $channel = P10_Channel::getChannelByName($args[0]);
+ if($channel == null)
+ $channel = new P10_Channel($args[0]);
+ if($this->eventHandler)
+ $this->eventHandler->event_part($user, $channel, $args[1]);
+ $channel->partUser($user);
+ }
+