当前位置: 首页>>代码示例>>PHP>>正文


PHP ExecFuture::resolveKill方法代码示例

本文整理汇总了PHP中ExecFuture::resolveKill方法的典型用法代码示例。如果您正苦于以下问题:PHP ExecFuture::resolveKill方法的具体用法?PHP ExecFuture::resolveKill怎么用?PHP ExecFuture::resolveKill使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在ExecFuture的用法示例。


在下文中一共展示了ExecFuture::resolveKill方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。

示例1: testMultipleResolves

 public function testMultipleResolves()
 {
     // It should be safe to call resolve(), resolvex(), resolveKill(), etc.,
     // as many times as you want on the same process.
     $future = new ExecFuture('echo quack');
     $future->resolve();
     $future->resolvex();
     list($err) = $future->resolveKill();
     $this->assertEqual(0, $err);
 }
开发者ID:bearinchina,项目名称:libphutil,代码行数:10,代码来源:ExecFutureTestCase.php

示例2: identifyRepository

 protected function identifyRepository()
 {
     // NOTE: In SVN, we need to read the first few protocol frames before we
     // can determine which repository the user is trying to access. We're
     // going to peek at the data on the wire to identify the repository.
     $io_channel = $this->getIOChannel();
     // Before the client will send us the first protocol frame, we need to send
     // it a connection frame with server capabilities. To figure out the
     // correct frame we're going to start `svnserve`, read the frame from it,
     // send it to the client, then kill the subprocess.
     // TODO: This is pretty inelegant and the protocol frame will change very
     // rarely. We could cache it if we can find a reasonable way to dirty the
     // cache.
     $command = csprintf('svnserve -t');
     $command = PhabricatorDaemon::sudoCommandAsDaemonUser($command);
     $future = new ExecFuture('%C', $command);
     $exec_channel = new PhutilExecChannel($future);
     $exec_protocol = new DiffusionSubversionWireProtocol();
     while (true) {
         PhutilChannel::waitForAny(array($exec_channel));
         $exec_channel->update();
         $exec_message = $exec_channel->read();
         if ($exec_message !== null) {
             $messages = $exec_protocol->writeData($exec_message);
             if ($messages) {
                 $message = head($messages);
                 $raw = $message['raw'];
                 // Write the greeting frame to the client.
                 $io_channel->write($raw);
                 // Kill the subprocess.
                 $future->resolveKill();
                 break;
             }
         }
         if (!$exec_channel->isOpenForReading()) {
             throw new Exception(pht('%s subprocess exited before emitting a protocol frame.', 'svnserve'));
         }
     }
     $io_protocol = new DiffusionSubversionWireProtocol();
     while (true) {
         PhutilChannel::waitForAny(array($io_channel));
         $io_channel->update();
         $in_message = $io_channel->read();
         if ($in_message !== null) {
             $this->peekBuffer .= $in_message;
             if (strlen($this->peekBuffer) > 1024 * 1024) {
                 throw new Exception(pht('Client transmitted more than 1MB of data without transmitting ' . 'a recognizable protocol frame.'));
             }
             $messages = $io_protocol->writeData($in_message);
             if ($messages) {
                 $message = head($messages);
                 $struct = $message['structure'];
                 // This is the:
                 //
                 //   ( version ( cap1 ... ) url ... )
                 //
                 // The `url` allows us to identify the repository.
                 $uri = $struct[2]['value'];
                 $path = $this->getPathFromSubversionURI($uri);
                 return $this->loadRepositoryWithPath($path, PhabricatorRepositoryType::REPOSITORY_TYPE_SVN);
             }
         }
         if (!$io_channel->isOpenForReading()) {
             throw new Exception(pht('Client closed connection before sending a complete protocol ' . 'frame.'));
         }
         // If the client has disconnected, kill the subprocess and bail.
         if (!$io_channel->isOpenForWriting()) {
             throw new Exception(pht('Client closed connection before receiving response.'));
         }
     }
 }
开发者ID:NeoArmageddon,项目名称:phabricator,代码行数:71,代码来源:DiffusionSubversionServeSSHWorkflow.php


注:本文中的ExecFuture::resolveKill方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。