Extract function from core of daemons

This commit is contained in:
osaajani 2020-01-04 19:30:06 +01:00
parent 67c7753e7d
commit ac64fe9d2d
3 changed files with 80 additions and 24 deletions

View File

@ -377,6 +377,26 @@ namespace controllers\internals;
}
/**
* Send a scheduled message
* @param int $id_scheduled : Id of the message to send
* @param string $text : Text of the message
* @param string $origin : Origin of the message
* @param string $destination : Destination of the message
* @param bool $flash : Is the message a flash sms
* return bool: false on error, true else
*/
public function send (int $id_scheduled, string $text, string $origin, string $destination, bool $flash) : bool
{
//TODO : Do the sending (càd, instanciate a phone adapter and send the message)
$now = new \DateTime();
$at = $now->format('Y-m-d H:i:s');
$internal_sended = new \controllers\internals\Sended($this->bdd);
$this->delete($id_scheduled);
return $internal_sended->create($at, $text, $origin, $destination, $flash);
}
/**
* Return numbers for a scheduled message

View File

@ -42,6 +42,17 @@ class Phone extends AbstractDaemon
return true;
}
//Send a sms
$this->send_sms();
}
/**
* Send sms
*/
public function send_sms () : bool
{
//Call message
$msgtype = null;
$maxsize = 409600;
$message = null;
@ -50,25 +61,22 @@ class Phone extends AbstractDaemon
if (!$message)
{
return true;
return false;
}
$bdd = \descartes\Model::_connect(DATABASE_HOST, DATABASE_NAME, DATABASE_USER, DATABASE_PASSWORD, 'UTF8');
$internal_sended = new \controllers\internals\Sended($bdd);
//If message received, update last message time
$this->last_message_at = microtime(true);
//Register message as sended
$now = new \DateTime();
$now = $now->format('Y-m-d H:i:s');
$internal_sended->create($now, $message['text'], $message['origin'], $message['destination'], $message['flash']);
$bdd = \descartes\Model::_connect(DATABASE_HOST, DATABASE_NAME, DATABASE_USER, DATABASE_PASSWORD, 'UTF8');
$internal_scheduled = new \controllers\internals\Scheduled($bdd);
$internal_scheduled->send($message['id_scheduled'], $message['text'], $message['origin'], $message['destination'], $message['flash']);
//Close bdd
$bdd = null;
$internal_sended = null;
$internal_scheduled = null;
$this->logger->info('Send message : ' . json_encode($message));
return true;
}

View File

@ -9,10 +9,11 @@ use \Monolog\Handler\StreamHandler;
*/
class Server extends AbstractDaemon
{
private $internal_user;
private $internal_phone;
private $internal_scheduled;
private $internal_received;
private $bdd;
private $daemons_queues = [];
public function __construct()
{
@ -35,13 +36,35 @@ class Server extends AbstractDaemon
{
//Create the internal controllers
$this->bdd = \descartes\Model::_connect(DATABASE_HOST, DATABASE_NAME, DATABASE_USER, DATABASE_PASSWORD, 'UTF8');
$this->internal_user = new \controllers\internals\User($this->bdd);
$this->internal_phone = new \controllers\internals\Phone($this->bdd);
$this->internal_scheduled = new \controllers\internals\Scheduled($this->bdd);
$this->internal_received = new \controllers\internals\Received($this->bdd);
//Start all phones daemons
$phones = $this->internal_phone->get_all();
$this->start_daemons($phones);
//Send smss
$smss = $this->internal_scheduled->get_smss_to_send();
$this->daemons_queues = $this->send_smss($this->daemons_queues, $smss, $this->internal_scheduled); //Add new queues to array of queues
//Read smss
//$this->read_smss($this->internal_received);
sleep(0.5);
}
/**
* Function to start phones daemons
* @param array $phones : Phones to start daemon for if the daemon is not already started
* @return void
*/
public function start_daemons (array $phones) : void
{
foreach ($phones as $phone)
{
$phone_name = 'RaspiSMS Phone ' . $phone['number'];
@ -55,14 +78,21 @@ class Server extends AbstractDaemon
//Create a new daemon for the phone
exec('php ' . PWD . '/console.php controllers/internals/Console.php phone number=\'' . $phone['number'] . '\' > /dev/null &');
}
}
$queues = [];
//Get all sms to send
$smss = $this->internal_scheduled->get_smss_to_send();
/**
* Function to get messages to send and transfer theme to daemons
* @param array $queues : Queues for phones
* @param array $smss : Smss to send
* @param \controllers\internals\Scheduled $internal_scheduled : Internal Scheduled
* @return array : array of queues with new queues appened
*/
public function send_smss (array $queues, array $smss, \controllers\internals\Scheduled $internal_scheduled) : array
{
foreach ($smss as $sms)
{
//If queue has been deleted or does not exist, create a new one
//If the queue has been deleted or does not exist, create a new one
$queue_id = (int) mb_substr($sms['origin'], 1);
if (!msg_queue_exists($queue_id))
{
@ -76,19 +106,17 @@ class Server extends AbstractDaemon
$queue = $queues[$queue_id];
$msg = [
'text' => (string) $sms['text'],
'origin' => (string) $sms['origin'],
'destination' => (string) $sms['destination'],
'flash' => (bool) $sms['flash'],
'id_scheduled' => $sms['id_scheduled'],
'text' => $sms['text'],
'origin' => $sms['origin'],
'destination' => $sms['destination'],
'flash' => $sms['flash'],
];
msg_send($queue, SEND_MSG, $msg);
//Delete the scheduled sms after sending
$this->internal_scheduled->delete($sms['id_scheduled']);
}
sleep(0.5);
return $queues;
}