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
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
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=value
e não
Código:
key = value
https://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