package com.adobe.protocols.dict.util { import com.adobe.net.proxies.RFC2817Socket; import flash.events.ProgressEvent; public class SocketHelper extends RFC2817Socket { private var terminator:String = "\r\n.\r\n"; private var buffer:String; public static var COMPLETE_RESPONSE:String = "completeResponse"; public function SocketHelper() { super(); buffer = new String(); addEventListener(ProgressEvent.SOCKET_DATA, incomingData); } private function incomingData(event:ProgressEvent):void { buffer += readUTFBytes(bytesAvailable); buffer = buffer.replace(/250[^\r\n]+\r\n/, ""); // Get rid of all 250s. Don't need them. var codeStr:String = buffer.substring(0, 3); if (!isNaN(parseInt(codeStr))) { var code:uint = uint(codeStr); if (code == 150 || code >= 200) { buffer = buffer.replace("\r\n", this.terminator); } } while (buffer.indexOf(this.terminator) != -1) { var chunk:String = buffer.substring(0, buffer.indexOf(this.terminator)); buffer = buffer.substring(chunk.length + this.terminator.length, buffer.length); throwResponseEvent(chunk); } } private function throwResponseEvent(response:String):void { var responseEvent:CompleteResponseEvent = new CompleteResponseEvent(); responseEvent.response = response; dispatchEvent(responseEvent); } } }