From da1493b95a2f0b5000a487ae373c9318c58d0b2d Mon Sep 17 00:00:00 2001 From: Cash Costello Date: Sun, 24 Oct 2010 21:08:27 +0000 Subject: partial implementation of flash uploader --- .../uploadify/com/adobe/protocols/dict/Database.as | 34 +++ .../com/adobe/protocols/dict/Definition.as | 39 +++ vendors/uploadify/com/adobe/protocols/dict/Dict.as | 328 +++++++++++++++++++++ .../com/adobe/protocols/dict/DictionaryServer.as | 28 ++ .../com/adobe/protocols/dict/MatchStrategy.as | 34 +++ .../uploadify/com/adobe/protocols/dict/Response.as | 39 +++ .../adobe/protocols/dict/events/ConnectedEvent.as | 14 + .../adobe/protocols/dict/events/DatabaseEvent.as | 26 ++ .../adobe/protocols/dict/events/DefinitionEvent.as | 27 ++ .../protocols/dict/events/DefinitionHeaderEvent.as | 26 ++ .../protocols/dict/events/DictionaryServerEvent.as | 26 ++ .../protocols/dict/events/DisconnectedEvent.as | 14 + .../com/adobe/protocols/dict/events/ErrorEvent.as | 37 +++ .../com/adobe/protocols/dict/events/MatchEvent.as | 26 ++ .../protocols/dict/events/MatchStrategiesEvent.as | 26 ++ .../adobe/protocols/dict/events/NoMatchEvent.as | 14 + .../protocols/dict/util/CompleteResponseEvent.as | 25 ++ .../com/adobe/protocols/dict/util/SocketHelper.as | 49 +++ 18 files changed, 812 insertions(+) create mode 100644 vendors/uploadify/com/adobe/protocols/dict/Database.as create mode 100644 vendors/uploadify/com/adobe/protocols/dict/Definition.as create mode 100644 vendors/uploadify/com/adobe/protocols/dict/Dict.as create mode 100644 vendors/uploadify/com/adobe/protocols/dict/DictionaryServer.as create mode 100644 vendors/uploadify/com/adobe/protocols/dict/MatchStrategy.as create mode 100644 vendors/uploadify/com/adobe/protocols/dict/Response.as create mode 100644 vendors/uploadify/com/adobe/protocols/dict/events/ConnectedEvent.as create mode 100644 vendors/uploadify/com/adobe/protocols/dict/events/DatabaseEvent.as create mode 100644 vendors/uploadify/com/adobe/protocols/dict/events/DefinitionEvent.as create mode 100644 vendors/uploadify/com/adobe/protocols/dict/events/DefinitionHeaderEvent.as create mode 100644 vendors/uploadify/com/adobe/protocols/dict/events/DictionaryServerEvent.as create mode 100644 vendors/uploadify/com/adobe/protocols/dict/events/DisconnectedEvent.as create mode 100644 vendors/uploadify/com/adobe/protocols/dict/events/ErrorEvent.as create mode 100644 vendors/uploadify/com/adobe/protocols/dict/events/MatchEvent.as create mode 100644 vendors/uploadify/com/adobe/protocols/dict/events/MatchStrategiesEvent.as create mode 100644 vendors/uploadify/com/adobe/protocols/dict/events/NoMatchEvent.as create mode 100644 vendors/uploadify/com/adobe/protocols/dict/util/CompleteResponseEvent.as create mode 100644 vendors/uploadify/com/adobe/protocols/dict/util/SocketHelper.as (limited to 'vendors/uploadify/com/adobe/protocols/dict') diff --git a/vendors/uploadify/com/adobe/protocols/dict/Database.as b/vendors/uploadify/com/adobe/protocols/dict/Database.as new file mode 100644 index 000000000..0ddeef53c --- /dev/null +++ b/vendors/uploadify/com/adobe/protocols/dict/Database.as @@ -0,0 +1,34 @@ +package com.adobe.protocols.dict +{ + public class Database + { + private var _name:String; + private var _description:String; + + public function Database(name:String, description:String) + { + this._name = name; + this._description = description; + } + + public function set name(name:String):void + { + this._name = name; + } + + public function get name():String + { + return this._name; + } + + public function set description(description:String):void + { + this._description = description; + } + + public function get description():String + { + return this._description; + } + } +} \ No newline at end of file diff --git a/vendors/uploadify/com/adobe/protocols/dict/Definition.as b/vendors/uploadify/com/adobe/protocols/dict/Definition.as new file mode 100644 index 000000000..934a330e8 --- /dev/null +++ b/vendors/uploadify/com/adobe/protocols/dict/Definition.as @@ -0,0 +1,39 @@ +package com.adobe.protocols.dict +{ + public class Definition + { + private var _definition:String; + private var _database:String; + private var _term:String; + + public function set definition(definition:String):void + { + this._definition = definition; + } + + public function get definition():String + { + return this._definition; + } + + public function set database(database:String):void + { + this._database = database; + } + + public function get database():String + { + return this._database; + } + + public function set term(term:String):void + { + this._term = term; + } + + public function get term():String + { + return this._term; + } + } +} \ No newline at end of file diff --git a/vendors/uploadify/com/adobe/protocols/dict/Dict.as b/vendors/uploadify/com/adobe/protocols/dict/Dict.as new file mode 100644 index 000000000..07d2530cf --- /dev/null +++ b/vendors/uploadify/com/adobe/protocols/dict/Dict.as @@ -0,0 +1,328 @@ +package com.adobe.protocols.dict +{ + import com.adobe.protocols.dict.events.*; + import com.adobe.protocols.dict.util.*; + + import flash.events.Event; + import flash.events.EventDispatcher; + import flash.events.IOErrorEvent; + import flash.events.ProgressEvent; + import flash.events.SecurityErrorEvent; + import flash.net.Socket; + import mx.rpc.http.HTTPService; + import mx.rpc.events.ResultEvent; + import mx.rpc.events.FaultEvent; + import flash.xml.XMLNode; + import mx.utils.StringUtil; + + public class Dict + extends EventDispatcher + { + // Event type names. + public static var CONNECTED:String = "connected"; + public static var DISCONNECTED:String = "disconnected"; + public static var IO_ERROR:String = IOErrorEvent.IO_ERROR; + public static var ERROR:String = "error"; + public static var SERVERS:String = "servers"; + public static var DATABASES:String = "databases"; + public static var MATCH_STRATEGIES:String = "matchStrategies"; + public static var DEFINITION:String = "definition"; + public static var DEFINITION_HEADER:String = "definitionHeader"; + public static var MATCH:String = "match"; + public static var NO_MATCH:String = "noMatch"; + + public static var FIRST_MATCH:uint = 0; + public static var ALL_DATABASES:uint = 1; + + private var socket:SocketHelper; + + private var dbShortList:Boolean; + + public function Dict() + { + this.socket = new SocketHelper(); + this.socket.addEventListener(Event.CONNECT, connected); + this.socket.addEventListener(Event.CLOSE, disconnected); + this.socket.addEventListener(SocketHelper.COMPLETE_RESPONSE, incomingData); + this.socket.addEventListener(IOErrorEvent.IO_ERROR, ioError); + this.socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityError); + } + + public function connect(server:String, port:uint = 2628):void + { + if (this.socket.connected) + { + this.socket.close(); + } + this.socket.connect(server, port); + } + + public function connectThroughProxy(proxyServer:String, + proxyPort:int, + server:String, + port:uint = 2628):void + { + if (this.socket.connected) + { + this.socket.close(); + } + this.socket.setProxyInfo(proxyServer, proxyPort); + this.socket.connect(server, port); + } + + public function disconnect():void + { + this.socket.close(); + this.disconnected(null); + } + + public function getServers():void + { + var http:HTTPService = new HTTPService(); + http.url = "http://luetzschena-stahmeln.de/dictd/xmllist.php"; + http.addEventListener(ResultEvent.RESULT, incomingServerXML); + http.addEventListener(FaultEvent.FAULT, httpError); + http.resultFormat = HTTPService.RESULT_FORMAT_E4X; + http.send(); + } + + public function getDatabases(shortList:Boolean=true):void + { + this.dbShortList = shortList; + this.socket.writeUTFBytes("show db\r\n"); + this.socket.flush(); + } + + public function getMatchStrategies():void + { + this.socket.writeUTFBytes("show strat\r\n"); + this.socket.flush(); + } + + public function match(database:String, term:String, scope:String="prefix"):void + { + this.socket.writeUTFBytes("match " + database + " " + scope + " \"" + term + "\"\r\n"); + this.socket.flush(); + } + + public function define(database:String, term:String):void + { + this.socket.writeUTFBytes("define " + database + " \"" + term + "\"\r\n"); + this.socket.flush(); + } + + public function lookup(term:String, scope:uint):void + { + var flag:String; + if (scope == Dict.ALL_DATABASES) + { + flag = "*"; + } + else if (scope == Dict.FIRST_MATCH) + { + flag = "!"; + } + this.socket.writeUTFBytes("define " + flag + " \"" + term + "\"\r\n"); + this.socket.flush(); + } + + //// Private functions //// + + private function connected(event:Event):void + { + // Wait to dispatch an event until we get the 220 response. + } + + private function disconnected(event:Event):void + { + dispatchEvent(new DisconnectedEvent()); + } + + private function incomingServerXML(event:ResultEvent):void + { + var dictd:Namespace = new Namespace("http://www.luetzschena-stahmeln.de/dictd/"); + var result:XML = event.result as XML; + var server:String, description:String; + var servers:Array = new Array(); + for each (var serverNode:XML in result.dictd::server) + { + server = serverNode.dictd::dictdurl; + description = serverNode.dictd::description; + if (StringUtil.trim(server).length != 0 && + StringUtil.trim(description).length != 0) + { + var dServer:DictionaryServer = new DictionaryServer(); + dServer.server = server.replace("dict://", ""); + dServer.description = description; + servers.push(dServer); + } + } + var dEvent:DictionaryServerEvent = new DictionaryServerEvent(); + dEvent.servers = servers; + dispatchEvent(dEvent); + } + + private function incomingData(event:CompleteResponseEvent):void + { + var rawResponse:String = event.response; + var response:Response = this.parseRawResponse(rawResponse); + var responseCode:uint = response.code; + if (responseCode == 552) // no matches + { + throwNoMatchEvent(response); + } + else if (responseCode >= 400 && responseCode <= 599) // error + { + throwErrorEvent(response); + } + else if (responseCode == 220) // successful connection + { + dispatchEvent(new ConnectedEvent()); + } + else if (responseCode == 110) // databases are being returned + { + throwDatabasesEvent(response); + } + else if (responseCode == 111) // matches strategies + { + throwMatchStrategiesEvent(response); + } + else if (responseCode == 152) // matches + { + throwMatchEvent(response); + } + else if (responseCode == 150) + { + throwDefinitionHeaderEvent(response); + } + else if (responseCode == 151) + { + throwDefinitionEvent(response); + } + } + + private function ioError(event:IOErrorEvent):void + { + dispatchEvent(event); + } + + private function httpError(event:FaultEvent):void + { + trace("httpError!"); + } + + private function securityError(event:SecurityErrorEvent):void + { + trace("security error!"); + trace(event.text); + } + + // Dispatch new events. + + private function throwDatabasesEvent(response:Response):void + { + var databases:Array = new Array(); + var responseArray:Array = response.body.split("\r\n"); + for each (var line:String in responseArray) + { + var name:String = line.substring(0, line.indexOf(" ")); + if (name == "--exit--") + { + if (this.dbShortList) + { + break; + } + continue; + } + var description:String = line.substring(line.indexOf(" ")+1, line.length).replace(/\"/g,""); + databases.push(new Database(name, description)); + } + var event:DatabaseEvent = new DatabaseEvent(); + event.databases = databases; + dispatchEvent(event); + } + + private function throwMatchStrategiesEvent(response:Response):void + { + var strategies:Array = new Array(); + var responseArray:Array = response.body.split("\r\n"); + for each (var line:String in responseArray) + { + var name:String = line.substring(0, line.indexOf(" ")); + var description:String = line.substring(line.indexOf(" ")+1, line.length).replace(/\"/g,""); + strategies.push(new MatchStrategy(name, description)); + } + var event:MatchStrategiesEvent = new MatchStrategiesEvent(); + event.strategies = strategies; + dispatchEvent(event); + } + + private function throwMatchEvent(response:Response):void + { + var matches:Array = new Array(); + var responseArray:Array = response.body.split("\r\n"); + for each (var line:String in responseArray) + { + var match:String = line.substring(line.indexOf(" ")+1, line.length).replace(/\"/g,""); + matches.push(match); + } + var event:MatchEvent = new MatchEvent(); + event.matches = matches; + dispatchEvent(event); + } + + private function throwErrorEvent(response:Response):void + { + var event:ErrorEvent = new ErrorEvent(); + event.code = response.code; + event.message = response.headerText; + dispatchEvent(event); + } + + private function throwNoMatchEvent(response:Response):void + { + dispatchEvent(new NoMatchEvent()); + } + + private function throwDefinitionHeaderEvent(response:Response):void + { + var event:DefinitionHeaderEvent = new DefinitionHeaderEvent(); + event.definitionCount = uint(response.headerText.substring(0, response.headerText.indexOf(" "))); + dispatchEvent(event); + } + + private function throwDefinitionEvent(response:Response):void + { + var event:DefinitionEvent = new DefinitionEvent(); + var def:Definition = new Definition(); + var headerText:String = response.headerText; + var tokens:Array = headerText.match(/"[^"]+"/g); + def.term = String(tokens[0]).replace(/"/g, ""); + def.database = String(tokens[1]).replace(/"/g, ""); + def.definition = response.body; + event.definition = def; + dispatchEvent(event); + } + + private function parseRawResponse(rawResponse:String):Response + { + var response:Response = new Response(); + var fullHeader:String; + if (rawResponse.indexOf("\r\n") != -1) + { + fullHeader = rawResponse.substring(0, rawResponse.indexOf("\r\n")); + } + else + { + fullHeader = rawResponse; + } + var responseCodeMatch:Array = fullHeader.match(/^\d{3}/); + response.code = uint(responseCodeMatch[0]); + response.headerText = fullHeader.substring(fullHeader.indexOf(" ")+1, fullHeader.length); + var body:String = rawResponse.substring(rawResponse.indexOf("\r\n")+2, rawResponse.length); + body = body.replace(/\r\n\.\./, "\r\n."); + response.body = body; + return response; + } + } +} \ No newline at end of file diff --git a/vendors/uploadify/com/adobe/protocols/dict/DictionaryServer.as b/vendors/uploadify/com/adobe/protocols/dict/DictionaryServer.as new file mode 100644 index 000000000..422b603e0 --- /dev/null +++ b/vendors/uploadify/com/adobe/protocols/dict/DictionaryServer.as @@ -0,0 +1,28 @@ +package com.adobe.protocols.dict +{ + public class DictionaryServer + { + private var _server:String; + private var _description:String; + + public function set server(server:String):void + { + this._server = server; + } + + public function get server():String + { + return this._server; + } + + public function set description(description:String):void + { + this._description = description; + } + + public function get description():String + { + return this._description; + } + } +} \ No newline at end of file diff --git a/vendors/uploadify/com/adobe/protocols/dict/MatchStrategy.as b/vendors/uploadify/com/adobe/protocols/dict/MatchStrategy.as new file mode 100644 index 000000000..1e17da32e --- /dev/null +++ b/vendors/uploadify/com/adobe/protocols/dict/MatchStrategy.as @@ -0,0 +1,34 @@ +package com.adobe.protocols.dict +{ + public class MatchStrategy + { + private var _name:String; + private var _description:String; + + public function MatchStrategy(name:String, description:String) + { + this._name = name; + this._description = description; + } + + public function set name(name:String):void + { + this._name = name; + } + + public function get name():String + { + return this._name; + } + + public function set description(description:String):void + { + this._description = description; + } + + public function get description():String + { + return this._description; + } + } +} \ No newline at end of file diff --git a/vendors/uploadify/com/adobe/protocols/dict/Response.as b/vendors/uploadify/com/adobe/protocols/dict/Response.as new file mode 100644 index 000000000..619a8e903 --- /dev/null +++ b/vendors/uploadify/com/adobe/protocols/dict/Response.as @@ -0,0 +1,39 @@ +package com.adobe.protocols.dict +{ + public class Response + { + private var _code:uint; + private var _headerText:String; + private var _body:String; + + public function set code(code:uint):void + { + this._code = code; + } + + public function set headerText(headerText:String):void + { + this._headerText = headerText; + } + + public function set body(body:String):void + { + this._body = body; + } + + public function get code():uint + { + return this._code; + } + + public function get headerText():String + { + return this._headerText; + } + + public function get body():String + { + return this._body; + } + } +} \ No newline at end of file diff --git a/vendors/uploadify/com/adobe/protocols/dict/events/ConnectedEvent.as b/vendors/uploadify/com/adobe/protocols/dict/events/ConnectedEvent.as new file mode 100644 index 000000000..c4a414521 --- /dev/null +++ b/vendors/uploadify/com/adobe/protocols/dict/events/ConnectedEvent.as @@ -0,0 +1,14 @@ +package com.adobe.protocols.dict.events +{ + import flash.events.Event; + import com.adobe.protocols.dict.Dict; + + public class ConnectedEvent extends Event + { + public function ConnectedEvent() + { + super(Dict.CONNECTED); + } + + } +} \ No newline at end of file diff --git a/vendors/uploadify/com/adobe/protocols/dict/events/DatabaseEvent.as b/vendors/uploadify/com/adobe/protocols/dict/events/DatabaseEvent.as new file mode 100644 index 000000000..fdd2cc1eb --- /dev/null +++ b/vendors/uploadify/com/adobe/protocols/dict/events/DatabaseEvent.as @@ -0,0 +1,26 @@ +package com.adobe.protocols.dict.events +{ + import flash.events.Event; + import com.adobe.protocols.dict.Dict; + + public class DatabaseEvent + extends Event + { + private var _databases:Array; + + public function DatabaseEvent() + { + super(Dict.DATABASES); + } + + public function set databases(databases:Array):void + { + this._databases = databases; + } + + public function get databases():Array + { + return this._databases; + } + } +} \ No newline at end of file diff --git a/vendors/uploadify/com/adobe/protocols/dict/events/DefinitionEvent.as b/vendors/uploadify/com/adobe/protocols/dict/events/DefinitionEvent.as new file mode 100644 index 000000000..8107173e6 --- /dev/null +++ b/vendors/uploadify/com/adobe/protocols/dict/events/DefinitionEvent.as @@ -0,0 +1,27 @@ +package com.adobe.protocols.dict.events +{ + import flash.events.Event; + import com.adobe.protocols.dict.Dict; + import com.adobe.protocols.dict.Definition; + + public class DefinitionEvent + extends Event + { + private var _definition:Definition; + + public function DefinitionEvent() + { + super(Dict.DEFINITION); + } + + public function set definition(definition:Definition):void + { + this._definition = definition; + } + + public function get definition():Definition + { + return this._definition; + } + } +} \ No newline at end of file diff --git a/vendors/uploadify/com/adobe/protocols/dict/events/DefinitionHeaderEvent.as b/vendors/uploadify/com/adobe/protocols/dict/events/DefinitionHeaderEvent.as new file mode 100644 index 000000000..e77c402ae --- /dev/null +++ b/vendors/uploadify/com/adobe/protocols/dict/events/DefinitionHeaderEvent.as @@ -0,0 +1,26 @@ +package com.adobe.protocols.dict.events +{ + import flash.events.Event; + import com.adobe.protocols.dict.Dict; + + public class DefinitionHeaderEvent + extends Event + { + private var _definitionCount:uint; + + public function DefinitionHeaderEvent() + { + super(Dict.DEFINITION_HEADER); + } + + public function set definitionCount(definitionCount:uint):void + { + this._definitionCount = definitionCount; + } + + public function get definitionCount():uint + { + return this._definitionCount; + } + } +} \ No newline at end of file diff --git a/vendors/uploadify/com/adobe/protocols/dict/events/DictionaryServerEvent.as b/vendors/uploadify/com/adobe/protocols/dict/events/DictionaryServerEvent.as new file mode 100644 index 000000000..9b406e95c --- /dev/null +++ b/vendors/uploadify/com/adobe/protocols/dict/events/DictionaryServerEvent.as @@ -0,0 +1,26 @@ +package com.adobe.protocols.dict.events +{ + import flash.events.Event; + import com.adobe.protocols.dict.Dict; + + public class DictionaryServerEvent + extends Event + { + private var _servers:Array; + + public function DictionaryServerEvent() + { + super(Dict.SERVERS); + } + + public function set servers(servers:Array):void + { + this._servers = servers; + } + + public function get servers():Array + { + return this._servers; + } + } +} \ No newline at end of file diff --git a/vendors/uploadify/com/adobe/protocols/dict/events/DisconnectedEvent.as b/vendors/uploadify/com/adobe/protocols/dict/events/DisconnectedEvent.as new file mode 100644 index 000000000..485b3edac --- /dev/null +++ b/vendors/uploadify/com/adobe/protocols/dict/events/DisconnectedEvent.as @@ -0,0 +1,14 @@ +package com.adobe.protocols.dict.events +{ + import flash.events.Event; + import com.adobe.protocols.dict.Dict; + + public class DisconnectedEvent extends Event + { + public function DisconnectedEvent() + { + super(Dict.DISCONNECTED); + } + + } +} \ No newline at end of file diff --git a/vendors/uploadify/com/adobe/protocols/dict/events/ErrorEvent.as b/vendors/uploadify/com/adobe/protocols/dict/events/ErrorEvent.as new file mode 100644 index 000000000..9e5fc7ad2 --- /dev/null +++ b/vendors/uploadify/com/adobe/protocols/dict/events/ErrorEvent.as @@ -0,0 +1,37 @@ +package com.adobe.protocols.dict.events +{ + import flash.events.Event; + import com.adobe.protocols.dict.Dict; + + public class ErrorEvent + extends Event + { + private var _code:uint; + private var _message:String; + + public function ErrorEvent() + { + super(Dict.ERROR); + } + + public function set code(code:uint):void + { + this._code = code; + } + + public function set message(message:String):void + { + this._message = message; + } + + public function get code():uint + { + return this._code; + } + + public function get message():String + { + return this._message; + } + } +} \ No newline at end of file diff --git a/vendors/uploadify/com/adobe/protocols/dict/events/MatchEvent.as b/vendors/uploadify/com/adobe/protocols/dict/events/MatchEvent.as new file mode 100644 index 000000000..65b868851 --- /dev/null +++ b/vendors/uploadify/com/adobe/protocols/dict/events/MatchEvent.as @@ -0,0 +1,26 @@ +package com.adobe.protocols.dict.events +{ + import flash.events.Event; + import com.adobe.protocols.dict.Dict; + + public class MatchEvent + extends Event + { + private var _matches:Array; + + public function MatchEvent() + { + super(Dict.MATCH); + } + + public function set matches(matches:Array):void + { + this._matches = matches; + } + + public function get matches():Array + { + return this._matches; + } + } +} \ No newline at end of file diff --git a/vendors/uploadify/com/adobe/protocols/dict/events/MatchStrategiesEvent.as b/vendors/uploadify/com/adobe/protocols/dict/events/MatchStrategiesEvent.as new file mode 100644 index 000000000..75b76f889 --- /dev/null +++ b/vendors/uploadify/com/adobe/protocols/dict/events/MatchStrategiesEvent.as @@ -0,0 +1,26 @@ +package com.adobe.protocols.dict.events +{ + import flash.events.Event; + import com.adobe.protocols.dict.Dict; + + public class MatchStrategiesEvent + extends Event + { + private var _strategies:Array; + + public function MatchStrategiesEvent() + { + super(Dict.MATCH_STRATEGIES); + } + + public function set strategies(strategies:Array):void + { + this._strategies = strategies; + } + + public function get strategies():Array + { + return this._strategies; + } + } +} \ No newline at end of file diff --git a/vendors/uploadify/com/adobe/protocols/dict/events/NoMatchEvent.as b/vendors/uploadify/com/adobe/protocols/dict/events/NoMatchEvent.as new file mode 100644 index 000000000..894d1ae2c --- /dev/null +++ b/vendors/uploadify/com/adobe/protocols/dict/events/NoMatchEvent.as @@ -0,0 +1,14 @@ +package com.adobe.protocols.dict.events +{ + import flash.events.Event; + import com.adobe.protocols.dict.Dict; + + public class NoMatchEvent + extends Event + { + public function NoMatchEvent() + { + super(Dict.NO_MATCH); + } + } +} \ No newline at end of file diff --git a/vendors/uploadify/com/adobe/protocols/dict/util/CompleteResponseEvent.as b/vendors/uploadify/com/adobe/protocols/dict/util/CompleteResponseEvent.as new file mode 100644 index 000000000..fc552f1b3 --- /dev/null +++ b/vendors/uploadify/com/adobe/protocols/dict/util/CompleteResponseEvent.as @@ -0,0 +1,25 @@ +package com.adobe.protocols.dict.util +{ + import flash.events.Event; + + public class CompleteResponseEvent + extends Event + { + private var _response:String; + + public function CompleteResponseEvent() + { + super(SocketHelper.COMPLETE_RESPONSE); + } + + public function set response(response:String):void + { + this._response = response; + } + + public function get response():String + { + return this._response; + } + } +} \ No newline at end of file diff --git a/vendors/uploadify/com/adobe/protocols/dict/util/SocketHelper.as b/vendors/uploadify/com/adobe/protocols/dict/util/SocketHelper.as new file mode 100644 index 000000000..feb494b31 --- /dev/null +++ b/vendors/uploadify/com/adobe/protocols/dict/util/SocketHelper.as @@ -0,0 +1,49 @@ +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); + } + } +} \ No newline at end of file -- cgit v1.2.3