Пример #1
0
 /**
  * Wait for some expected AMQP methods and dispatch to them.
  * Unexpected methods are queued up for later calls to this Python
  * method.
  */
 public function wait($allowed_methods = NULL, $non_blocking = false)
 {
     if ($allowed_methods) {
         if ($this->debug) {
             MiscHelper::debug_msg("waiting for " . implode(", ", $allowed_methods));
         }
     } else {
         if ($this->debug) {
             MiscHelper::debug_msg("waiting for any method");
         }
     }
     //Process deferred methods
     foreach ($this->method_queue as $qk => $queued_method) {
         if ($this->debug) {
             MiscHelper::debug_msg("checking queue method " . $qk);
         }
         $method_sig = $queued_method[0];
         if ($allowed_methods == NULL || in_array($method_sig, $allowed_methods)) {
             unset($this->method_queue[$qk]);
             if ($this->debug) {
                 MiscHelper::debug_msg("Executing queued method: {$method_sig}: " . self::$GLOBAL_METHOD_NAMES[MiscHelper::methodSig($method_sig)]);
             }
             return $this->dispatch($queued_method[0], $queued_method[1], $queued_method[2]);
         }
     }
     // No deferred methods?  wait for new ones
     while (true) {
         $frm = $this->next_frame();
         $frame_type = $frm[0];
         $payload = $frm[1];
         if ($frame_type != 1) {
             throw new Exception("Expecting AMQP method, received frame type: {$frame_type}");
         }
         if (strlen($payload) < 4) {
             throw new Exception("Method frame too short");
         }
         $method_sig_array = unpack("n2", substr($payload, 0, 4));
         $method_sig = "" . $method_sig_array[1] . "," . $method_sig_array[2];
         $args = new AMQPReader(substr($payload, 4));
         if ($this->debug) {
             MiscHelper::debug_msg("> {$method_sig}: " . self::$GLOBAL_METHOD_NAMES[MiscHelper::methodSig($method_sig)]);
         }
         if (in_array($method_sig, self::$CONTENT_METHODS)) {
             $content = $this->wait_content();
         } else {
             $content = NULL;
         }
         if ($allowed_methods == NULL || in_array($method_sig, $allowed_methods) || in_array($method_sig, self::$CLOSE_METHODS)) {
             return $this->dispatch($method_sig, $args, $content);
         }
         // Wasn't what we were looking for? save it for later
         if ($this->debug) {
             MiscHelper::debug_msg("Queueing for later: {$method_sig}: " . self::$GLOBAL_METHOD_NAMES[MiscHelper::methodSig($method_sig)]);
         }
         $this->method_queue[] = array($method_sig, $args, $content);
         if ($non_blocking) {
             break;
         }
     }
 }
Пример #2
0
 /**
  * start connection negotiation
  */
 protected function start($args)
 {
     $this->version_major = $args->read_octet();
     $this->version_minor = $args->read_octet();
     $this->server_properties = $args->read_table();
     $this->mechanisms = explode(" ", $args->read_longstr());
     $this->locales = explode(" ", $args->read_longstr());
     if ($this->debug) {
         MiscHelper::debug_msg(sprintf("Start from server, version: %d.%d, properties: %s, mechanisms: %s, locales: %s", $this->version_major, $this->version_minor, self::dump_table($this->server_properties), implode(', ', $this->mechanisms), implode(', ', $this->locales)));
     }
 }
Пример #3
0
 protected function open_ok($args)
 {
     $this->is_open = true;
     if ($this->debug) {
         MiscHelper::debug_msg("Channel open");
     }
 }