Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Indy y el evento OnWork (https://www.clubdelphi.com/foros/showthread.php?t=15772)

johncook 04-11-2004 15:03:40

Indy y el evento OnWork
 
Hola:
Estoy desarrollando una aplicación para el envío y recepción de archivos. Para ello me valgo de los componentes IDTCPClient e IDTCPServer.
Cuando se realiza una transferencia, necesito mostrar un progreso del archivo. En el cliente no me ocasiona problema alguno, ya que lo controlo con el evento ONWork cuando recibe o envía un archivo.
Ahora mi problema reside en como hacer lo mismo en el servidor, ya que el mismo (me imagino que por soportar múltiples conexiones) no aparece el evento OnWork.
Este evento es una propiedad del parámetro que recibe el servidor cuando ejecuta el método OnExecute. Es decir me manda un objeto Athread del tipo IdTPeerThread.
Por lo que estuve viendo puedo acceder al método de la siguiente forma:
Athread.Connection.OnWork

Por lo tanto, lo que necesito saber, es como definir dicho método, como asociarlo a una determinada conexión (uno por cada conexión activa), y como sabe la conexión que tiene que ejecutar dicho método.
Agradecería su respuesta a la brevedad.
Muchísimas gracias.

Descendents 04-11-2004 19:21:39

Sino entiendo mal tu pregunta. La respuesta es la siguiente.

creas una array de TIdPeerthread;
cada conexión nueva, la insertas en la array, y aumentas larray

AT : Tidpeerthread;

at.connection.onwork.
n:integer;
array sería at[n].connection.onwork

etc..

Un saludo.

Descendents 04-11-2004 19:34:45

Lo he probado y así me funciona.
Espero como te he dicho antes entender que es esto lo que necesitas.

ej: TS es un TidTCPServer;

var
AT: array of TIdPeerThread;
it : integer;

procedure TS.ServerConnect(AThread: TIdPeerThread);
begin
SetLength(AT,it+1);
AT[it] := AThread;
end;


más adelante puedes referirte a cada conexión así

AT[it].Connection.WriteLn('HOLA');
etc...

Un saludo.

johncook 04-11-2004 19:49:49

conexion
 
Bueno, gracias por la respuesta, pero parece que no se entendió bien la pregunta.
La cuestión es como hago yo para saber cual de las conexiones es la que está recibiendo datos y, como hace la conexión para llamar al evento Onwork, dado que el mismo tendría que ejecutarse automáticamente cuando empieze la recepción o transferencia de datos.
Muchas gracias.

Descendents 05-11-2004 11:54:27

No lo he probado, luuego lo probare, pero creo, que creando u procedimiento correspondiente, con los parametros que necesita, i luego haces.

at[it].connection.onwork := PROCEDIMIENTO;

y la conexion en su onwork, tendra asignado un procedimiento.

Ese procedimiento, tu lo tienes que preparar con los parametros necesarios.

Yo lo que haria es lo siguiente.
Copias exactamente, el onwork del Tidtcpcliente, y lo llamas procediementowork.

at[it].connection.onwork := procedimientowork;

Entonces tu realmente lo que estas haciendo con mi contestacion anterior, y con esta es lo siguiente.

En el onconeccted, estaras creando una conexión para poderte comunicar con cada una, y a cada conexión, le direas que en el onwork, tendra un procedimiento, que sera el procediminetowork.

Espero me entiendas, me explico fatal



De todas maneras, te agradeceria, una vez tengas el programa de copia de ficheros, me lo dejaras ver, para poder sacar un par de ideas, y poder ayudarte si puedo.

Yo hice un programa, con tidtcpcliente, el cual se conecta a una direccion ip estatica, entonces yo con un programa con tidtcpserver, podia recibir, tantas conexiones de diferentes ordenadores como programas con Tidtcpcliente estuviran abiertos. Y desde mi programa controlar todas las maquinas.Cogí el control de todas las máquinas.Era simplemetne una prueba, y me salió todo bastante bien, pero la copia de archivos, me funciona a medias, no se porque a veces funcionaba i a veces no.

El problema creo que residia,que el programa cliente, no tiene evento cuando lee información, entonces tengo timer, que lee la información cada cierto tiempo.

Si fueras tan amable de dejarme hechar un vistazo, y a la vez a ver i puedo ayudarte.

Saludos


La franja horaria es GMT +2. Ahora son las 17:09:21.

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