<?php
//Fonction générale appelant le broker agent du client sigb et gérant les MAJ
function callBrokerAgent($idClient, $classname, $action, $params) {
    if (!empty($idClient)) {
        //Include des classes
        require("class/serveur.class.php");

        //Instanciation du client
        $serveur = new serveur($idClient);
        $ipclient = $serveur->getIpClient();

        if (!empty($ipclient)) {
            //Préparation des paramètres
            $tabParams = array();
            $tabParamsFinal = array();
            $tabParams = explode("&", $params);
            foreach ($tabParams as $item) {
                if ($item=='') continue;
                list($paramName, $paramValue) = explode("=", $item, 2);
                $tabParamsFinal[] = $paramName."=".urlencode($paramValue);
            }
            $params = implode("&", $tabParamsFinal);

            $hashkey = $serveur->generateHashKey();

            //Instanciation de la bonne classe SIGB
            require("./sigb_class/Stats.class.php");
            require("./sigb_class/sigb.class.php");
            require("./sigb_class/".$classname.".class.php");
            $classnameBK = $classname.'BK';
            $sigb = new $classnameBK();
            $version_serveur = $sigb->version();

            $stats = new Stats("agentserver");
            $stats->tstart("Call client : ".$action);
            //Appel au client
            $serveur->returnLog('Envoi de la requête "'.$action.'" au client '.$idClient);
            $print_tmp = $serveur->callClient("http://".$ipclient."/webservices/client/client.php?idclient=".$idClient."&sigb=".$classname."&version=".$version_serveur."&action=".$action."&key=".$hashkey."&".$params, $action);
            //file_put_contents('C:/Projects/PortailAgents/trunk/serveur.log', "http://".$ipclient."/webservices/client/client.php?idclient=".$idClient."&sigb=".$classname."&version=".$version_serveur."&action=".$action."&key=".$hashkey."&".$params);
            $stats->tend("Call client : ".$action);
       
            $error = $print_tmp['error'];
            $print = $print_tmp['retour'].$stats->asXML();

            //Gestion des erreurs
            switch($error) {
                case 'install' :
                case 'maj'     : $serveur->log = '';
                                 $serveur->returnLog('Création d\'une archive des classes sur le serveur...');
                                 $result_zip = $serveur->zip($idClient, $classname, $version_serveur, $ipclient, '/webservices/client/client.php', 'curl');
                                 if ($result_zip != FALSE) {
                                     //Demande au client d'installer les nouvelles classes + nouvelle requête
                                     $print_tmp = $serveur->callClient("http://".$ipclient."/webservices/client/client.php?idclient=".$idClient."&sigb=".$classname."&version=".$version_serveur."&action=".$action."&key=".$hashkey."&zip=1&file=".$result_zip[0]."&md5file=".$result_zip[1]."&".$params.$clientGet, $action);
                                     $error = $print_tmp['error'];
                                     $print = $print_tmp['retour'];
                                 }
                                 break;
            }

            //Retour du résultat
            return $print;
        }
        else {
            return 'Client ['.$idClient.'] inconnu';
        }
    }
}

//Appel au client directement ou en fédérée pour les infos exemplaires
//file_put_contents('C:/Projects/PortailAgents/trunk/serveur.log', 'je suis là');
$params = '';
if (isset($_GET['debug'])) $params .= '&debug='.$_GET['debug'];
if (isset($_GET['get_stats'])) $params .= '&get_stats='.$_GET['get_stats'];

if (!isset($_GET['sigb']) && isset($_GET['action']) && isset($_GET['dets']) && $_GET['action'] == 'getCopyDetails') {

    $return = '';
    foreach ($_GET['dets'] as $infosBroker) {
        list($institution, $nn, $type) = explode(":", $infosBroker);
        $return .= callBrokerAgent($institution, $type, 'copyDetails', 'nn='.$nn.'&institution='.$institution.$params);
    }
    echo '<items>'.$return.'</items>';
} else {
    //Appel normal
    echo callBrokerAgent($_GET['idclient'], $_GET['sigb'], $_GET['action'], $_GET['params'].$params);
}

?>