Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

brcontainer

Progressbar com Socket

Recommended Posts

É possivel fazer uma barra de progresso em um SOCKET no AS3?

 

 

Vejam como é a idéia:

 

port = 80;
host = "localhost";
sock = new Socket;
sock.addEventListener(Event.CONNECT,_conn);
sock.addEventListener(ProgressEvent.SOCKET_DATA,_onData);
sock.connect(host,port);

function _onData(e:ProgressEvent)
{
trace("Reposta do servidor: "+sock.readUTFBytes(sock.bytesAvailable));
}

function _conn(e:Event){
var bodyPart:Array ="Conteudo RAW com 8 megas";
var headerPart:Array = [
	"POST /php-service.php HTTP/1.1",
	"Content-Type: application/soap+xml; charset=utf-8",
	"Host: "+host,
	"Content-Length:" + bodyPart.length,
	"Connection: close",
	"\r\n"
];

sock.writeUTFBytes(headerPart.join("\r\n"));
sock.writeUTFBytes(bodyPart);//CORPO - conteudo que vai ser feito download pelo webservice
sock.flush();
}

 

 

Assim eu consigo conectar e enviar, mas se o arquivo que eu estiver para enviar for muito grande eu não quero que o cliente pense que travou ou deu erro, queria implementar uma barra de progresso. Pois que o conteudo que estou enviando para o servidor é muito pesado ocorre isso. Consegui simular uma barra de progresso, mas não é a mesma coisa.

 

Obrigado por lerem. Qualquer luz por favor me avisem

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara use o protocolo HTTP POST para subir o arquivo...

Quando eu trabalhava com Flash, também preferia converter o objeto pra bytes, e enviar via amf um ByteArray pro servidor...

Via socket o que você está fazendo é mandar "via http-post" no braço

 

Mas sobre o pbar de upload, sinceramente nunca vi..

Mas de uma olhada neste link: http://code.google.com/p/in-spirit/wiki/MultipartURLLoader

talvez ajude ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado, mas não esta muito claro...

 

Cara use o protocolo HTTP POST para subir o arquivo...

Não é o que eu to fazendo?

 

 

Que eu saiba um socket é qualquer conexão, no caso estou usando porta 80, obviamente seria HTTP (na maioria dos servidores). Se eu envia-se para porta 25(smtp geralmente) então ao invés de passar um comando HTTP eu passaria um comando assim:

        var headerPart:Array = [
               "HELO "+host,
               "MAIL FROM: mail@domain.ext",
               "RCPT TO: mail@otherdomain.ext",
       ];

 

Obviamente que em SMTP eu tenho que fazer um feedback para cada comando enviado do Array no loop, acaso haja falha no comando haveria um BREAK no loop, mas isso é outra história.

 

Eu fiz com URLLoader a mesma conexão, porem somente Loader tem progress, URLLoader tem progress mas não verifica o envio do "_urlloader.data" somente a resposta, e geralmente as repostas tem 1k então não vale de nada para um UPLOAD, esse link que você me enviou eu já tinha visto, só não consegui fazer o download ainda.

 

Mas assim que eu entender o código e construir(se for possivel fazer como eu quero) eu disponibilizo uma CLASSE (package)para facilitar.

 

Feliz ano novo e obrigado por responder.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara é que via socket acho q você está indo mtu "raíz". Se se assim está rolando então sussa ;)

Pq com urlrequest já fazia o uplaod de boas (http://labs.findsubstance.com/2008/04/03/as3-upload-encode-images/)

 

Via file reference tmb dá! e na documentação mostra um evento disparado durante o upload:

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/FileReference.html#upload%28%29

progress:ProgressEvent — Dispatched periodically during the file upload operation.

 

não testei, mas espero ter ajudado ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então mas é um sistema de integração, ele "sincroniza" os bancos de dados de ambos servidores por WEBSERVICE

 

quanto menos trabalho manual melhor.

 

Por isso não posso usar a função UPLOAD do filereference.

 

Então eu já fiz em URLLoader+URLRequest, porem "ProgressEvent.PROGRESS", só funciona na resposta da página e não no envio.

 

Grato mais uma vez pela atenção, teria alguma outra ideia?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.