Здравствуйте, уважаемые!
Хочу отдать вам на суд объект обмена данными между php и flash(AS3).
Желаю узнать ваши мнения и всевозможные поправки/рекомендации.
Предупрежу сразу - отправка данных - переменные, получение - архивная строка, сжатая gzcompress($string, 9);
Код AS3:
package sl_pkg
{
import flash.net.URLVariables;
import flash.net.URLLoaderDataFormat;
import flash.events.EventDispatcher;
public class send_load extends EventDispatcher
{
//событие. окончание получения данных с сервера
public static const DATA_LOADED:String = "loaded";
//данные, полученные с сервера строка
public var serv_data_string:String = "NIL";
//данные, полученные с сервера массив
public var serv_data_array:Array = new Array();
public function send_load()
{
// constructor code
}
public function server_send_load(post_data:String):void
{
import flash.events.Event;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLRequestMethod;
import flash.net.URLVariables;
import flash.net.URLLoaderDataFormat;
import flash.utils.ByteArray;
//создаем запрос
var URL_request:URLRequest= new URLRequest("http://localhost/mobGame/script/request_analyzer.php");
//метод передачи данных - POST
URL_request.method = URLRequestMethod.POST;
//заполняем запрос
var URL_vars:URLVariables = new URLVariables(post_data);
//устанавливаем формат данных как переменные
URL_vars.dataFormat = URLLoaderDataFormat.VARIABLES;
//заносим данные в запрос
URL_request.data = URL_vars;
//создаем приемник
var URL_loader :URLLoader = new URLLoader();
//слушатель
URL_loader.addEventListener(Event.COMPLETE, receive_response);
URL_loader.dataFormat = URLLoaderDataFormat.BINARY;
URL_loader.load(URL_request);
//тут храним ответ от сервера
var serv_data:String = 'php_error=003';
//обработка ответа из sendlogin.php
function receive_response(e:Event):void
{
var data_byteArray:ByteArray = e.target.data;
var ab:ByteArray = new ByteArray();
ab.writeMultiByte('ss=1','x-ansi');
ab.compress();
trace(ab,ab.length, ab[3].toString(16));
trace(data_byteArray,data_byteArray.length, data_byteArray[3].toString(16));
data_byteArray.uncompress();
//var loader:URLLoader = URLLoader(e.target);
//получение строки данных
serv_data_string = data_byteArray.toString();//new URLVariables(loader.data).toString();
trace(serv_data_string);
var serv_data_splitted_pairs = serv_data_string.split("&");
var subarray:Array = new Array();
//получение ассоциативного массива данных
for each (var pair:String in serv_data_splitted_pairs)
{
subarray = pair.split("=");
serv_data_array[subarray["0"]] = subarray["1"];
}
URL_loader.removeEventListener(Event.COMPLETE, receive_response );
dispatchEvent(new Event(send_load.DATA_LOADED));
}
}
}
}
Событие DATA_LOADED - для отслеживания окончания загрузки данных.
P.S. Если кто-то напишет "Я могу и лучше", не будет ли он любезен сказать: где лучше и как, потому как я полный новичёк в этом деле и тоже хочу научиться писать программы.