Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-04-2005
Avatar de kakesoft
kakesoft kakesoft is offline
Miembro
 
Registrado: dic 2004
Ubicación: Cuba
Posts: 99
Poder: 22
kakesoft Va por buen camino
Unhappy Ya se como detectar la entrada y salida de un cliente

Cogí el ejemplo del chat de las indy y en el evento onconect del tidtcpserver detecto cuando se conecta un nuevo cliente y el el diconect cuando se desconecta y lo hago de la siguiente manera :

procedure TfrmMain.tcpServerConnect(AThread: TIdPeerThread);
var
Client : TSimpleClient;
begin
{ Send a welcome message, and prompt for the users name }
AThread.Connection.WriteLn('ISD Connection Established...');
AThread.Connection.WriteLn('Please send valid login sequence...');
AThread.Connection.WriteLn('Your Name:');
{ Create a client object }
Client := TSimpleClient.Create;
{ Assign its default values }
Client.DNS := AThread.Connection.LocalName;
Client.Name := 'Logging In';
Client.ListLink := lbClients.Items.Count;
{ Assign the thread to it for ease in finding }
Client.Thread := AThread;
{ Add to our clients list box }
lbClients.Items.Add(Client.Name);
{ Assign it to the thread so we can identify it later }
AThread.Data := Client;
{ Add it to the clients list }
Clients.Add(Client);

showmessage('Se ha conectado'+' '+client.Name);

end;


y con showmessage tambien lo hago en el evento ondisconect pero hay un problema ahora por qué en el mensage que se muestra me sale:

En el OnConect
Se ha conectado Logging In <---- aquí no me sale correctamente el nombre del cliente que se ha conectado

En el OnDisconect
Se ha deconectado <---- aquí si me sale correctamente el nombre del cliente que se ha desconectado

Última edición por kakesoft fecha: 30-04-2005 a las 22:58:18.
Responder Con Cita
  #2  
Antiguo 01-05-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Lo que veo un poquito raro es este codigo:
Código Delphi [-]
{ Assign the thread to it for ease in finding }
Client.Thread := AThread;

En el uso normal de objetos, en realidad estas asignando punteros, no estas creando el objeto TIdPeerThread. Yo lo haría así:

Código Delphi [-]
{ Assign the thread to it for ease in finding }
// se supone que Client.Thread está declarado de tipo TidPeerThread;
client.Thread := TidPeerThread.Create(AThread.Suspended);
Client.Thread.Assign(AThread); 
// ahora si estamos copiando todo el objeto TidPeerThread.

// Antes solo guardabas el puntero, y al ser variable local de OnConnect, se 
// pierde el objeto al salir de ese procedimiento.
El constructor de un objeto TidPeerThread necesita de un parametro boolean para crearse, no tengo ni idea del valor que hay que pasarle, así que le paso el valor que tenga AThread en su propiedad Suspended porque me parece intuitivo, pero ojo, no sé si es correcto.

AThread.Data := Client; le pasa exactametne lo mismo. Esto si Funciona, porque en realidad estas guardando la direccion de memoria donde se ha creado TsimpleClient, y al acceder a AThread.Data.Name, en realidad se está accediendo directamente al mismo objeto TsimpleClient.


Cita:
Empezado por Lepe
¿me he pasado 3 pueblos?
Puesto que utilizas la lista Clients, no es necesario añadir cada TsimpleClient al listbox.

Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 01-05-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Si me permites un comentario al margen de la duda....

Puesto que al conectarse al servidor aun no sabes el nick ni la contraseña de esa persona, yo solo guardaría una lista de TidPeerThread, y cuando el usuario haga el login, entonces es cuando creo el TSimpleClient, le asocio su TidPeerThread y lo añadiría al listbox.

en el login del usuario puedes hacer Client.ListLink := listbox.items.Add('ahora si saves el nick'); y así tambien puedes tener el listbox ordenado alfabeticamente.

Un saludo de nuevo, y espero que sean viables estas sugerencias.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 01-05-2005 a las 11:19:58.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 11:12:01.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi