curl multi

This commit is contained in:
Gnieark 2016-07-07 20:18:05 +02:00
parent 57be3c26f8
commit defd075b7d
4 changed files with 110 additions and 60 deletions

View File

@ -1 +1 @@
1486 1494

View File

@ -55,7 +55,7 @@ switch ($_POST['act']){
die; die;
} }
$game->new_lap(); $game->new_lap();
/*
//make the board array //make the board array
for ($botCount = 0; $botCount < count($bots); $botCount ++){ for ($botCount = 0; $botCount < count($bots); $botCount ++){
$board[$botCount] = $bots[$botCount]->getTail(); $board[$botCount] = $bots[$botCount]->getTail();
@ -110,7 +110,7 @@ switch ($_POST['act']){
print_r($targets); print_r($targets);
*/
die; die;
break; break;
default: default:

View File

@ -1,5 +1,6 @@
<?php <?php
class TronGame{ class TronGame
{
private $bots; private $bots;
private $gameId; private $gameId;
public function getBotsPositions(){ public function getBotsPositions(){
@ -14,9 +15,84 @@ class TronGame{
} }
return $arr; return $arr;
} }
public function getGameId(){ public function getGameId(){
return $this->gameId; return $this->gameId;
} }
private function getBoard(){
$board = array();
$nbeBots = count($this->bots);
for ($botCount = 0; $botCount < $nbeBots; $botCount++){
$board[] = $this->bots[$botCount]->getTail();
}
return $board;
}
private function get_multi_IAS_Responses($iasUrls, $postParams){
//same as the get_IAS_Responses function
// but more than one bot requested parallely
$cmh = curl_multi_init();
for ($i = 0; $i < count($iasUrls); $i++){
$data_string = json_encode($postParams[$i]);
$ch[$i] = curl_init($iasUrls[$i]);
curl_setopt($ch[$i], CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch[$i], CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch[$i], CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch[$i], CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch[$i], CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch[$i], CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($data_string))
);
curl_multi_add_handle($cmh,$ch[$i]);
}
//send the requests
do {
$returnVal = curl_multi_exec($cmh, $runningHandles);
} while ($returnVal == CURLM_CALL_MULTI_PERFORM);
// Loop and continue processing the request
while ($runningHandles && $returnVal== CURLM_OK) {
// Wait forever for network
$numberReady = curl_multi_select($cmh);
if ($numberReady != -1) {
// Pull in any new data, or at least handle timeouts
do {
$returnVal = curl_multi_exec($cmh, $runningHandles);
} while ($returnVal == CURLM_CALL_MULTI_PERFORM);
}
}
//Get results
for ($i = 0; $i < count($iasUrls); $i++){
// Check for errors
$curlError = curl_error($ch[$i]);
if($curlError == "") {
$response = curl_multi_getcontent($ch[$i]);
if(! $arr = json_decode($response,TRUE)){
$arr=array();
}
$res[$i] = array(
'messageSend' => json_encode($postParams[$i]),
'response' => $response,
'httpStatus' => curl_getinfo($ch[$i])['http_code'],
'responseArr' => $arr
);
}else{
$res[$i] = false;
}
//close
curl_multi_remove_handle($cmh, $ch[$i]);
curl_close($ch[$i]);
}
// Clean up the curl_multi handle
curl_multi_close($cmh);
return $res;
}
public function get_continue(){ public function get_continue(){
//count bots alive. if less than 1, game is ended //count bots alive. if less than 1, game is ended
$count = 0; $count = 0;
@ -31,10 +107,36 @@ class TronGame{
return false; return false;
} }
} }
public function new_lap(){ public function new_lap(){
// for all alive bots
$logs = "";
$nbeBots = count($this->bots);
$urls = array();
$paramToSend = array();
for ($botCount = 0; $botCount < $nbeBots; $botCount++){
if ($this->bots[$botCount]->getStatus()){
$urls[$botCount] = $this->bots[$botCount]->getURL();
$paramsToSend[$botCount] = array(
'game-id' => "".$this->gameId,
'action' => 'play-turn',
'game' => 'tron',
'board' => $this->getBoard(),
'player-index' => $botCount, // To do: verifier que ça restera le même à chaque tour
'players' => $nbeBots
);
}
}
$responses = $this->get_multi_IAS_Responses($urls,$paramsToSend);
print_r($responses);
} }
public function init_game(){ public function init_game(){
//send init messages to bots //send init messages to bots
$logs = ""; $logs = "";
@ -62,6 +164,7 @@ class TronGame{
return $logs; return $logs;
} }
private function getBusyCells(){ private function getBusyCells(){
$arr=array(); $arr=array();
foreach($this->bots as $bot){ foreach($this->bots as $bot){
@ -69,6 +172,7 @@ class TronGame{
} }
return $arr; return $arr;
} }
public function __construct($botsIds){ public function __construct($botsIds){
$this->gameId = get_unique_id(); $this->gameId = get_unique_id();

View File

@ -382,57 +382,3 @@ function get_IA_Response($iaUrl,$postParams){
'responseArr' => $arr 'responseArr' => $arr
); );
} }
function get_multi_IAS_Responses($iasUrls, $postParams){
//same as the previous function
// but more than one bot requested parallely
$cmh = curl_multi_init();
for ($i = 0; $i < count($iasUrls); $i++){
$data_string = json_encode($postParams[$i]);
$ch[$i] = curl_init($iaUrl);
curl_setopt($ch[$i], CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch[$i], CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch[$i], CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch[$i], CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch[$i], CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch[$i], CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($data_string))
);
curl_multi_add_handle($cmh,$ch[$i]);
}
//send the requests
do {
$returnVal = curl_multi_exec($cmh, $runningHandles);
} while ($returnVal == CURLM_CALL_MULTI_PERFORM);
// Loop and continue processing the request
while ($runningHandles && $returnVal== CURLM_OK) {
// Wait forever for network
$numberReady = curl_multi_select($cmh);
if ($numberReady != -1) {
// Pull in any new data, or at least handle timeouts
do {
$returnVal = curl_multi_exec($cmh, $runningHandles);
} while ($returnVal == CURLM_CALL_MULTI_PERFORM);
}
}
//Get results
for ($i = 0; $i < count($iasUrls); $i++)
{
// Check for errors
$curlError = curl_error($ch[$i]);
if($curlError == "") {
$res[$i] = curl_multi_getcontent($ch[$i]);
} else {
$res[$i] = false
}
//close
curl_multi_remove_handle($cmh, $ch[$i]);
curl_close($ch[$i]);
}
// Clean up the curl_multi handle
curl_multi_close($mh);
return $res;
}