<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/class.yar-concurrent-client.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'fr',
  ),
  'this' => 
  array (
    0 => 'yar-concurrent-client.loop.php',
    1 => 'Yar_Concurrent_Client::loop',
    2 => 'Envoie tous les appels enregistr&eacute;s et attend leur r&eacute;ponse',
  ),
  'up' => 
  array (
    0 => 'class.yar-concurrent-client.php',
    1 => 'Yar_Concurrent_Client',
  ),
  'prev' => 
  array (
    0 => 'yar-concurrent-client.call.php',
    1 => 'Yar_Concurrent_Client::call',
  ),
  'next' => 
  array (
    0 => 'yar-concurrent-client.reset.php',
    1 => 'Yar_Concurrent_Client::reset',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'fr',
    'path' => 'reference/yar/yar_concurrent_client/loop.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="yar-concurrent-client.loop" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">Yar_Concurrent_Client::loop</h1>
  <p class="verinfo">(PECL yar &gt;= 1.0.0)</p><p class="refpurpose"><span class="refname">Yar_Concurrent_Client::loop</span> &mdash; <span class="dc-title">Envoie tous les appels enregistrés et attend leur réponse</span></p>

 </div>

 <div class="refsect1 description" id="refsect1-yar-concurrent-client.loop-description">
  <h3 class="title">Description</h3>
  <div class="methodsynopsis dc-description">
   <span class="modifier">public</span> <span class="modifier">static</span> <span class="modifier">function</span> <span class="methodname"><strong>Yar_Concurrent_Client::loop</strong></span>(<span class="methodparam"><span class="type"><span class="type"><a href="language.types.null.php" class="type null">?</a></span><span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span></span> <code class="parameter">$callback</code><span class="initializer"> = null</span></span>, <span class="methodparam"><span class="type"><span class="type"><a href="language.types.null.php" class="type null">?</a></span><span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span></span> <code class="parameter">$error_callback</code><span class="initializer"> = null</span></span>, <span class="methodparam"><span class="type"><span class="type"><a href="language.types.null.php" class="type null">?</a></span><span class="type"><a href="language.types.array.php" class="type array">array</a></span></span> <code class="parameter">$options</code><span class="initializer"> = null</span></span>): <span class="type"><span class="type"><a href="language.types.null.php" class="type null">?</a></span><span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span></span></div>

  <p class="simpara">
   Envoie en parallèle tous les appels enregistrés avec
   <span class="methodname"><a href="yar-concurrent-client.call.php" class="methodname">Yar_Concurrent_Client::call()</a></span> et bloque jusqu&#039;à ce
   que chaque réponse soit arrivée et ait été traitée. La liste des appels
   est vidée lorsque cette méthode retourne.
  </p>
  <p class="simpara">
   Comme les appels s&#039;exécutent simultanément, la boucle ne dure que le
   temps du seul appel le plus lent, plutôt que la somme de tous les appels.
   Les callbacks, cependant, ne sont pas invoqués dans l&#039;ordre où les appels
   ont été enregistrés : un callback se déclenche dès que sa réponse arrive.
   Pour savoir à quel appel appartient une réponse, comparer l&#039;entrée
   <code class="literal">sequence</code> de l&#039;argument <code class="literal">callinfo</code> avec
   le numéro de séquence retourné par
   <span class="methodname"><a href="yar-concurrent-client.call.php" class="methodname">Yar_Concurrent_Client::call()</a></span>. Le <a href="language.types.array.php" class="link">tableau</a>
   <code class="literal">callinfo</code> contient la <code class="literal">sequence</code>,
   l&#039;<code class="literal">uri</code> et la <code class="literal">method</code> de l&#039;appel ; voir
   <span class="methodname"><a href="yar-concurrent-client.call.php" class="methodname">Yar_Concurrent_Client::call()</a></span>.
  </p>
 </div>


 <div class="refsect1 parameters" id="refsect1-yar-concurrent-client.loop-parameters">
  <h3 class="title">Liste de paramètres</h3>
  <dl>
   
    <dt><code class="parameter">callback</code></dt>
    <dd>
     <p class="simpara">
      Un <span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span> utilisé pour traiter les réponses des appels
      qui ont été enregistrés sans leur propre fonction de rappel. Juste
      après l&#039;envoi de toutes les requêtes, il est de plus appelé une fois
      avec deux arguments <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>, avant l&#039;arrivée de toute réponse.
     </p>
     <p class="simpara">
      Si ce paramètre est omis, la valeur de retour d&#039;un appel réussi est
      simplement affichée lorsque sa réponse arrive.
     </p>
    </dd>
   
   
    <dt><code class="parameter">error_callback</code></dt>
    <dd>
     <p class="simpara">
      Un <span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span> utilisé pour traiter les erreurs des appels
      qui ont été enregistrés sans leur propre fonction de rappel d&#039;erreur.
      Il reçoit trois arguments : le type d&#039;erreur (l&#039;un des codes
      <code class="literal">YAR_ERR_*</code>), le message d&#039;erreur et le <a href="language.types.array.php" class="link">tableau</a>
      <code class="literal">callinfo</code>.
     </p>
     <p class="simpara">
      Si ce paramètre est omis, un appel échoué émet un avertissement PHP ;
      contrairement au <span class="classname"><a href="class.yar-client.php" class="classname">Yar_Client</a></span> synchrone, aucune
      exception n&#039;est levée.
     </p>
    </dd>
   
   
    <dt><code class="parameter">options</code></dt>
    <dd>
     <p class="simpara">
      Un <a href="language.types.array.php" class="link">tableau</a> d&#039;options du client, indexé par les constantes
      <code class="literal">YAR_OPT_*</code>, appliqué à chaque appel enregistré qui
      ne les redéfinit pas.
     </p>
    </dd>
   
  </dl>
 </div>


 <div class="refsect1 returnvalues" id="refsect1-yar-concurrent-client.loop-returnvalues">
  <h3 class="title">Valeurs de retour</h3>
  <p class="simpara">
   Retourne <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> lorsque chaque appel enregistré a été traité, ou lorsque
   aucun appel n&#039;a été enregistré du tout. Retourne <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> si le client
   concurrent est déjà en cours d&#039;exécution dans une autre boucle ; dans ce
   cas, une alerte est émise.
  </p>
 </div>


 <div class="refsect1 examples" id="refsect1-yar-concurrent-client.loop-examples">
  <h3 class="title">Exemples</h3>
  <div class="example" id="example-1">
   <p><strong>Exemple #1 Exemple avec <span class="methodname"><strong>Yar_Concurrent_Client::loop()</strong></span></strong></p>
   <div class="example-contents">
<div class="phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
</span><span style="color: #007700">function </span><span style="color: #0000BB">callback</span><span style="color: #007700">(</span><span style="color: #0000BB">$retval</span><span style="color: #007700">, </span><span style="color: #0000BB">$callinfo</span><span style="color: #007700">) {
    if (</span><span style="color: #0000BB">$callinfo </span><span style="color: #007700">== </span><span style="color: #0000BB">NULL</span><span style="color: #007700">) {
        echo </span><span style="color: #DD0000">"Maintenant, toutes les requêtes ont été émises, et aucune réponse n'est disponible\n"</span><span style="color: #007700">;
    } else {
        echo </span><span style="color: #DD0000">"Ceci est une réponse à un appel distant, le nom de la méthode est "</span><span style="color: #007700">, </span><span style="color: #0000BB">$callinfo</span><span style="color: #007700">[</span><span style="color: #DD0000">"method"</span><span style="color: #007700">],
             </span><span style="color: #DD0000">". La séquence d'appel est "</span><span style="color: #007700">, </span><span style="color: #0000BB">$callinfo</span><span style="color: #007700">[</span><span style="color: #DD0000">"sequence"</span><span style="color: #007700">], </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;
        </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$retval</span><span style="color: #007700">);
    }
}

function </span><span style="color: #0000BB">error_callback</span><span style="color: #007700">(</span><span style="color: #0000BB">$type</span><span style="color: #007700">, </span><span style="color: #0000BB">$error</span><span style="color: #007700">, </span><span style="color: #0000BB">$callinfo</span><span style="color: #007700">) {
    </span><span style="color: #0000BB">error_log</span><span style="color: #007700">(</span><span style="color: #0000BB">$error</span><span style="color: #007700">);
}

</span><span style="color: #0000BB">Yar_Concurrent_Client</span><span style="color: #007700">::</span><span style="color: #0000BB">call</span><span style="color: #007700">(</span><span style="color: #DD0000">"http://api.example.com/operator.php"</span><span style="color: #007700">, </span><span style="color: #DD0000">"some_method"</span><span style="color: #007700">, array(</span><span style="color: #DD0000">"parameters"</span><span style="color: #007700">), </span><span style="color: #DD0000">"callback"</span><span style="color: #007700">);

</span><span style="color: #FF8000">/* si la fonction de rappel n'est pas spécifiée, celle de loop() sera utilisée */
</span><span style="color: #0000BB">Yar_Concurrent_Client</span><span style="color: #007700">::</span><span style="color: #0000BB">call</span><span style="color: #007700">(</span><span style="color: #DD0000">"http://api.example.com/operator.php"</span><span style="color: #007700">, </span><span style="color: #DD0000">"some_method"</span><span style="color: #007700">, array(</span><span style="color: #DD0000">"parameters"</span><span style="color: #007700">));

</span><span style="color: #0000BB">Yar_Concurrent_Client</span><span style="color: #007700">::</span><span style="color: #0000BB">loop</span><span style="color: #007700">(</span><span style="color: #DD0000">"callback"</span><span style="color: #007700">, </span><span style="color: #DD0000">"error_callback"</span><span style="color: #007700">);
</span><span style="color: #0000BB">?&gt;</span></code></pre></div>
   </div>

   <div class="example-contents"><p>Résultat de l&#039;exemple ci-dessus est similaire à :</p></div>
   <div class="example-contents screen">
<div class="examplescode"><pre class="examplescode">Maintenant, toutes les requêtes ont été émises, et aucune réponse n&#039;est disponible
Ceci est une réponse à un appel distant, le nom de la méthode est some_method. La séquence d&#039;appel est 2
string(11) &quot;some_method&quot;
Ceci est une réponse à un appel distant, le nom de la méthode est some_method. La séquence d&#039;appel est 1
string(11) &quot;some_method&quot;</pre>
</div>
   </div>
  </div>
 </div>


 <div class="refsect1 seealso" id="refsect1-yar-concurrent-client.loop-seealso">
  <h3 class="title">Voir aussi</h3>
  <ul class="simplelist">
   <li><span class="methodname"><a href="yar-concurrent-client.call.php" class="methodname" rel="rdfs-seeAlso">Yar_Concurrent_Client::call()</a> - Enregistre un appel concurrent</span></li>
   <li><span class="methodname"><a href="yar-concurrent-client.reset.php" class="methodname" rel="rdfs-seeAlso">Yar_Concurrent_Client::reset()</a> - Nettoie tous les appels enregistr&eacute;s</span></li>
  </ul>
 </div>


</div><?php manual_footer($setup); ?>