forked from SimplesIP/pabx-app
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.
229 lines
5.8 KiB
229 lines
5.8 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; |
|
} |
|
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); |
|
}
|
|
|