Exemplo n.º 1
0
 /**
  * This static function processes just one input line.
  * It must be called in a loop to keep messages running. Or else.
  * @return false if we should exit, true if we should keep running,
  *  or an Yate object instance. Remember to use === and !== operators
  *  when comparing against true and false.
  */
 static function GetEvent()
 {
     global $yate_stdin, $yate_socket;
     if ($yate_socket) {
         $line = @socket_read($yate_socket, 8192, PHP_NORMAL_READ);
         // check for error
         if ($line == false) {
             return false;
         }
         // check for EOF
         if ($line === "") {
             return false;
         }
     } else {
         if ($yate_stdin == false) {
             return false;
         }
         // check for EOF
         if (feof($yate_stdin)) {
             return false;
         }
         $line = fgets($yate_stdin, 8192);
         // check for async read no data
         if ($line == false) {
             return true;
         }
     }
     $line = str_replace("\n", "", $line);
     if ($line == "") {
         return true;
     }
     $ev = true;
     $part = explode(":", $line);
     switch ($part[0]) {
         case "%%>message":
             /* incoming message str_id:int_time:str_name:str_retval[:key=value...] */
             $ev = new Yate(Yate::Unescape($part[3]), Yate::Unescape($part[4]), Yate::Unescape($part[1]));
             $ev->type = "incoming";
             $ev->origin = 0 + $part[2];
             $ev->FillParams($part, 5);
             break;
         case "%%<message":
             /* message answer str_id:bool_handled:str_name:str_retval[:key=value...] */
             $ev = new Yate(Yate::Unescape($part[3]), Yate::Unescape($part[4]), Yate::Unescape($part[1]));
             $ev->type = "answer";
             $ev->handled = Yate::Str2bool($part[2]);
             $ev->FillParams($part, 5);
             break;
         case "%%<install":
             /* install answer num_priority:str_name:bool_success */
             $ev = new Yate(Yate::Unescape($part[2]), "", 0 + $part[1]);
             $ev->type = "installed";
             $ev->handled = Yate::Str2bool($part[3]);
             break;
         case "%%<uninstall":
             /* uninstall answer num_priority:str_name:bool_success */
             $ev = new Yate(Yate::Unescape($part[2]), "", 0 + $part[1]);
             $ev->type = "uninstalled";
             $ev->handled = Yate::Str2bool($part[3]);
             break;
         case "%%<watch":
             /* watch answer str_name:bool_success */
             $ev = new Yate(Yate::Unescape($part[1]));
             $ev->type = "watched";
             $ev->handled = Yate::Str2bool($part[2]);
             break;
         case "%%<unwatch":
             /* unwatch answer str_name:bool_success */
             $ev = new Yate(Yate::Unescape($part[1]));
             $ev->type = "unwatched";
             $ev->handled = Yate::Str2bool($part[2]);
             break;
         case "%%<connect":
             /* connect answer str_role:bool_success */
             $ev = new Yate(Yate::Unescape($part[1]));
             $ev->type = "connected";
             $ev->handled = Yate::Str2bool($part[2]);
             break;
         case "%%<setlocal":
             /* local parameter answer str_name:str_value:bool_success */
             $ev = new Yate(Yate::Unescape($part[1]), Yate::Unescape($part[2]));
             $ev->type = "setlocal";
             $ev->handled = Yate::Str2bool($part[3]);
             break;
         case "Error in":
             /* We are already in error so better stay quiet */
             break;
         default:
             Yate::Output("PHP parse error: " . $line);
     }
     return $ev;
 }