Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Menu

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menu

Mensajes - Altair

#1
Proyectos / Publicado NGL 1.0
12 de Enero de 2015, 10:02:23 AM
Buenas,

pues eso, que ya lo he publicado, creo que es lo suficientemente buena y estable como para ser una primera version. Se podrian poner muchas mas cosas, pero creo que de momento es mejor que se pruebe lo que hay.

Trae el codigo fuente, la documentacion y unos cuantos ejemplos. Tiene licencia LGPL, me ha parecido la mejor opcion.
La he programado en Linux (concretamente Debian) con C/C++, y se necesitan unos conocimientos mas bien basicos.

Creo que esta todo bastante bien, para ser una primera version.
(NOTA: especialmente teniendo en cuenta el tema del diseño, cuando veais alguno de los ejemplos ya lo entendereis)

http://sourceforge.net/projects/nautilusgl/

Pongo aqui la referencia de funciones, para que os hagais una idea rapida:

FUNCIONES DE ENTIDADES
   load
   unload

   set_x
   set_y
   set_xy

   set_signal
   get_signal

   set_region_x
   set_region_y
   set_region_w
   set_region_h
   get_region_x
   get_region_y
   get_region_w
   get_region_h

   set_main_icon

FUNCIONES DE INTERACCION ENTRE PROCESOS
   ngl_collision
   ngl_get_angle
   ngl_get_dist
   ngl_advance

FUNCIONES MATEMATICAS
   ngl_rand_seed
   ngl_rand

FUNCIONES GRAFICAS
   ngl_alpha
   ngl_mask

   ngl_put_pixel

   ngl_get_pixel_r
   ngl_get_pixel_g
   ngl_get_pixel_b

   ngl_rotate

   ngl_geom_hline
   ngl_geom_vline
   ngl_geom_line
   ngl_geom_line_aa
   ngl_geom_line_thick

   ngl_geom_rectangle
   ngl_geom_rectangle_rounded

   ngl_geom_box
   ngl_geom_roundedbox

   ngl_geom_circle
   ngl_geom_circle_aa
   ngl_geom_circle_filled

   ngl_geom_arc

   ngl_geom_ellipse
   ngl_geom_ellipse_aa
   ngl_geom_ellipse_filled

   ngl_geom_pie
   ngl_geom_pie_filled

   ngl_fill

FUNCIONES DE MUSICA
   load
   unload
   play
   stop
   pause
   resume
   rewind
   volume

FUNCIONES DE SONIDO
   load
   unload
   play
   play_num
   
   volume
   volume_up
   volume_down

FUNCIONES DE ENTRADA
   ngl_key

   ngl_mouse_get_x
   ngl_mouse_get_y
   ngl_mouse_get_button_state

FUNCIONES DE TEXTOS
   ngl_load_font
   ngl_unload_font

   ngl_font_set_color

   ngl_font_text_solid_basic
   ngl_font_text_solid_utf
   ngl_font_text_shaded_basic
   ngl_font_text_shaded_utf
   ngl_font_text_blended_basic
   ngl_font_text_blended_utf

FUNCIONES DE INICIALIZACION Y FINALIZACION
   ngl_quit

   ngl_init_ttf
   ngl_ttf_quit

   ngl_sound_init
   ngl_sound_close

FUNCIONES DE FPS
   ngl_set_fps
   ngl_get_fps

FUNCIONES DE LA PANTALLA PRINCIPAL
   ngl_screen_set_bpp
   ngl_screen_get_bpp

   ngl_screen_set_main_text

   ngl_create_screen
   ngl_clear_screen
   ngl_frame

   ngl_screen_set_region_x
   ngl_screen_set_region_y
   ngl_screen_set_region_w
   ngl_screen_set_region_h

   ngl_screen_get_region_x
   ngl_screen_get_region_y
   ngl_screen_get_region_w
   ngl_screen_get_region_h

FUNCIONES DE PINTADO
   ngl_paint
   ngl_paint_region
   ngl_paint_entity

FUNCIONES DE PLANO
   add
   del
   get_number
   paint
   paint_one
   paint_group
   swap

FUNCIONES DE TIMER
   start
   stop
   get_ticks
   pause
   unpause

   is_started
   is_paused

FUNCIONES DE SCROLL HORIZONTAL
   load
   unload
   set_x1
   set_x2
   set_y
   paint
   move

FUNCIONES DE SCROLL VERTICAL
   load
   unload
   set_x
   set_y1
   set_y2
   paint
   move

FUNCIONES VARIAS
   ngl_pause

FUNCIONES DE PATHFINDING
   add_node
   del_node
   num_node

   set_x
   set_y
   get_x
   get_y

   add_son
   del_son
   num_son

   set_son
   get_son

   search
#2
General / Re:Proteger el contenido de la base de datos
17 de Junio de 2014, 06:49:50 PM
Citar
Que mas da que el administrador tenga que escribir AB o ABFG para acceder? La cosa es que el administrador escribe una contrasena y entra en el sistema, no veo que consigas nada con esto.

Es un tipo de acceso diferente. El administrador puede acceder a la base de datos, pero el contenido está cifrado y para descifrarlo se necesita una clave compuesta de varias partes. El administrador sólo tiene una de esas partes. Cuando el programa se ejecuta es cuando se pueden unir todas las partes de la clave y entonces descifrar.

Puede que se vea mejor con un ejemplo:

Contenido sin cifrar: hola
Contenido cifrado: jpmt

Clave completa: ASFTMY.

Parte del admin: ASF.

Parte del usuario: TMY

Se ejecuta el programa, se unen las claves, contenido descifrado.
#3
General / Re:Proteger el contenido de la base de datos
17 de Junio de 2014, 06:33:02 AM
Citar
Seguro que quieres decir cifrados? No querras decir que guardas un hash criptografico de ellos? Porque si los has cifrado, donde guardas la clave para descifrarlos?

Correcto, me refiero a un hash.

Citar
Este problema no tiene que ver con cifrado, tiene que ver con permisos, y ademas no tiene solucion. Siempre habra alguien que puede acceder a los datos y cambiarlos, tienes que asegurarte que las personas que tienen permiso para hacer eso son de confianza.

Ciertamente siempre habrá forma de acceder.

Lo que se me ocurrió, que aún no se si tiene mucho sentido, es que ciertas contraseñas esten divididas en varias partes y que sólo el programa sabe como combinarlas. Por ejemplo la contraseña de admin podría ser "ABFG"; sólo el admin del servidor conoce "AB" y la tiene que introducir cada vez que la quiera usar, y al mismo tiempo sólo el programa conoce "FG" y está localizada en el propio programa. Al unirse, ABFG, es cuando puede accederse.

#4
General / Re:Proteger el contenido de la base de datos
16 de Junio de 2014, 05:05:49 PM
Hola,

gracias por la respuesta, lo de los temas legales ya lo conocía, aunque siempre va bien recordarlo un poco por encima por si acaso. De todas formas eso afecta de forma limitada, ya que dichas leyes afectan a españoles y territorio español, si tanto el servidor como el cliente no lo son, ya no tienen efecto esas leyes, sino otras.

De todas formas eso de poner una seguridad basada en permisos, creo que también depende. Una persona que tenga acceso de root puede acceder a lo que quiera y cambiarlo, pero de momento para simplificar las cosas voy a suponer que se puede confiar en el. Al fin y al cabo, si los jugadores ven que no pueden confiar en el admin de un servidor posiblemente se largarán a otro servidor.
#5
General / Proteger el contenido de la base de datos
15 de Junio de 2014, 08:08:36 AM
Buenas,

estoy ahora mismo con unas pruebas para almacenar información en MySQL, usando la distribución Debian.

Dado que la idea es que cualquiera se pueda bajar el servidor y el cliente, la pregunta que tengo es: ¿cifro la información de la base de datos?. Por cierto, según ciertas web el término correcto es cifrar y descifrar, no encriptar y desencriptar.

El escenario es este: una persona se baja el servidor, lo instala y crea todo el sistema. X usuarios se bajan el cliente y se conectan al servidor.

Hay datos que por su naturaleza estan cifrados, por ejemplo el email y el password de los usuarios y admins.

Sin embargo hay otros datos de los jugadores que son más sensibles, como la cantidad de recursos que tiene y su tipo. La idea es que dichos datos queden protegidos de cambios no autorizados. Ejemplo: el admin del servidor se conecta y que quita recursos a un jugador y le da recursos a otro jugador. Puede que haga eso porque uno le cae bien y el otro le cae mal, o que lo haga simplemente porque sí, o por lo que sea.

El tipo de cifrado ya lo tengo mas o menos pensado, pero no se si esta es la mejor opción o hay alguna otra mejor.

Gracias.
#6
Creo que entiendo por donde vas.

Sigo en la duda:
1) GUI basada en GTK: pierdo la integracion grafica con SDL pero, funcionar, lo que es funcionar, funciona.
2) GUI basada en lineas, circulos, etc: hacer todo lo no grafico desde cero.
3) Sin GUI. Un sistema grafico basico, funcional, pero menos potente.

Estoy entre la 1 y la 3, inclinandome hacia la 3.
#7
Creo que es algo parecido, pero sin skin predeterminado siquiera.

Mas que GUI, parece UI porque todo lo que sean graficos los tienen que poner el desarrollador.
#8
Buenas,

quiero exponer esta idea, que llevo unos dias dandole vueltas y me parece que puede ser interesante, a ver que os parece a los demas.

Todos los juegos tienen, de una forma o otra, botones para realizar acciones: el boton Aceptar, el de Cancelar, los de Pantalla Siguiente, etc.

Habia pensado en meter a mi proyecto una GUI basica basada en GTK, pero he pensado: ¿y cuando quieran usar otros graficos, que?. Cada juego es un mundo (graficamente hablando) y hacer que los graficos de la GUI sean los mismos para todos los juegos no parece buena idea.

Y ahi se me ha ocurrido: ¿y un sistema que sean todo menos los graficos en si mismos?, los graficos los pone el juego y todo lo demas el sistema. Por ejemplo, un boton de menu puede tener los siguientes estados: normal, seleccionado, enfocado (raton encima), desactivado. El juego puede usar los estados que quiera, o todos, y asignar a cada uno un grafico diferente.

La misma idea aplicada a cualquier elemento de una GUI: barras de scroll, menus, etc.
#9
Buenas,

he hecho un pequeño programa de tipo cliente servidor, necesito ayuda para probarlo.

Se divide en un servidor que acepta un maximo de 3 clientes simultaneos y el cliente que envia datos. Esta hecho en C y usa las versiones de desarrollo de SDL y SDL_net. Funciona en Linux Debian, pero deberia ser portabie a otras distribuciones y tambien a Windows,

En mi ordenador funciona, pero necesito que se pruebe en una LAN, y si es posible tambien por Internet.

Si hay gente interesada en la prueba, me gustaria que me dijerais donde preferis que suba los archivos.

Edito para añadir el sitio:
https://sourceforge.net/projects/nautilusgl/files/v0.5/?
#10
Buenas, por fin puedo comunicar algunos avances que hice:

DATOS DE CLIENTE A SERVIDOR:
- Ordenador cliente:
-- Cliente MySQL

- Ordenador servidor
-- Servidor MySQL

DATOS DE SERVIDOR A CLIENTE:
- Ordenador cliente:
-- Servidor SDL_net

- Ordenador servidor
-- Cliente SDL_net

De esta forma, se envian y se reciben datos solamente cuando hace falta. La "pega" es que cuando se envian datos del servidor al cliente, el ordenador servidor tiene que tener, por cada cliente conectado, un programa que lea continuamente la base de datos para saber si hay que enviar informacion, y en caso afirmativo mandarla. La IP del cliente se puede obtener desde el servidor MySQL del ordenador servidor.

Parece un metodo aceptable cuando se tiene un numero alto y no determinado de clientes simultaneos.
#11
Sí, más o menos pienso lo mismo.

SDL_net esta bien para juegos que requieran pocos participantes. Creo que el tema esta en que la lectura del cliente se hace en el bucle principal, como también tu dices, PERO se procesa en otro sitio, lo cual hace que los datos leídos se procesan una sola vez, y no una vez por cada cliente, al contrario de lo que se medio-sugiere en el ejemplo de SDL_net con TCP.

Creo que usar MySQL puede ser una opcion cuando tenemos un numero  grande y no determinado de clientes. ¿Como cuantos?,  tal vez cuando el sistema de lectura de clientes usando SDL_net "falle" porque no puede leerlos todos. Tambien cuando se sepa que van a ser muchos y no sea posible determinar cuantos, en plan multiplayer "masivo". Lo pongo entre comillas porque me refiero a casos en los que se lean clientes del orden de cientos (200, 500, etc).

En este segundo caso parece tener sentido usar en el cliente un servidor MySQL minimo, que se activa solamente cuando se juega. Posiblemente para crear ese "MySQL minimo" haya que compilar el código fuente de MySQL desde windows.

Una vea "aclarado"(teóricamente) esto, queda el tema de como conectar del servidor al cliente para enviar datos de respuesta. Se use SDL_net o MySQL vamos a necesitar una IP y un puerto. Y parece que SDL_net no lo da porque no ha sido pensada para eso:

IPadress, de la doc de SDL_net:

typedef struct {
    Uint32 host;            /* 32-bit IPv4 host address */
    Uint16 port;            /* 16-bit protocol port */
} IPaddress;

host
    the IPv4 address of a host, encoded in Network Byte Order.
port
    the IPv4 port number of a socket, encoded in Network Byte Order.

This type contains the information used to form network connections and sockets.

A tener en cuenta que lo que se busca es la IP pública.
#12
No sé si es lo más óptimo, pero empiezo a pensar que tanto el cliente como el servidor tengan instalado un servidor MySQL y un cliente MySQL, de esta forma pueden enviar y recibir datos del uno al otro.
#13
He hecho algunos "avances". He estado trasteando y he conseguido manejar 2 clientes simultáneamente, me he topado con lo que parece ser ciertas limitaciones, ya decia el aviso en la web que SDL_net es una libreria "basica". En este caso estoy probando con un servidor que acepta 10 clientes, del 0 al  9.

Hay que leer todos los clientes al mismo tiempo, de lo contrario la información enviada por el cliente se pierde.

Dado que para mi proyecto se tienen que cumplir ciertas condiciones (licencia compatible con LGPL, multiplataforma con al menos windows y linux, válido para juegos gratuitos y comerciales, librería activa) no parece fácil encontrar opciones. Ni en la lista que puse, ni en sourceforge ni en Google. Lo mas "aceptable" que he visto es esto http://think-async.com/Asio

Las demás opciones tienen alguno de los siguientes inconvenientes:
- Solo windows o linux
- Proyecto aparentemente inactivo
-Licencia de pago si el uso es comercial
- Licencia no compatible con LGPL
- Lenguaje diferente a C/C++

Leyendo sobre como funcionaba mas o menos cada algunas librerias creo que he encontrado algo que puede servir:

- Tabla de entrada, el cliente escribe en ella conforme envia datos, se vacía cada X tiempo.
- Tabla de salida, el cliente lee en ella continuamente SOLO si esta esperando respuesta del servidor, se vacía cada X tiempo.

De esta forma, si el cliente no esta enviando nada a entrada, tampoco lee nada en salida. Si el cliente envia datos, se espera X tiempo (¿1 segundo, por ejemplo?) y empieza a leer la tabla de salida. Teoricamente, esto podria ser mejor.
#14
He estado mirando RakNet pero no me gusta por el tema de la licencia que usa.

Me he encontrado con esto http://content.gpwiki.org/index.php/Libraries#Networking

He miradoSDL_net, porque ya que uso las librerias SDL a saco, me parece una buena opcion. He conseguido poner en marcha un servidor y cliente TCP siguiendo el ejemplo de

http://content.gpwiki.org/index.php/SDL:Tutorial:Using_SDL_net

He trasteado un poco con el codigo del servidor y he conseguido que acepte dos clientes simultaneamente, cada uno funciona por su cuenta, parece una forma de comunicacion mas eficaz ya que creo que no se esta enviando y recibiendo continuamente datos, sino solo cuando se hace una peticion para enviar o recibir.
#15
Estoy mirando las diferentes opciones. Una cosa, mi proyecto lo estoy haciendo desde Linux, no me valen cosas de Windows a menos que pueda ver el codigo fuente y usarlo. Estoy usando la licencia LGPL.





Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.