Entrar
¿Usuario nuevo? Regístrate
war_3d · War 3D
? ¿Ya estás suscrito? Entrar en Yahoo!

Consejos de Yahoo! Grupos

¿Sabías que...?
Puedes buscar mensajes antiguos en un grupo.

Mensajes

  Mensajes Ayuda
Avanzado
Sockets, Comunicaciones   Lista de mensajes  
Responder | Reenviar Mensaje #376 de 894 |
Re: [war_3d] Sockets, Comunicaciones

Hola Zeru,

Como bien dices no es posible realizar una clase donde tengamos una
funcion de un Hilo, ( asi como ninguna función CALLBACK, como un
procedimiento ventana, pues son llamadas por el sistema y este tiene un
sintaxis estrictas al respecto ). Por lo que hace referencia al cast de
los parametros de los hilos, es lógico, pues cada hilo puede recibir un
tipo de parametro distinto, así que en cada caso habra que convertir al
valor deseado. Si deseas enviar más de un parámetro envias una estructura,
parece una tonteria decirlo, pero hay mucha gente que se le olvida.

Un Saludo.

> Hola:
>
> Sigo con lo de las comunicaciones, como ya dije estoy haciendo una
> libreria, la cual esta quedando bastante bien :), por dentro en un
> cdesastre :P ya que c++ no es muy bueno para hacer hilos, sucede que hay
> te tener una funcion de tipo void* FUN (void *) y luego dentro de ella
> hacer un cast para poder pasarle los parametros, pero lo que no me
> esplico es poque esta funcion no puede estar dentro de un objeto, es
> decir tiene que se una funcion global, no puede ser el metodo de alguna
> clase. Esto hace que el codigo quede muy revielto. Si alguno lo ha
> intentado sabra de que hablo.
>
> La cosa es que por fuera, queda bastante bien. Veamos un pequeño
> servidor, un chat muy simple, usando la libreria que estoy haciendo. El
> server reenvia lo que dice un cliente, a los demas clientes, contesta
> los PINGS y acepta el comando QUIT ye INFO
>
> Solo estamos usando el evento Recive, pero ya tengo hechos otros. pongo
> el API mas abajo.
>
>
> #include "SolarSockets.cpp"
>
>
> // ---------------------------
> bool EventoRecibe (string Cadena, int ID, ServerP2P* Server)
> {
>
> string Mensaje = "";
>
> if (Cadena == "PING\r\n")
> {
> // Contestamos con un Ping
> Server->Send ("PONG\r\n", ID);
> }
> else if (Cadena == "QUIT\r\n")
> {
> // Si nos envian la cadena QUIT lo desconectamos
> Server->Close (ID);
> }
> else if (Cadena == "INFO\r\n")
> {
> // Un cliente esta pidiendo informacion
>
> char CountChar[20]; // Convertimos de INT a CONST CHAR*
> sprintf(CountChar,"%i",Server->Count());
> Mensaje = string("Numero de Clientes: ") + CountChar + "\r\n";
> Server->Send (Mensaje, ID);
> }
> else
> {
> // Convertimos de INT a CONST CHAR*
> char IDchar[20];
> sprintf(IDchar,"%i",ID);
>
> // Concatenamos todo para formar la respuesta
> Mensaje = Mensaje + "[Cliente:" + IDchar + " dice] " + Cadena;
> cout << Mensaje;
>
> // Enviamos el mismo mensaje a todo los clientes, pero no al que
> lo envio.
> Server->SendMulticast(Mensaje, ID);
> }
> }
>
> // ---------------------------
> int main (void)
> {
>
> // Declaramos un servidor
> ServerP2P ServerZeru;
>
> // Le decimod a que funcion hay que llamar cuando ocurra el evento
> Recive
> ServerZeru.setEventoRecive(EventoRecibe);
>
> // Lo ponemos a escuchar por el puerto 9999.
> ServerZeru.Escucha_BackGround(9999);
>
> // Para que no se cierre inmediatamente.
> getch()
> return 0;
> }
>
>
> Esto mismo abria tomado lineas y lineas porgramandolo a pie. La libreria
> esta quedando bien, tanto asi que me estan dando ganas de tenerla como
> un proyecto por separado y usarla claro para el WAR y otros proyectos.
> Tendria una licencia dual, libre para proyectos libres y con un costo
> para proyectos comericiales.
>
> El API del objeto ServerP2P:
>
> bool Escucha_BackGround(int puerto); //Pone el server en Escucha
> bool Send (string Cadena, int ID); //Envia una cadena al CLiente ID
> bool Close (int ID); // Cierra la coneccion con el cliente ID int
> Count(); // Retorna el nuemro de clientes conectados
> bool SendMulticast (string Cadena); // Envia el mismo mensaje a
> todos los cliente
> bool SendMulticast (string Cadena, int ID); // Envia el mismo mensaje
> a todo menos a ID
>
> void setEventoRecive (bool (*_Recibe)(string, int, ServerP2P*)); // Le
> eindica al objeto que hay que llamar cuando ocurra el evento recive
> void setEventoCierra (void (*_Cierra)(int)); // Le eindica al objeto
> que hay que llamar cuando ocurra el evento recive
> void setEventoError (void (*_Error)(int)); // Le eindica al objeto
> que hay que llamar cuando ocurra el evento recive
>
> Aun son muy poquitas solo tiene 3 eventos, pero lo basico ya esta ahi
> SEND, RECIVE, CLOSE, ERROR, pero bueno esto es los el objeto SERVER,
> tambien tengo el objeto CLIENTE bastante avanzado.
>
>
> ________________________________________________________________________
> ZeruGiran (EriC Ruiz Osornio)
>
> E-Mail: zerugiran@...
> MSN: eric@...
> Tel: 04455-30876127 (Telcel)
> Web: www.Solar-OpenSource.org
>
> ________________________________________________________________________






Vie, 11 de Jul, 2003 7:56 am

bueno@...
Enviar mensaje Enviar mensaje

Reenviar Mensaje #376 de 894 |
Desplegar mensajes Autor Ordenar por fecha

Hola: Sigo con lo de las comunicaciones, como ya dije estoy haciendo una libreria, la cual esta quedando bastante bien :), por dentro en un cdesastre :P ya...
ZeruGiran
zerugiran@...
Enviar mensaje
10 de Jul, 2003
7:17 pm

Hola Zeru, Como bien dices no es posible realizar una clase donde tengamos una funcion de un Hilo, ( asi como ninguna función CALLBACK, como un procedimiento...
Carlos Bueno Martí...
bueno@...
Enviar mensaje
11 de Jul, 2003
7:49 am
Avanzado

Copyright © 2009 Yahoo! Todos los derechos reservados.
Política de Privacidad Actualizada - Condiciones del servicio - Directrices - Ayuda