24/02/2021 09:37 
(Esta mensagem foi modificada pela última vez a: 25/02/2021 10:18 por Levi.M.
 Motivo da edição: Correções
)
	
	
	
		Mais um sistema recuperado da Fórum SA-MP. Créditos ao ipsBruno.
Após algumas semanas de desenvolvimento da nova versão de Bini. Finalmente consigo acaba-la.
A nova versão de Bini não conta com muitas alterações, exceto a engine de manipulação de arquivos na memória. Desta vez utiliza memória cache mais avançada usando Setproperty e Getproperty!
Por mais que não seja necessário o uso de INI_Save. Aconselha o USO DA MESMA, pois em caso de crashs ou eventuais bugs no seu servidor decorrente em outros fatores, alguns arquivos podem ser perdidos !!
Velocidade
Com esta nova engine, a velocidade foi bastante aprimorada. O que já era rápido ficou mais rápido ainda.
A função write apesar de ser mais rápida que todos os outros sistemas de arquivos ainda precisa de alguns ajustes de velocidade e estabilidade, então eventuais atualizações estão para surgir![[Imagem: mrgreen.gif]](https://sampforumarchive.com/forum.sa-mp.com/images/smilies/mrgreen.gif)
Código usado para teste de velocidade:
Usando
Para usar Bini é bastante simples! Basta fazer o seguinte:
Escrevendo:
Números
Textos
Lendo valores:
Números
Textos
deixe
** Importante
- Se você tem arquivos escritos por DOF2 ou Y_Ini este sistema não será compatível pois meu sistema usa o método formal para escrita de escrita em arquivos ini, sem espaço entre as keys
e não
https://en.wikipedia.org/wiki/INI_file
Porém é TOTALMENTE compatível com Dini e outros sistemas conhecidos.
Funções disponíveis:
Download
-> https://pastebin.com/gjEJMnH5
Com está velocidade é permitido que você possa colocar em até 50 escritas/leituras em OnPlayerUpdate. Salve em bini.inc por favor.
    
Arquivo não salvando
Caso for um único arquivo, veja se o servidor não está sendo fechado corretamente. Quando você não fecha por RCON EXIT o OnGameModeExit/FilterScriptExit não são chamados e logo INI_Exit também não é !!
Caso for vários arquivos tente aumentar o valor max_lines_file para acima de 999
Exemplo:
Servidor crashando
Certifique-se se antes de usar algum arquivo INI_Open/INI_READ o arquivo existe. Use
Ocupando muito AMX
Nem sempre o que ocupa muito amx é lento. Bini usa um sistema avançado de cache, onde tudo é registrado no amx em tempo real. Mas é tudo registrado no AMX, não ocupa nada de memória do seu computador. Só ocupará memória se de alguma forma outros fatores externos a Bini ultrapassarem isto.
https://pt.wikipedia.org/wiki/Cache
Desenvolvido por Bruno da Silva
	
	
Bini 4
Após algumas semanas de desenvolvimento da nova versão de Bini. Finalmente consigo acaba-la.
A nova versão de Bini não conta com muitas alterações, exceto a engine de manipulação de arquivos na memória. Desta vez utiliza memória cache mais avançada usando Setproperty e Getproperty!
Por mais que não seja necessário o uso de INI_Save. Aconselha o USO DA MESMA, pois em caso de crashs ou eventuais bugs no seu servidor decorrente em outros fatores, alguns arquivos podem ser perdidos !!
Velocidade
Com esta nova engine, a velocidade foi bastante aprimorada. O que já era rápido ficou mais rápido ainda.
Código PHP:
[00:57:47] Bini -> write 3304 ms - read 32 ms - read/write 3336 ms
[00:57:47] Dof2 -> write 3557 ms - read 258 ms - read/write 3815 ms 
A função write apesar de ser mais rápida que todos os outros sistemas de arquivos ainda precisa de alguns ajustes de velocidade e estabilidade, então eventuais atualizações estão para surgir
![[Imagem: mrgreen.gif]](https://sampforumarchive.com/forum.sa-mp.com/images/smilies/mrgreen.gif)
Código usado para teste de velocidade:
Código PHP:
main() {
    DOF2_CreateFile("ipsBruno1");
    DOF2_CreateFile("ipsBruno2");
    new dof[3];
    dof[0] = GetTickCount();
    dof[2] = GetTickCount();
    for(new i; i != 3000; i++) {
        DOF2_SetInt("ipsBruno1", "teste1", 1000);
        DOF2_SetInt("ipsBruno1", "teste2", 2000);
        DOF2_SetInt("ipsBruno1", "teste3", 3000);
        DOF2_SetInt("ipsBruno1", "teste4", 4000);
        DOF2_SetInt("ipsBruno1", "teste5", 5000);
        DOF2_SetInt("ipsBruno1", "teste6", 6000);
        DOF2_SetInt("ipsBruno1", "teste7", 7000);
        DOF2_SetInt("ipsBruno1", "teste8", 8000);
        DOF2_SetInt("ipsBruno1", "teste9", 9000);
        DOF2_SetInt("ipsBruno1", "teste10", 10000);
        DOF2_SetInt("ipsBruno1", "teste11", 11000);
        DOF2_SaveFile();
    }
    dof[0] = GetTickCount() - dof[0];
    dof[1] = GetTickCount();
    for(new i; i != 3000; i++) {
        DOF2_GetInt("ipsBruno1", "teste1");
        DOF2_GetInt("ipsBruno1", "teste2");
        DOF2_GetInt("ipsBruno1", "teste3");
        DOF2_GetInt("ipsBruno1", "teste4");
        DOF2_GetInt("ipsBruno1", "teste5");
        DOF2_GetInt("ipsBruno1", "teste6");
        DOF2_GetInt("ipsBruno1", "teste7");
        DOF2_GetInt("ipsBruno1", "teste8");
        DOF2_GetInt("ipsBruno1", "teste9");
        DOF2_GetInt("ipsBruno1", "teste10");
        DOF2_GetInt("ipsBruno1", "teste11");
    }
    dof[1] = GetTickCount() - dof[1];
    dof[2] = GetTickCount() - dof[2];
    //
    new bin[3];
    bin[0] = GetTickCount();
    bin[2] = GetTickCount();
    for(new i; i != 3000; i++) {
        INI_WriteInt("ipsBruno2", "teste1", 1000);
        INI_WriteInt("ipsBruno2", "teste2", 2000);
        INI_WriteInt("ipsBruno2", "teste3", 3000);
        INI_WriteInt("ipsBruno2", "teste4", 4000);
        INI_WriteInt("ipsBruno2", "teste5", 5000);
        INI_WriteInt("ipsBruno2", "teste6", 6000);
        INI_WriteInt("ipsBruno2", "teste7", 7000);
        INI_WriteInt("ipsBruno2", "teste8", 8000);
        INI_WriteInt("ipsBruno2", "teste9", 9000);
        INI_WriteInt("ipsBruno2", "teste10", 10000);
        INI_WriteInt("ipsBruno2", "teste11", 11000);
        INI_Save();
    }
    bin[0] = GetTickCount() - bin[0];
    bin[1] = GetTickCount();
    for(new i; i != 3000; i++) {
        INI_ReadInt("ipsBruno2", "teste1");
        INI_ReadInt("ipsBruno2", "teste2");
        INI_ReadInt("ipsBruno2", "teste3");
        INI_ReadInt("ipsBruno2", "teste4");
        INI_ReadInt("ipsBruno2", "teste5");
        INI_ReadInt("ipsBruno2", "teste6");
        INI_ReadInt("ipsBruno2", "teste7");
        INI_ReadInt("ipsBruno2", "teste8");
        INI_ReadInt("ipsBruno2", "teste9");
        INI_ReadInt("ipsBruno2", "teste10");
        INI_ReadInt("ipsBruno2", "teste11");
    }
    
    
    bin[1] = GetTickCount() - bin[1];
    bin[2] = GetTickCount() - bin[2];
    printf("Bini -> write %d ms - read %d ms - read/write %d ms", bin[0], bin[1], bin[2]);
    printf("Dof2 -> write %d ms - read %d ms - read/write %d ms", dof[0], dof[1], dof[2]);
    return true;
}
public OnFilterScriptExit() {
    DOF2_Exit();
    INI_Exit();
    return true;
} 
Usando
Para usar Bini é bastante simples! Basta fazer o seguinte:
Escrevendo:
Números
Código PHP:
INI_WriteInt("arquivo.ini", "key", valor); 
Textos
Código PHP:
INI_WriteString("arquivo.ini", "key", "valor"); 
Lendo valores:
Números
Código PHP:
INI_ReadInt("arquivo.ini", "key"); 
Textos
Código PHP:
INI_ReadString("arquivo.ini", "key"); 
deixe
Código PHP:
public OnFilterScriptExit() {
    INI_Exit();
    return true;
} 
** Importante
- Se você tem arquivos escritos por DOF2 ou Y_Ini este sistema não será compatível pois meu sistema usa o método formal para escrita de escrita em arquivos ini, sem espaço entre as keys
Código:
key=valuee não
Código:
key = valuehttps://en.wikipedia.org/wiki/INI_file
Porém é TOTALMENTE compatível com Dini e outros sistemas conhecidos.
Funções disponíveis:
Código PHP:
// Funções Atuais:
//   CallBack INI_WriteString("arquivo", "key", "valor")
//   CallBack INI_WriteFloat("arquivo"",key", valor)
//   CallBack INI_WriteInt("arquivo","key", valor)
//   CallBack INI_WriteBool("arquivo","key", bool:valor)
//   CallBack INI_ReadString("arquivo", "key")
//   CallBack INI_ReadInt("arquivo", "key")
//   CallBack INI_ReadFloat("arquivo","key")
//   CallBack INI_ReadBool("arquivo","key")
//   CallBack INI_Create("arquivo")
//   CallBack INI_Delete("arquivo")
//   CallBack INI_Open("arquivo") 
Download
-> https://pastebin.com/gjEJMnH5
Com está velocidade é permitido que você possa colocar em até 50 escritas/leituras em OnPlayerUpdate. Salve em bini.inc por favor.
Arquivo não salvando
Caso for um único arquivo, veja se o servidor não está sendo fechado corretamente. Quando você não fecha por RCON EXIT o OnGameModeExit/FilterScriptExit não são chamados e logo INI_Exit também não é !!
Caso for vários arquivos tente aumentar o valor max_lines_file para acima de 999
Exemplo:
Código PHP:
#define max_lines_file  5000 
Servidor crashando
Certifique-se se antes de usar algum arquivo INI_Open/INI_READ o arquivo existe. Use
Código PHP:
if(fexist(#arquivo.ini)) // o arquivo existe 
Ocupando muito AMX
Nem sempre o que ocupa muito amx é lento. Bini usa um sistema avançado de cache, onde tudo é registrado no amx em tempo real. Mas é tudo registrado no AMX, não ocupa nada de memória do seu computador. Só ocupará memória se de alguma forma outros fatores externos a Bini ultrapassarem isto.
https://pt.wikipedia.org/wiki/Cache
Desenvolvido por Bruno da Silva
Discord:https://discord.gg/Vg5HMqgdP9
	
