Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Colaboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-11-2004
johncook johncook is offline
Miembro
 
Registrado: oct 2004
Posts: 65
Poder: 21
johncook Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 04-11-2004
Descendents Descendents is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona
Posts: 396
Poder: 22
Descendents Va por buen camino
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.
__________________
La victoria tiene cien padres. La derrota es huérfana (Napoleón).
Responder Con Cita
  #3  
Antiguo 04-11-2004
Descendents Descendents is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona
Posts: 396
Poder: 22
Descendents Va por buen camino
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.
__________________
La victoria tiene cien padres. La derrota es huérfana (Napoleón).
Responder Con Cita
  #4  
Antiguo 04-11-2004
johncook johncook is offline
Miembro
 
Registrado: oct 2004
Posts: 65
Poder: 21
johncook Va por buen camino
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.
Responder Con Cita
  #5  
Antiguo 05-11-2004
Descendents Descendents is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona
Posts: 396
Poder: 22
Descendents Va por buen camino
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 victoria tiene cien padres. La derrota es huérfana (Napoleón).
Responder Con Cita
Respuesta



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 01:14:59.


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
Copyright 1996-2007 Club Delphi