예제 #1
0
파일: Spirit.php 프로젝트: Kits-une/Kitsune
 public function acceptClients()
 {
     foreach (Events::GetTimedEvents() as $eventIndex => $timedEvent) {
         list($callable, $interval, $lastCall) = $timedEvent;
         if ($lastCall === null) {
             Events::ResetInterval($eventIndex);
         } elseif (time() - $interval < $lastCall) {
             continue;
         } else {
             call_user_func($callable, $this);
             Events::ResetInterval($eventIndex);
         }
     }
     $sockets = array_merge(array($this->masterSocket), $this->sockets);
     $changedSockets = socket_select($sockets, $write, $except, 1);
     if ($changedSockets === 0) {
         return false;
     } else {
         if (in_array($this->masterSocket, $sockets)) {
             $clientSocket = $this->accept();
             $this->handleAccept($clientSocket);
             unset($sockets[0]);
         }
         foreach ($sockets as $socket) {
             $mixedStatus = socket_recv($socket, $buffer, 8192, 0);
             if ($mixedStatus == null) {
                 $this->handleDisconnect($socket);
                 $this->removeClient($socket);
                 continue;
             } else {
                 $this->handleReceive($socket, $buffer);
             }
         }
     }
 }
예제 #2
0
 protected function handleReceive($socket, $data)
 {
     Events::Fire("receive", [$socket, $data]);
     $chunkedArray = explode("", $data);
     array_pop($chunkedArray);
     foreach ($chunkedArray as $rawData) {
         Logger::Debug("Received {$rawData}");
         $packet = Packet::Parse($rawData);
         if (Packet::$IsXML) {
             $this->handleXmlPacket($socket);
         } else {
             $this->handleWorldPacket($socket);
         }
     }
     Events::Fire("received", [$socket, $data]);
 }
예제 #3
0
파일: Music.php 프로젝트: Kits-une/Kitsune
 public function stopBroadcasting()
 {
     if ($this->broadcastingEventIndex !== null) {
         Events::RemoveInterval($this->broadcastingEventIndex);
         $this->broadcastingEventIndex = null;
     }
 }