![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
В процессе создания чата возникла проблема обновления онлайн-списка юзеров в чате. Разработал такой алгоритм:
1) Получаю количество ВСЕХ пользователей 2) Циклически открываю файлы с их статусом (off или on): если on - добавляю ID онлайн-юзера в массив онлайн-юзеров 4) Прогоняю массив в цикле, чтобы открывать данные по ID юзера: считываю файлы юзера с данным ID (логин, к примеру) 5) генерирую список мувиков с данным из массива Если нужны коды - я пришлю, но дело в том, что если вставить в функцию такой вот цикл: for (i=1; i<=users; i++){ var lv:LoadVars = new LoadVars(); lv.onLoad = lvOnLoad; _urls = _root.gameInfo.server + "USERS/"+ i + ".stat"; lv.load(_urls); function lvOnLoad (suc:Boolean) { if(suc){ trace ("2,5 да"); statUser = this.statUser; if (statUser == "Онлайн"){ trace ("3 Добавлен "+i); usersArray.push(i); } } } }
__________________
Надо сменить подпись... |
|
|||||
|
Модрон-ветеринар
|
А почему бы не обойтись одним источником данных, например, XML?
А то ведь сколько юзеров, столько и http-запросов - неправильно это.
__________________
Идите первым! Последний раз редактировалось mooncar; 23.03.2012 в 13:13. |
|
|||||
|
Регистрация: Sep 2005
Сообщений: 950
|
Нужно дожидаться загрузки одного файла, а потом загружать другой и так пока не загрузяться все файлы, чтото типа того
var i:Number = 1 var lv:LoadVars = new LoadVars(); lv.onLoad = lvOnLoad; _urls = _root.gameInfo.server + "USERS/"+ i + ".stat"; function lvOnLoad (suc:Boolean) { if(suc){ i++ trace ("2,5 да"); statUser = this.statUser; if (statUser == "Онлайн"){ trace ("3 Добавлен "+i); usersArray.push(i); } } _urls = _root.gameInfo.server + "USERS/"+ i + ".stat"; lv.load(_urls); } |
|
|||||
|
Модрон-ветеринар
|
lexa2000lexa, конвеер - это хорошо, но об "он-лайне" тогда говорить будет тяжело, процесс обновления растянется во времени.
__________________
Идите первым! |
|
|||||
|
Регистрация: Sep 2005
Сообщений: 950
|
Полностью с вами согласен, но как сделает автор, только ему известно, а я предложил решение которое подойдет при нынешней постановке задачи.
|
|
|||||
|
И за это огромное Вам спасибо.
Я начинал работать с xml, но у меня что-то не заладилось. Поэтому пока попробую своим нубовским методом. Добавлено через 5 часов 3 минуты Воспользовавшись Вашим примером, я создал функцию, которая обновляется каждую секунду. Эта функция открывает оба файла с данными, считывает их и генерирует в окне юзеров чата список пользователей. Вот сама функция: function creatBoxList(){ trace("1=== СОЗДАНИЕ НОВОГО БОКСА"); // СЧИТЫВАЮ ЛОГИНЫ i = 1; n = i-1; id = _root.yaonline.usersOnlineArray[n]; trace("2=== ID = "+id); var lvLOG:LoadVars = new LoadVars(); lvLOG.onLoad = lvLOGOnLoad; _urls = _root.gameInfo.server + "USERS/"+ id + ".usr"; lvLOG.load(_urls); function lvLOGOnLoad (sucLOG:Boolean) { if(sucLOG){ logU = this.log; trace("3=== Получил ЛОГ = "+logU); } } // ПОЛУЧЕНИК ДАННЫХ var lvDATA:LoadVars = new LoadVars(); lvDATA.onLoad = lvDATAOnLoad; _urls = _root.gameInfo.server + "USERS/"+ id + ".data"; lvDATA.load(_urls); function lvDATAOnLoad (sucDATA:Boolean) { trace("4=== Переход"); if(sucDATA){ trace("5=== Получил ДАТА"); expirU = this.expir; war_winU = this.war_win; hit_allU = this.hit_all; hit_okU = this.hit_ok; levelU = Math.round(expirU/100); if (hit_allU != 0){ coolHitU = Math.round(hit_okU/hit_allU) + "%"; } else { coolHitU = "Нет"; } ycoord = id * 60 - 60; attachMovie("ussr", "ussr"+id, this.getNextHighestDepth(), {_x:0, _y:ycoord}); trace("6=== НОВЫЙ ОБЪЕКТ: "+eval("ussr"+id)); eval("ussr"+id).log.text = logU; eval("ussr"+id).expir.text = "Опыт: "+expirU; eval("ussr"+id).war_win.text = "Победы: "+war_winU; eval("ussr"+id).level.text = "Уровень: "+levelU; eval("ussr"+id).coolHit.text = "Точность: "+coolHitU; } } if (i < _root.yaonline.users_on){ i++; n = i-1; id = _root.yaonline.usersOnlineArray[n]; _urls = _root.gameInfo.server + "USERS/"+ id + ".usr"; lvLOG.load(_urls); } } А во втором случае, если уже сидит №2, то он также отображается сразу сверху. И как только №1 появляется в онлайне, то №2 делает отступ вниз в списке, а №1 не появляется Я так понимаю, причина в том, что ЯКОБЫ цикл не выполняется и считываются данные только для последнего по списку пользователя. А вот где я допустил ошибку, я не понимаю. Можете помочь разобраться?
__________________
Надо сменить подпись... Последний раз редактировалось EndoCrinologist; 23.03.2012 в 21:11. |
![]() |
![]() |
Часовой пояс GMT +4, время: 16:07. |
|
|
« Предыдущая тема | Следующая тема » |
|
|