Example #1
0
 /**
  * Transforms a message to the format requested by DaZeus and sends it
  * @param  mixed   $data     The data to be send, should be some stdObject or associative array
  * @param  boolean $callback Callback that receives the response, true for an
  *                           empty callback, false if no callback is expected
  * @return PromiseInterface
  */
 public function send($data, $callback = true)
 {
     if (is_callable($callback) || $callback === true) {
         $deferred = new Deferred();
         $deferred->then(function ($message) use($callback) {
             if (is_callable($callback)) {
                 return $callback($message);
             }
             return $message;
         });
         $this->watchers[] = $deferred->resolver();
         $this->sendData($data);
         return $deferred->promise();
     } else {
         $this->sendData($data);
         return new FulfilledPromise();
     }
 }
Example #2
0
 public function query($nameserver, Query $query)
 {
     $deferred = new Deferred();
     $this->tryQuery($nameserver, $query, $this->retries, $deferred->resolver());
     return $deferred->promise();
 }
Example #3
0
 public function handleConnectedSocks(Stream $stream, $host, $port, $timeout, $protocolVersion, $auth = null)
 {
     $deferred = new Deferred();
     $resolver = $deferred->resolver();
     $timerTimeout = $this->loop->addTimer($timeout, function () use($resolver) {
         $resolver->reject(new Exception('Timeout while establishing socks session'));
     });
     if ($protocolVersion === '5' || $auth !== null) {
         $promise = $this->handleSocks5($stream, $host, $port, $auth);
     } else {
         $promise = $this->handleSocks4($stream, $host, $port);
     }
     $promise->then(function () use($resolver, $stream) {
         $resolver->resolve($stream);
     }, function ($error) use($resolver) {
         $resolver->reject(new Exception('Unable to communicate...', 0, $error));
     });
     $loop = $this->loop;
     $deferred->then(function (Stream $stream) use($timerTimeout, $loop) {
         $loop->cancelTimer($timerTimeout);
         $stream->removeAllListeners('end');
         return $stream;
     }, function ($error) use($stream, $timerTimeout, $loop) {
         $loop->cancelTimer($timerTimeout);
         $stream->close();
         return $error;
     });
     $stream->on('end', function (Stream $stream) use($resolver) {
         $resolver->reject(new Exception('Premature end while establishing socks session'));
     });
     return $deferred->promise();
 }