PABX da Simples IP
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

236 lines
5.9 KiB

<?php
/*
* Define o tempo de ciclo, para obtenção de dados do servidor;
*/
define("TEMPO_CICLO", 1000000);
define("CICLOS_ABSR", 5);
/*
* Define os tipos de dados armazenados.
*/
define("TIPO_DADOS_CONTROLE", 'CTRL');
define("TIPO_DADOS_DAC", 'DAC');
define("TIPO_DADOS_AGENTE", 'AGT');
define("TIPO_DADOS_MSG", 'MSG');
/*
* Arquivo para gera shmid da memória compartilhada.
*/
define("SHM_IPC_FILE_CONTROLE", 1376104504);
//define("SHM_IPC_FILE_CONTROLE", '/file_super/ipcserver_ssupervisor_controle.txt');
define("SHM_IPC_FILE_DAC", 1376104506);
//define("SHM_IPC_FILE_DAC", '/file_super/ipcserver_ssupervisor_dac.txt');
define("SHM_IPC_FILE_AGENTE", 1376060027);
//define("SHM_IPC_FILE_AGENTE", '/file_super/ipcserver_ssupervisor_agente.txt');
define("SHM_IPC_FILE_SESSAO", 1627400271);
/*
* Define o número máximo de dacs movidorados.
*/
define("NUM_MAX_DACS_ON", 50);
/*
* Define o número maximo de agentes simultaneos.
*/
define("NUM_MAX_AGENTES_ON", 200);
/*
* Define o tamanho do seguemento(bytes) de dados para armazenar informacoes de um dac.
*/
define("TAM_SEGMENTO_DAC", 1024);
/*
* Define o tamanho do seguemento(bytes) de dados para armazenar informacoes de um agente.
*/
define("TAM_SEGMENTO_AGENTE", 1024);
/*
* Define o tamanho do seguemento(bytes) de dados para armazenar informacoes de controle
* para um agente ou dac.
*/
define("TAM_SEGMENTO_CONTROLE", 4096);
/*
* Define o tempo maximo em segundos que o servidor pode ficar sem responder para a aplicacao.
*/
define("TEMPO_MAX_SERVER_RESPONDE", 3);
/*
* Define o tamanho do seguemento(bytes) de dados para armazenar informacoes de controle da sessão do agente,
* corresponde ao tamanho da matricula.
*/
define("TAM_SEGMENTO_SESSAO_CONTROLE", 4);
/*
* Define o tamanho do seguemento(bytes) de dados para armazenar informacoes de uma sessão do agente.
*/
define("TAM_SEGMENTO_SESSAO", 32);
/*
* Define o tempo default para o agente atualizar as intormacoes no servidor.
*/
define("TEMPO_DEFAULT_AGENTE", 5);
/*
* Define o tempo de delay para encerrar a conexao do agente caso a aplicacao nao consiga atualizar
* as informacoes no servidor.
*/
define("TEMPO_DELAY_AGENTE", 3);
/*
* Arquivo para log de erros.
*/
$patLog = "/var/log/asterisk/supervisor.log";
function sCreateMemory($fileKey, $paramMalloc, $mode = SHM_ACESS_MODE_C, $perms = SHM_ACESS_PERMISSION)
{
$readOnly = $mode == SHM_ACESS_MODE_R;
/*
* Variable identifies a memory block on operating system.
*/
$shmSystemKey = ShmGetId($fileKey);
//file_put_contents($fileKey, $shmSystemKey);
/*
* Calcular a memória necessária.
*/
$memoryAllocated = $readOnly ? 0 : Malloc($paramMalloc);
/*
* Verifica se a memoria já existe
*/
$shmKey = 0;
$shmKey = ShmExist($shmSystemKey);
if ($shmKey && ($mode == SHM_ACESS_MODE_C)) {
ShmDelete($shmKey);
}
/*
* Abre ou cria um novo segmento de memoria compartilhada.
*/
$shmKey = ShmOpen($shmSystemKey, $mode, ($readOnly ? 0 : $perms), $memoryAllocated);
/*
* Verifica se a memória foi alocada com sucesso.
*/
if (!$shmKey) {
GeraExcept("Nao foi possivel allocar memoria para o servidor! $fileKey");
}
return $shmKey;
}
function Malloc($param)
{
/*
* Calculates necessary memory for 100 simultaneous processes.
*/
return !count($param) ? 0 : ($param[0] + ($param[1] * $param[2]));
}
function GetInfoControle()
{
try {
/*
* Verifica se o server esta trabalhando.
*/
$shmKey = sCreateMemory(SHM_IPC_FILE_CONTROLE, 0, SHM_ACESS_MODE_R, 0);
if (!$shmKey) {
return false;
}
/* // segmento para avaliar problema leitura //
* Pega o tamanho do bloco para leitura.
* $sizeControle = ShmSize($shmkey);
*/
$dadosControle = ShmReadVar($shmKey, 0, TAM_SEGMENTO_CONTROLE);
if (is_array($dadosControle)) {
return $dadosControle;
}
return false;
} catch (Exception $ex) {
return false;
}
}
function RetornaDadosDac($paramControle, $dacUser = array())
{
try {
/*
* Verifica se o server esta trabalhando.
*/
$shmKey = sCreateMemory(SHM_IPC_FILE_DAC, 0, SHM_ACESS_MODE_R, 0);
if (!$shmKey) {
return false;
}
/*
* Pega o tamanho do bloco para leitura.
*/
$sizeControle = $paramControle[TIPO_DADOS_DAC];
$dadosDac = ShmReadVar($shmKey, 0, $sizeControle);
if (is_array($dadosDac)) {
if (count($dacUser)) {
$arDacs = array();
foreach ($dacUser as $dac) {
$arDacs[$dac] = $dadosDac[$dac];
}
$dadosDac = $arDacs;
} else {
$dadosDac = [];
}
return $dadosDac;
}
return false;
} catch (Exception $ex) {
return false;
}
}
function RetornaDadosAgt($paramControle)
{
try {
/*
* Verifica se o server esta trabalhando.
*/
$shmKey = sCreateMemory(SHM_IPC_FILE_AGENTE, 0, SHM_ACESS_MODE_R, 0);
if (!$shmKey) {
return false;
}
/*
* Pega o tamanho do bloco para leitura.
*/
$sizeControle = $paramControle[TIPO_DADOS_AGENTE];
$dadosAgt = ShmReadVar($shmKey, 0, $sizeControle);
if (is_array($dadosAgt)) {
return $dadosAgt;
}
return false;
} catch (Exception $ex) {
return false;
}
}
function LimpaSessaoAgente($shmkey, $pos)
{
$offSet = $pos * TAM_SEGMENTO_SESSAO_CONTROLE;
$data = str_repeat(' ', TAM_SEGMENTO_SESSAO_CONTROLE);
ShmWrite($shmkey, $data, $offSet);
$offSet = (NUM_MAX_AGENTES_ON * TAM_SEGMENTO_SESSAO_CONTROLE) + ($pos * TAM_SEGMENTO_SESSAO);
$data = str_repeat(' ', TAM_SEGMENTO_SESSAO);
ShmWrite($shmkey, $data, $offSet);
}