* * This source file is subject to the GPL-3.0 license that is bundled * with this source code in the file LICENSE. */ namespace daemons; use Monolog\Handler\StreamHandler; use Monolog\Logger; /** * Main daemon class. */ class Launcher extends AbstractDaemon { private $internal_phone; private $internal_scheduled; private $internal_received; private $bdd; public function __construct() { $name = 'RaspiSMS Daemon Launcher'; $logger = new Logger($name); $logger->pushHandler(new StreamHandler(PWD_LOGS.'/raspisms.log', Logger::DEBUG)); $pid_dir = PWD_PID; $no_parent = true; //Launcher should be rattach to PID 1 $additional_signals = []; $uniq = true; //Main server should be uniq //Construct the server and add SIGUSR1 and SIGUSR2 parent::__construct($name, $logger, $pid_dir, $no_parent, $additional_signals, $uniq); parent::start(); } public function run() { //Create the internal controllers $this->bdd = \descartes\Model::_connect(DATABASE_HOST, DATABASE_NAME, DATABASE_USER, DATABASE_PASSWORD, 'UTF8'); $this->internal_phone = new \controllers\internals\Phone($this->bdd); $this->start_sender_daemon(); $this->start_webhook_daemon(); $phones = $this->internal_phone->get_all(); $this->start_phones_daemons($phones); sleep(1); } /** * Function to start sender daemon. */ public function start_sender_daemon() { $name = 'RaspiSMS Daemon Sender'; $pid_file = PWD_PID.'/'.$name.'.pid'; if (file_exists($pid_file)) { return false; } //Create a new daemon for sender $pid = null; exec('php '.PWD.'/console.php controllers/internals/Console.php sender > /dev/null 2>&1 &'); } /** * Function to start webhook daemon. */ public function start_webhook_daemon() { $name = 'RaspiSMS Daemon Webhook'; $pid_file = PWD_PID.'/'.$name.'.pid'; if (file_exists($pid_file)) { return false; } //Create a new daemon for webhook exec('php '.PWD.'/console.php controllers/internals/Console.php webhook > /dev/null 2>&1 &'); } /** * Function to start phones daemons. * * @param array $phones : Phones to start daemon for if the daemon is not already started */ public function start_phones_daemons(array $phones) { foreach ($phones as $phone) { $phone_name = 'RaspiSMS Daemon Phone '.$phone['number']; $pid_file = PWD_PID.'/'.$phone_name.'.pid'; if (file_exists($pid_file)) { continue; } //Create a new daemon for the phone exec('php '.PWD.'/console.php controllers/internals/Console.php phone --id_phone=\''.$phone['id'].'\' > /dev/null 2>&1 &'); } } public function on_start() { $this->logger->info('Starting Launcher with pid '.getmypid()); } public function on_stop() { $this->logger->info('Stopping Launcher with pid '.getmypid()); } public function handle_other_signals($signal) { $this->logger->info('Signal not handled by '.$this->name.' Daemon : '.$signal); } }