private function resolveService($service, $params, $conn) { try { //Ejecutamos la acción del controlador $response = baseController::execute($service['controller'], $params); //Comprobamos si es necesario ejecutar una tarea posterior if (isset($service['task_before_send'])) { //recogemos el nombre de la tarea. $task = $service['task_before_send']; if ($task == "attachUser") { //la información. $data = $response["task_before_send_data"]; $this->clients[$conn] = $data; } else { if ($task == "detachUser") { $this->clients->detach($conn); } else { if ($task == "requireUsersStatus") { $contactos = $response["response_message"]["data"]["msg"]; $ids = array_map(function ($contacto) { return $contacto["idRepresentado"]; }, $contactos); foreach ($this->clients as $connection) { $user = $this->clients[$connection]; //Buscamos si existe el usuario. $idx = array_search($user["id"], $ids); if (is_numeric($idx)) { $response["response_message"]["data"]["msg"][$idx]["status"] = "conectado"; } } } } } } //Codificamos los datos de la respuesta. encodeData($response["response_message"]['data']['msg']); //Enviamos la respuesta al emisor. $this->send($conn, json_encode($response["response_message"])); //Si el servicio debe notificar a otros clientes if ($service['throw_event']) { //Obtenemos los targets $targets = $response["event_message"]["targets"]; //Los eliminamos del evento unset($response["event_message"]["targets"]); if (is_array($targets) && sizeof($targets)) { //recogemos ids parra facilitar búsqueda. $ids = array_map(function ($target) { return $target["id"]; }, $targets); //recorremos usuarios conectados. foreach ($this->clients as $connection) { $user = $this->clients[$connection]; //Buscamos si existe el usuario. $idx = array_search($user["id"], $ids); if (is_numeric($idx)) { //existe, le notificamos el evento. $this->send($connection, json_encode(array_merge($response["event_message"], $targets[$idx]))); } } } } } catch (Exception $e) { echo $e->getMessage(); } }
$params = $_REQUEST['params']; //Comprobamos si el servicio solicitado es HTTP_SERVICE. if (array_key_exists($service, $services)) { if ($services[$service]['token_required']) { //Comprobamos si el token de sesión está presente en la petición. if ($token) { //decodificamos el token de sesión. $token = json_decode(base64_decode($token)); if (!is_null($params)) { if (!is_array($params)) { $params = (array) json_decode($params, true); } $params = $encode ? decodeParams($params) : $params; } //Ejecutamos la acción del controlador $response = baseController::execute($services[$service]['controller'], $params); //Codificamos los datos de la respuesta. if ($encode) { encodeData($response["response_message"]['data']['msg']); } //Enviamos respuesta echo json_encode($response["response_message"]); } else { echo json_encode(array("error" => true, "data" => "Acceso no permitido")); } } } else { echo json_encode(array("error" => true, "data" => "Servicio no disponible")); } } else { header($_SERVER['SERVER_PROTOCOL'] . " 500 Internal Error", true, 500);