Проблема с получением и отправкой значений переменных на сервер
Помогите,пожалуйста.
У меня такая проблема - моё приложение должно делать запросы к серверу ВКонтакте на использование функций putVariable и getVariable. Делать-то делает, но результаты, которые я получаю из xml все спутанные, они не соотвествуют значениям, которые должны быть. Мне кажется, что это от того, что запросы поступают асинхронно. А как сделать синхронизацию я не знаю.
У меня вопрос:
1) дело ли тут в синхронизации как я и полагаю?
2) а если нет, то в чем?
3) что надо сделать, чтобы мне приходили правильные значения переменных?
Код AS3:
<mx:Script>
<![CDATA[
import com.adobe.crypto.MD5;
import flash.display.*;
import flash.events.*;
import flash.net.*;
import mx.controls.Alert;
public var var1:int, var2:int = 0, girlclicknum:int, boyclicknum:int = 0;
public var girlcount:int, boycount:int = 0;
public var indic1:int, indic2:int;
public var girlcount_in_percent:Number = 0;
public var boycount_in_percent:Number = 0;
public var xxx1:XML, xxx2:XML;
private function girlbuttonclickHandler():void
{
getV("1041");
indic1 = parseInt(xxx1.text());
Alert.show(indic1.toString(), "3", Alert.OK);
if (indic1 == 0)
{
this.currentState = 'girlpushing1';
putV("1041", "1");
while(true)
{
if (i2 == 1)
break;
}
i2 = 0;
var1 = int(getV("16"));
Alert.show(var1.toString(), "Var1", Alert.OK);
var1++;
indic1 = 1;
Alert.show(var1.toString(), "T4", Alert.OK);
putV("16", var1.toString());
lab2.text = var1.toString();
putV("1041", "1");
indic1 = int(getV("1041"));
Alert.show(indic1.toString(), "indic1-2", Alert.OK);
girlclicknum = int(getV("17"));
girlclicknum++;
putV("17", String(girlclicknum));
lab4.text = girlclicknum + "";
girlcount = int(getV("18"));
girlcount = var1 * girlclicknum;
putV("18", String(girlcount));
count_in_percent();
l2.text = var1 + " X " + girlclicknum + " = ";
l3.text = girlcount + "";
l4.text = Math.round(girlcount_in_percent * 100) + "%";
l8.text = 100 - Math.round(girlcount_in_percent * 100) + "%";
indic2 = 0;
putV("1042", "0");
bottomlabel.text = "";
}
else
{
this.currentState = 'girlpushing1';
girlclicknum = int(getV("17"));
girlclicknum++;
putV("17", String(girlclicknum));
lab4.text = girlclicknum + "";
girlclicknum = int(getV("17"));
girlclicknum++;
putV("17", String(girlclicknum));
girlbutton.label = "Отдать девочкам " + girlclicknum + " клик";
girlclicknum = int(getV("17"));
girlclicknum--;
putV("17", String(girlclicknum));
girlcount = int(getV("18"));
girlcount = var1 * girlclicknum;
putV("18", String(girlcount));
count_in_percent();
l2.text = var1 + " X " + girlclicknum + " = ";
l3.text = girlcount + "";
l4.text = Math.round(girlcount_in_percent * 100) + "%";
l8.text = 100 - Math.round(girlcount_in_percent * 100) + "%";
indic2 = 0;
putV("1042", "0");
}
if (girlcount < boycount)
bottomlabel.text = "Вы на стороне девочек и вы проигрываете! пожнажмите!";
else bottomlabel.text = "Вы на стороне девочек и вы лидируете! так держать!";
topwindow2.width = topwindow1.width * girlcount_in_percent;
}
private function boybuttonclickHandler():void
{
if (indic2 == 0)
{
this.currentState = 'boypushing1';
boybutton.currentState = "boypushing1";
var2++;
indic2 = 1;
lab6.text = var2 + "";
boyclicknum++;
lab8.text = boyclicknum + "";
boycount = var2 * boyclicknum;
count_in_percent();
l6.text = var2 + " X " + boyclicknum + " = ";
l7.text = boycount + "";
l4.text = Math.round(girlcount_in_percent * 100) + "%";
l8.text = 100 - Math.round(girlcount_in_percent * 100) + "%";
indic1 = 0;
}
else
{
this.currentState = 'boypushing1';
boyclicknum++;
lab8.text = boyclicknum + "";
boyclicknum++;
boybutton.label = "Отдать мальчикам " + boyclicknum + " клик";
boyclicknum--;
boycount = var2 * boyclicknum;
count_in_percent();
l6.text = var2 + " X " + boyclicknum + " = ";
l7.text = boycount + "";
l4.text = Math.round(girlcount_in_percent * 100) + "%";
l8.text = 100 - Math.round(girlcount_in_percent * 100) + "%";
indic1 = 0;
}
if(boycount < girlcount)
bottomlabel.text = "Вы на стороне мальчиков и вы проигрываете! пожнажмите!";
else
bottomlabel.text = "Вы на стороне мальчиков и вы лидируете! так держать!";
topwindow2.width = topwindow1.width * girlcount_in_percent;
//image1.width=topwindow2.width-30;
//boywindow.width = (girlwindow.width + boywindow.width) * boycount_in_percent;
}
private function count_in_percent():void
{
var commoncount:int = 0;
commoncount = girlcount + boycount;
girlcount_in_percent = girlcount / commoncount;
boycount_in_percent = boycount / commoncount;
}
private function getV(i_key:String):void
{
var r:URLRequest = new URLRequest("http://api.vkontakte.ru/api.php");
var l:URLLoader = new URLLoader();
var v:URLVariables = new URLVariables();
// Юзер, список друзей которого нужно вывести
// В данном случае берем юзера просматривающего рпиложение
var viewerID:String = root.loaderInfo.parameters.viewer_id;
//var viewerID:String="1248914";
//ID приложения
var apiID:String = "1725165";
//Секретный ключ приложения
var secret:String = "4G2wvxqZdy";
// Необходимый метод изи АПИ
var methodFromAPI:String = "getVariable";
// Для тестов не локально должно быть 0
var testMode:String = "1";
v.api_id = apiID;
v.v = "2.0"; // Версия АПИ
v.method = methodFromAPI;
v.test_mode = testMode;
v.key = i_key;
v.sig = MD5.hash((viewerID + "api_id=" + apiID + "key=" + i_key + "method=" + methodFromAPI + "test_mode=" + testMode + "v=2.0" + secret));
r.data = v;
r.method = URLRequestMethod.POST;
l.load(r);
l.addEventListener(Event.COMPLETE, loader_completeHandler1);
}
private function putV(i_key:String, i_value:String):void
{
var r:URLRequest = new URLRequest("http://api.vkontakte.ru/api.php");
var l:URLLoader = new URLLoader();
var v:URLVariables = new URLVariables();
// Юзер, список друзей которого нужно вывести
// В данном случае берем юзера просматривающего рпиложение
var viewerID:String = root.loaderInfo.parameters.viewer_id;
//var viewerID:String="1248914";
//ID приложения
var apiID:String = "1725165";
//Секретный ключ приложения
var secret:String = "4G2wvxqZdy";
// Необходимый метод изи АПИ
var methodFromAPI:String = "putVariable";
// Для тестов не локально должно быть 0
var testMode:String = "1";
v.api_id = apiID;
v.v = "2.0"; // Версия АПИ
v.method = methodFromAPI;
v.test_mode = testMode;
v.key = i_key;
v.value = i_value;
v.sig = MD5.hash(viewerID + "api_id=" + apiID + "key=" + i_key + "method=" + methodFromAPI + "test_mode=" + testMode + "v=2.0" + "value=" + i_value + secret);
r.data = v;
r.method = URLRequestMethod.POST;
l.load(r);
l.addEventListener(Event.COMPLETE, loader_completeHandler2);
}
private function loader_completeHandler1(event:Event):void
{
xxx1 = new XML(event.target.data);
Alert.show(xxx1.text(), "1", Alert.OK);
}
private function loader_completeHandler2(event:Event):void
{
xxx2 = new XML(event.target.data);
Alert.show(xxx2.text(), "2", Alert.OK);
}
]]>
</mx:Script>
|