Autor Tema: Binding mod_curl [Descarga de ficheros de Internet]  (Leído 31738 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado josebita

  • Administrator
  • Hero Member
  • *****
  • Mensajes: 4039
  • Karma: 257
  • Sexo: Masculino
    • Ver Perfil
    • BennuGD Mobile Worklog
Binding mod_curl [Descarga de ficheros de Internet]
« en: Noviembre 24, 2011, 04:32:52 pm »
He creado un pequeño binding para libcurl de forma que la gente que lo desee pueda descargar recursos de Internet desde su código BennuGD.
Ahora mismo la librería es muy limitada y sólo soporta una descarga cada vez pero esa limitación será eliminada.


Aquí podeis ver un pequeño vídeo de un código que se descarga la página principal de BennuGD de internet:
http://www.youtube.com/watch?v=2pm_sPxkqsc
El API es aún muy simple:
  • int curl_get(string srcURL, string dstFILE);
    Descarga los datos de scrURL (que debe tener el formato URL apropiado). Soporta descargas a través de muchos tipos de protocolos distintos, incluídos HTTP, HTTPS y FTP.
    dstFILE es la ruta a la que se escribirá el fichero descargado y por tanto debe ser escribible por el usuario que ejecute el código BennuGD.
    La función devuelve 0 pero cuando se soporten descargas simultáneas devolverá el ID de la transferencia al que habrá que refereirse para obtener información acerca de la descarga.
  • int curl_info(int curl_id, int info_type)
    Devuelve información acerca de la transferencia con ID curl_id. El segundo argumento especifica qué clase de información se desea obtener. Ahora mismo se soporta:
    • 0: Devuelve 1 si la transferencia aún está en progreso. En otro caso devuelve 0.
    • 1: Devuelve 1 si la transferencia ya terminó. En otro caso devuelve 0.
    • 2: Devuelve 1 si la transferencia ha fallado. En otro caso devuelve 0.
    Ahora mismo la librería ignora el valor del primer argumento pero cuando se soporten múltiples descargas simultáneas, será el que identifique a cuál nos referimos.
[Edito] Actualizaré el API cuando tenga un ratillo, mientras tanto echadle un ojo al ejemplo incluído.

Lista de errores que puede dar curl_perform():
http://code.google.com/p/bennugd-monolithic/source/browse/trunk/3rdparty/curl/include/curl/curl.h#393

Espero que os sea útil. Iré subiendo binarios para más plataformas según los vaya compilando.


[Edito] Evidentemente la idea es que esto vaya -también- dentro de los ports a iOS y Android.
« última modificación: Enero 24, 2012, 02:35:46 pm por josebita »

Desconectado KeoH

  • Hero Member
  • *****
  • Mensajes: 1170
  • Karma: 17
  • Sexo: Masculino
    • Ver Perfil
Re: Bindings mod_curl [Descarga de ficheros de Internet]
« Respuesta #1 en: Noviembre 24, 2011, 05:18:02 pm »
Buen comienzo para la libreria xDD Pero la libcurl tiene mas funciones q iras añadiendo? porq con esto no hago yo un World of Warcraft bennusino xD

Desconectado josebita

  • Administrator
  • Hero Member
  • *****
  • Mensajes: 4039
  • Karma: 257
  • Sexo: Masculino
    • Ver Perfil
    • BennuGD Mobile Worklog
Re: Bindings mod_curl [Descarga de ficheros de Internet]
« Respuesta #2 en: Noviembre 24, 2011, 05:29:49 pm »
Buen comienzo para la libreria xDD Pero la libcurl tiene mas funciones q iras añadiendo? porq con esto no hago yo un World of Warcraft bennusino xD
¡Excusas!

El binding irá creciendo, pero de momento el primer paso es conseguir las funciones necesarias para poder "saltarse" la limitación de los 20MiB por 3G de Apple.

El verdadero poder de la librería se controla mediante las opciones que se pasan en el paso de configuración, no en el número de funciones. En todo caso se añadirá soporte para otras cosas, como subida de ficheros a internet.

Otra cosa que he hecho en un rato es integrar la librería dentro del proyecto de BennuGD monolítico para iOS, así que debería ser cuestión de un rato tener la librería funcionando, a ver si mañana por la tarde o el finde saco un rato y actualizo los binarios, como prometí.

Una cosa, Splinter: tú para la forma de "mensajería" cliente-servidor que comentabas ¿usas el API curl_easy?.

Conectado SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12460
  • Karma: 367
  • Sexo: Masculino
    • Ver Perfil
Re: Bindings mod_curl [Descarga de ficheros de Internet]
« Respuesta #3 en: Noviembre 24, 2011, 06:20:51 pm »
joseba, creo que es un error implementar descarga de archivos... lo ideal es implementar mensajes get/post, si en la respuesta de un mensaje get/post queres mandar un archivo o un mensaje, lo haces indistintamente, que el usuario reciba en una string la respuesta y segun lo que quiera hacer lo graba a un file o lo procesa como un mensaje...

si, uso curl_easy_perform, y tambien tengo unos callbacks para la parte ssl.
« última modificación: Noviembre 24, 2011, 06:23:32 pm por SplinterGU »
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Conectado SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12460
  • Karma: 367
  • Sexo: Masculino
    • Ver Perfil
Re: Bindings mod_curl [Descarga de ficheros de Internet]
« Respuesta #4 en: Noviembre 24, 2011, 10:11:41 pm »
decir "error" fue como mucho... es que no me salia la palabra correcta... quise decir que seria mejor implementar metodo get/post y con eso alcanza para lo que quieras.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Desconectado pinger

  • Newbie
  • *
  • Mensajes: 35
  • Karma: 0
    • Ver Perfil
    • iPhone Games Development Team, not just iPhone Games.
Re: Bindings mod_curl [Descarga de ficheros de Internet]
« Respuesta #5 en: Noviembre 25, 2011, 12:12:54 am »
+1 SplinterGU , no es nada seguro implementar lo que decía Erkos, es decir usar ftp para subir las puntuaciones. Supongo que te refieres a eso. Que se implemente ftp para subir bajar ficheros, puede estar bien, quien te dice que no vas a hacer una aplicación en bennu que es un cliente o servidor de ftp?

Desconectado osk

  • Hero Member
  • *****
  • Mensajes: 516
  • Karma: 52
  • Sexo: Masculino
    • Ver Perfil
Re: Bindings mod_curl [Descarga de ficheros de Internet]
« Respuesta #6 en: Noviembre 25, 2011, 12:55:52 am »
YEAAAAAAAH!!!!!!!!!

Conectado Erkosone

  • Hero Member
  • *****
  • Mensajes: 860
  • Karma: 51
    • Ver Perfil
Re: Bindings mod_curl [Descarga de ficheros de Internet]
« Respuesta #7 en: Noviembre 25, 2011, 02:08:03 am »
Madre mía, que velocidad de implementación.
Muchas gracias por la lib.
Haber si la vemos pronto en el binario monolitico de iOS  :)

Conectado Erkosone

  • Hero Member
  • *****
  • Mensajes: 860
  • Karma: 51
    • Ver Perfil
Re: Bindings mod_curl [Descarga de ficheros de Internet]
« Respuesta #8 en: Noviembre 25, 2011, 02:25:35 am »
Tengo una sugerencia algo simple pero puede ser de gran utilidad para los que hacemos juegos en iOS.
- Bueno, igual digo alguna burrada, disculpadme por ello, no soy ningún profesional en el tema, solo aficionado.


El tema es este:
- Crear un proceso en bennu que se mantenga a la espera de una llamada, cuando se produzca la llamada, desde el proceso "que espera la llamada" poder almacenar en una variable string la IP del solicitante.


Los solicitantes son la gente que está jugando a los juegos, el que espera la llamada será un server privado programado en Bennu para registrar el número de partidas que juega la gente, y con la IP "a bote pronto" conocer desde que paises/zonas se está jugando y sacar estadísticas.
Puede sonar un poco ilegal, no se si esto está permitido, pero seguramente lo harán muchos juegos comerciales de PC.


Esto es posible con esta lib de alguna manera?

Desconectado josebita

  • Administrator
  • Hero Member
  • *****
  • Mensajes: 4039
  • Karma: 257
  • Sexo: Masculino
    • Ver Perfil
    • BennuGD Mobile Worklog
Re: Bindings mod_curl [Descarga de ficheros de Internet]
« Respuesta #9 en: Noviembre 25, 2011, 04:19:07 am »
decir "error" fue como mucho... es que no me salia la palabra correcta... quise decir que seria mejor implementar metodo get/post y con eso alcanza para lo que quieras.
Quise entender eso :)

Cuando lo hice de la manera en que lo hice estaba pensando en la gente que lo único que quiere hacer es descargar cosas de internet (mapas nuevos, recursos y tal) y creo que así les será más fácil, de todas formas lo que comentas es cierto. Creo que sería bueno tener una función "fácil" de descarga y otra como comentas.

A nivel de implementación, sería una función que devolvería un string -que se actualizaría a través de las rutinas de curl- y el usuario lo iría leyendo desde BennuGD. Algo así estaría bien, ¿no?.
La descarga en sí se controlaría con la misma función que las descargas que están implementadas ahora.

Conectado Goku jr

  • Sr. Member
  • ****
  • Mensajes: 291
  • Karma: 6
  • Sexo: Masculino
    • Ver Perfil
Re: Bindings mod_curl [Descarga de ficheros de Internet]
« Respuesta #10 en: Noviembre 25, 2011, 04:59:12 am »
Esperando version para windows!!! :D

Conectado SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12460
  • Karma: 367
  • Sexo: Masculino
    • Ver Perfil
Re: Bindings mod_curl [Descarga de ficheros de Internet]
« Respuesta #11 en: Noviembre 25, 2011, 05:19:34 am »
decir "error" fue como mucho... es que no me salia la palabra correcta... quise decir que seria mejor implementar metodo get/post y con eso alcanza para lo que quieras.
Quise entender eso :)

Cuando lo hice de la manera en que lo hice estaba pensando en la gente que lo único que quiere hacer es descargar cosas de internet (mapas nuevos, recursos y tal) y creo que así les será más fácil, de todas formas lo que comentas es cierto. Creo que sería bueno tener una función "fácil" de descarga y otra como comentas.

A nivel de implementación, sería una función que devolvería un string -que se actualizaría a través de las rutinas de curl- y el usuario lo iría leyendo desde BennuGD. Algo así estaría bien, ¿no?.
La descarga en sí se controlaría con la misma función que las descargas que están implementadas ahora.

a ver... es que no es practico, asi como esta... el pathname+archivo destino (en el caso de descargas) es poco probable que sepas cuales son para casos de actualizacion, esos datos normalmente son datos que se negocian en la comunicacion, donde normalmente se dice la lista de archivos que vas a recibir y/o los que debes borrar... entonces tener una funcion de descarga implementada asi, no tiene sentido...

ademas, sistema de comunicacion implementado por archivo es lo mas primitivo y poco profesional que existe, eso se usa(ba) en aplicaciones donde los programadores no eran capaces de dominar una comunicacion por mensajes... o cuando se queria comunicar un sistema DOS con uno windows o linux... puf, es la cosa mas fea que vi en mi vida...

erkosone, lo que pedis se puede hacer con la libsock, o alguna de esas... no veo por que decis que puede ser ilegal...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Desconectado josebita

  • Administrator
  • Hero Member
  • *****
  • Mensajes: 4039
  • Karma: 257
  • Sexo: Masculino
    • Ver Perfil
    • BennuGD Mobile Worklog
Re: Binding mod_curl [Descarga de ficheros de Internet]
« Respuesta #12 en: Noviembre 25, 2011, 06:25:25 am »
@erkosone: O puedes ir haciendo peticiones al servidor cada cierto tiempo y comprobar qué te va diciendo.
En todo caso, no puedes contar con que en dispositivos móviles desde fuera te vayan a hacer una petición con alguna librería tipo libsock: en general no se podrá. Tienen el firewall puesto a tope por defecto y nada del tráfico externo puede entrar.
« última modificación: Noviembre 25, 2011, 06:32:53 am por josebita »

Conectado SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12460
  • Karma: 367
  • Sexo: Masculino
    • Ver Perfil
Re: Binding mod_curl [Descarga de ficheros de Internet]
« Respuesta #13 en: Noviembre 25, 2011, 06:47:07 am »
yo habia interpretado que se referia al server... y clientes haciendo llamadas con libsock o tcpsock al server... y de ahi con la conexion establecida si esperar eventos... igual en un dispositivo movil esto solo esta bueno para comms wifi, no creo que le cause gracia a ningun usuario comerle el credito con mensajes.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Conectado Erkosone

  • Hero Member
  • *****
  • Mensajes: 860
  • Karma: 51
    • Ver Perfil
Re: Binding mod_curl [Descarga de ficheros de Internet]
« Respuesta #14 en: Noviembre 25, 2011, 06:56:00 am »
Lo de ilegal lo decía por que no estaba seguro, en el fondo es una chorrada si.
Ok, pues tomo nota, lo he comentado por que las lib tcp que hay por el foro ninguna está portada a iOS, entonces preguntaba si con la curl se podría hacer algo así.


Y si, poca gracia haría hacer esto por 3G la verdad.


Vale pues si se puede de alguna manera cuando esté la versión de la lib para windows e iOS registrar la IP los los teléfonos o iPod´s  que hagan la petición será genial.