![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
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. |
|
#2
|
||||
|
||||
|
Lo que veo un poquito raro es este codigo:
En el uso normal de objetos, en realidad estas asignando punteros, no estas creando el objeto TIdPeerThread. Yo lo haría así: 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:
Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
|
#3
|
||||
|
||||
|
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. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
|