Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Время с сервера (http://www.flasher.ru/forum/showthread.php?t=116153)

LokiFC 22.09.2008 01:39

Время с сервера
 
Флеш может отобразить только время клиента. Но мне нужно во флеш точное время (время на моем сервере). Создаю мувик, в нем динамическое текстовое поле. Пишу в нем as:
Цитата:

clientdate = new Date();
var stn;
var raznica = stn - clientdate.getTime()
mydate = new Date();
var correct = mydata.getTime() + raznica;
min = mydate.getMinutes(correct);
hour = mydate.getHours(correct);
if (min < 10)
{
min = "0" + min;
} // end if
if (hour < 10)
{
hour = "0" + hour;
} // end if
time = hour+" : "+min;
На странице пишу:
Цитата:

<?php
$swfvar="?stn=".mktime()*1000;
?>

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" width="800" height="200" id="head" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="to/head.swf<?php echo $swfvar; ?>" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<embed src="to/head.swf<?php echo $swfvar; ?>" quality="high" bgcolor="#ffffff" width="800" height="200" name="head" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
Для не знающих php: о mktime() - http://ru.php.net/manual/ru/function.mktime.php (кратко - это примерно то же самое, что и getTime()). Функция echo пишет в файл. В данном случае например благодаря ней адрес к файлу бкдет выглядеть как "to/head.swf?stn=1222028792000".

Загрузил флешку и пхпшку на хост, специально сбил у себя на компе время. Но флешка всеравно показывает время клиента(меня)
Что я сделал не так? Заранее спасибо :)

ramshteks 22.09.2008 02:18

блин что тут можно сказать, наверно ты просто береш только свое врямя))
блин trace тебе в помощь, поизучай посмотри что приходит а что нет, что обрабатывается а что нет...

wvxvw 22.09.2008 03:28

А как ваш скрипт в АС связан с тем, что вы передаете из ПХП? =/ Кроме того, АС3 хоть и не строго типизированый язык, принято все-таки типизировать переменные. По крайней мере компилятор вам об этом тоже напомнит.

Alex Lexcuk 22.09.2008 11:44

Код:

<?php
$swfvar="?stn=".mktime()*1000;
?>

Это что-то такое...
Вот так надо
Код:

<?php
//определение времени
$result_time = date("d.m.Y H:i");
//типа 07.09.3014 08:50
echo 'dn_time='.$result_time; //вывод в браузер (флешка, можно и в Opera IE7 и т.д.)
?>

А флеш вот так
Код:

var txt:TextField = new TextField();
txt.text = "hello";
txt.autoSize = TextFieldAutoSize.LEFT;
addChild(txt);//добавить на рабочее поле
txt.scaleX = txt.scaleY = 4;
var url:String = "http://www.dnadillo.dn.ua/fla/dn-time.php?t="+new Date().getTime();
//?t="+new Date().getTime(); - это чтоб рнр файл не кешировался
var request:URLRequest = new URLRequest(url);

var loader:URLLoader = new URLLoader();
configureListeners(loader);
try {
        loader.load(request);
} catch (error:Error) {
        trace("Unable to load requested document.");
}

function configureListeners(dispatcher:IEventDispatcher):void {
        dispatcher.addEventListener(Event.COMPLETE, completeHandler);
}
function completeHandler(event:Event):void {
        var loader2:URLLoader = URLLoader(event.target);
        var variables:URLVariables = new URLVariables(loader2.data);
        trace(variables.dn_time);
        txt.text='Время сайта \n http://www.dnadillo.dn.ua/\n'+variables.dn_time;
}


LokiFC 22.09.2008 13:48

Ладно. Буду тогда сам доводить. trace мне в помощь
wvxvw, переменную передаю
Цитата:

В данном случае например благодаря ней адрес к файлу бкдет выглядеть как "to/head.swf?stn=1222028792000"
Alex Lexcuk, все хорошо, но только время статичное будет.

wvxvw 22.09.2008 14:04

Если вы имели в виду var stn, то ничего вы не передаете, эта переменная никак не связана с тем, что вы передали флешу.
В примере выше время не будет статичное. Но будет погрешность связаная с тем, что данные с сервера не прийдут моментально. Но избежать ее в целом вообще не получится, т.как вы не сможете получить информацию о том, сколько времени запрос добирался до сервера и обратно. Чтобы прочитать параметр переданый флешу читаем тут:
http://livedocs.adobe.com/flash/9.0/...tml#parameters

amd333 22.09.2008 14:50

если это сильно критично то лучше использовать какие нибуть сокеты, а так ты всеравно точное время не получишь (задержка запроса, задержка загрузки флеша или еще чтонибуть)

LokiFC 22.09.2008 15:39

С передачей переменных все работает. Не первый раз такой способ использую. В этом случае даже на видимом поле проверял. Насчет погрешности - не страшно, +-минута думаю тормозить не будет. Все таки именно с моим кодом можно что-нибудь сделать?
(Забыл сказать, что в as я ламер) Я тот ме совсем понимаю.
Я кстати его малесь поменял. Проблема была в том, что я перепутал синтаксис с js:). В итоге:
Код:

client = new Date();
var stn = 1222028792000;
/*временно значение вставил,чтоб проверять при публикации проще было*/
help.text = client.getTime();//help - динамическое поле (тоже пока временное)

mydate = new Date();
function clock() {
        var raznica = stn - client.getTime();
        mydate.setTime(client.getTime()+raznica);
        help2.text = mydate.getTime();//help2 -тоже динамическое поле (временное)
        min = mydate.getMinutes();
        hour = mydate.getHours();
        if (min < 10)
        {
            min = "0" + min;
        }
        if (hour < 10)
        {
            hour = "0" + hour;
        } // end if
        clockdisplay.text = hour+" : "+min;// собственно поле со временем
}
setInterval(clock,1000);

Все замечательно, только в поле help2(и в clockdisplay соответственно) переменные статичны и не меняются. А в help цифорки скачут. В чем проблема и как ее исправить?

Alex Lexcuk 22.09.2008 17:07

Код:

var txt:TextField = new TextField();
txt.text = "hello";
txt.autoSize = TextFieldAutoSize.LEFT;
addChild(txt);//добавить на рабочее поле
txt.scaleX = txt.scaleY = 3;
var loc_data:Date = new Date();
var break_data:Date = new Date();
var cor:uint;

var myTimer:Timer;
myTimer = new Timer(1000);
myTimer.addEventListener("timer", timerHandler);

var url:String = "http://www.dnadillo.dn.ua/fla/dn-time.php?t="+loc_data.getTime();
//?t="+new Date().getTime(); - это чтоб рнр файл не кешировался
var request:URLRequest = new URLRequest(url);

var loader:URLLoader = new URLLoader();
configureListeners(loader);
try {
        loader.load(request);
} catch (error:Error) {
        trace("Unable to load requested document.");
}

function configureListeners(dispatcher:IEventDispatcher):void {
        dispatcher.addEventListener(Event.COMPLETE, completeHandler);
}
function completeHandler(event:Event):void {
        var loader2:URLLoader = URLLoader(event.target);
        var variables:URLVariables = new URLVariables(loader2.data);

        trace("Время Сайта "+variables.dn_time);
        trace("Время Компа "+loc_data.getTime());       
        cor = loc_data.getTime() - Number(variables.dn_time)*1000;
       
        trace(uint(break_data.hours)+":"+uint(break_data.minutes));
        myTimer.start();
}


function timerHandler(event:TimerEvent) {
break_data.setTime(loc_data.getTime() - cor);
txt.text='Время сайта \n http://www.dnadillo.dn.ua/\n'+break_data.hours+":"+break_data.minutes;
txt.text=txt.text+'\nВремя КОМПА '+loc_data.getHours()+":"+loc_data.getMinutes();
}

/*<?php
//определение времени
$result_time = time();
//типа 1222084214

echo 'dn_time='.$result_time; //вывод в браузер (флешка, можно и в Opera IE7 и т.д.)

?>
*/


wvxvw 22.09.2008 18:20

>> С передачей переменных все работает.
В том виде, в котором это у вас сейчас - в принципе не может работать в АС3. Либо вы запостили не в тот раздел (нужно было в АС2), либо, запостили не тот код.


Часовой пояс GMT +4, время: 13:02.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.