21.07.2012, 19:57
O que й?
Essa nгo, vocк deve estar pensando .. Mais um "leitor de urls" ? Bem, desta vez nгo. Este sistema robusto para leitura desde arquivos grandes atй pequenos arquivos em pawn.
Vocк decide qual URL baixar e especifica o arquivo para onde deve ser baixado. Й uma ferramenta bastante dedicada entгo o download do arquivo muitas vezes й feito em pouquissimos segundos sem ocupar muito processo do servidor pois й tudo feito em um processo alternativo - Fora da main thread
Foi testado pwncurl, HTTP da sa:mp e BaixarWebSites de Ken, nenhum conseguiu fazer a leitura de arquivos grandes como uma mъsica de 5 megabytes digamos.
O pwncurl й feito a base da uma include chamada CURL e esta biblioteca й apenas usada e especificada para requerimento de sites pequenas.
BaixarWebSites de Ken й uma ferramenta feita com bastante gambiarra, ela cria um VBS alternativo que й aberto no servidor e outro Site.txt que terб o conteъdo do site, logo dб conflito baixar 2 sites seguidos e nгo sabe-se quando o arquivo termina de baixar
HTTP de sa:mp й quase o mesmo que pwncurl, sу que й muito genйrica e nгo funciona com arquivos grandes :d
----
Criei este sistema, pois pretendo criar um analisador de arquivos MP3 E TESTEI todos sistema de downloads e nenhum funcionou para um arquivo MP3 grande (para poder ler informaзхes de um arquivo MP3 para PlayAudioStream da SA:MP)
-------
Download:
Plugin:
Baixe o plugin deste site abaixo e coloque na pasta plugins do seu servidor. Apуs isto vб no server.cfg e em uma linha coloque plugin udtf
Download do Plugin:
http://www.solidfiles.com/d/470e668d4a/
Source Code
(pastebin http://pastebin.com/CfpE9S6e)
Include:
Pegue o cуdigo deste site e salve em a_udtf.inc Apуs isto coloque #include a_udtf em seu gamemode
(pastebin: http://pastebin.com/dVuPEe3G)
Modo de uso:
O modo de uso й muito simples !! Para baixar um arquivo .mp3 em seu servidor digamos, vocк usa a seguinte funзгo:
Apуs baixar uma callback jб declarada serб chamada no seu gamemode
Ela serve para indicar que o arquivo foi baixado.
Enfim .. Fiz o tуpico na corrida, se virem ler uraurua Se tiverem dъvidas explico melhor
------------------------------------------------------
Desenvolvido por Bruno da Silva @ [iPs]TeaM 2010 2012
------------------------------------------------------
Essa nгo, vocк deve estar pensando .. Mais um "leitor de urls" ? Bem, desta vez nгo. Este sistema robusto para leitura desde arquivos grandes atй pequenos arquivos em pawn.
Vocк decide qual URL baixar e especifica o arquivo para onde deve ser baixado. Й uma ferramenta bastante dedicada entгo o download do arquivo muitas vezes й feito em pouquissimos segundos sem ocupar muito processo do servidor pois й tudo feito em um processo alternativo - Fora da main thread
Foi testado pwncurl, HTTP da sa:mp e BaixarWebSites de Ken, nenhum conseguiu fazer a leitura de arquivos grandes como uma mъsica de 5 megabytes digamos.
O pwncurl й feito a base da uma include chamada CURL e esta biblioteca й apenas usada e especificada para requerimento de sites pequenas.
BaixarWebSites de Ken й uma ferramenta feita com bastante gambiarra, ela cria um VBS alternativo que й aberto no servidor e outro Site.txt que terб o conteъdo do site, logo dб conflito baixar 2 sites seguidos e nгo sabe-se quando o arquivo termina de baixar
HTTP de sa:mp й quase o mesmo que pwncurl, sу que й muito genйrica e nгo funciona com arquivos grandes :d
----
Criei este sistema, pois pretendo criar um analisador de arquivos MP3 E TESTEI todos sistema de downloads e nenhum funcionou para um arquivo MP3 grande (para poder ler informaзхes de um arquivo MP3 para PlayAudioStream da SA:MP)
-------
Download:
Plugin:
Baixe o plugin deste site abaixo e coloque na pasta plugins do seu servidor. Apуs isto vб no server.cfg e em uma linha coloque plugin udtf
Download do Plugin:
http://www.solidfiles.com/d/470e668d4a/
Source Code
PHP код:
//-------------------------------------------------
// URL DOWNLOAD TO FILE
// Por Bruno da Silva @ [iPs]TeaM 2012
//-------------------------------------------------
#include "main.h"
#include "malloc.h"
#include <windows.h>
#include <urlmon.h>
#include <stdio.h>
#include <iostream>
#include <fstream>
#pragma comment(lib, "urlmon.lib")
logprintf_t logprintf;
void **ppPluginData;
using namespace std;
extern void *pAMXFunctions;
PLUGIN_EXPORT unsigned int PLUGIN_CALL Supports()
{
return SUPPORTS_VERSION | SUPPORTS_AMX_NATIVES;
}
PLUGIN_EXPORT bool PLUGIN_CALL Load(void **ppData)
{
pAMXFunctions = ppData[PLUGIN_DATA_AMX_EXPORTS];
logprintf = (logprintf_t)ppData[PLUGIN_DATA_LOGPRINTF];
logprintf("URLDownloadToFile Por Bruno da Silva");
return true;
}
PLUGIN_EXPORT void PLUGIN_CALL Unload()
{
logprintf("URLDownloadToFile Por Bruno da Silva");
}
/********************************************************************************/
char *parametro[2];
int processar;
void WINAPI processoAlternativo(LPVOID parames);
void WINAPI processoAlternativo(LPVOID parames)
{
char string[64] = "scriptfiles/";
strcat_s(string, (LPCSTR)parametro[1]);
processar = 1;
HRESULT hr = URLDownloadToFile( NULL, (LPCSTR)parametro[0], (LPCSTR)string, 0, NULL );
char append[05] = "_OX_";
strcat_s(string, append);
FILE * pFile;
pFile = fopen (string, "w+");
if (pFile != NULL) {
fclose (pFile);
}
}
static cell AMX_NATIVE_CALL n_URLDownloadToFile(AMX *amx, cell *params)
{
if(params[0] == 8) {
amx_StrParam(amx, params[1], parametro[0]);
amx_StrParam(amx, params[2], parametro[1]);
DWORD dwXuxaTHR;
processar = 0;
HANDLE hThread = CreateThread(0,0,(LPTHREAD_START_ROUTINE)processoAlternativo, (LPVOID)0, 0,&dwXuxaTHR);
while(!processar) continue;
return 1;
}
return 0;
}
AMX_NATIVE_INFO nvoNatives[] =
{
{ "URLDownloadToFileInterno", n_URLDownloadToFile},
{ 0, 0 }
};
PLUGIN_EXPORT int PLUGIN_CALL AmxLoad(AMX *amx)
{
return amx_Register(amx, nvoNatives, -1);
}
PLUGIN_EXPORT int PLUGIN_CALL AmxUnload(AMX *amx)
{
return AMX_ERR_NONE;
}
Include:
Pegue o cуdigo deste site e salve em a_udtf.inc Apуs isto coloque #include a_udtf em seu gamemode
pawn Код:
///////////////////////////////////////////////////////////////////////////////
// a_gvars.inc -> Por Bruno
#if !defined varGet
#define varGet(%0) getproperty(0,%0)
#endif
#if !defined varSet
#define varSet(%0,%1) setproperty(0, %0, %1)
#endif
// a_udtf.nic -> Por Bruno
// defina aqui o mбximo de downloads que podem ser feitos
#define MAX_DOWNLOADS 500
///////////////////////////////////////////////////////////////////////////////
new szSiteDownload[MAX_DOWNLOADS][128];
new szFileDownload[MAX_DOWNLOADS][064];
new giDownloads;
native URLDownloadToFileInterno(site[], arquivo[]);
stock URLDownloadToFile(site[], arquivo[])
{
static strBuff[64];
format(strBuff, 64, "%s", arquivo);
URLDownloadToFileInterno(site, strBuff);
varSet(strBuff, SetTimerEx("gDown_CHKFile", 900, true, "i", giDownloads));
format(szFileDownload[giDownloads], 64, arquivo);
format(szSiteDownload[giDownloads], 00128, site);
giDownloads++;
return true;
}
forward gDown_CHKFile(fileid);
public gDown_CHKFile(fileid)
{
if(szFileDownload[fileid][0]) {
static stmpHeCK[64];
format(stmpHeCK, 64, "%s_OX_", szFileDownload[fileid]);
if(fexist(stmpHeCK)) {
KillTimer(varGet(szFileDownload[fileid]));
// public OnURlDownloaded(site[], file[])
CallLocalFunction("OnURlDownloaded", "ss", szSiteDownload[fileid], szFileDownload[fileid]);
fremove(stmpHeCK);
}
}
return true;
}
forward OnURlDownloaded(site[], arquivo[]);
(pastebin: http://pastebin.com/dVuPEe3G)
Modo de uso:
O modo de uso й muito simples !! Para baixar um arquivo .mp3 em seu servidor digamos, vocк usa a seguinte funзгo:
PHP код:
URLDownloadToFile("http://dl.dropbox.com/u/89425664/Julho01.mp3", "arquivoBaixado.mp3");
PHP код:
forward OnURlDownloaded(site[], arquivo[]);
public OnURlDownloaded(site[], arquivo[]) {
printf("O arquivo vindo do site %s \n terminou de baixar e esta salvo em %s", site, arquivo);
return true;
}
Enfim .. Fiz o tуpico na corrida, se virem ler uraurua Se tiverem dъvidas explico melhor
------------------------------------------------------
Desenvolvido por Bruno da Silva @ [iPs]TeaM 2010 2012
------------------------------------------------------