Извлечение времени с сервера времени из флэш-памяти (as3) - PullRequest
0 голосов
/ 27 марта 2012

Прошу простить новичка за весь этот причудливый сценарий Action и прошить в целом. До каких-либо комментариев я уже некоторое время мучался с ответами - безуспешно, поэтому решил, что поставлю этот вопрос на нескольких постах здесь.

Так что вот оно. Я пытаюсь достичь двух простых аналоговых мировых часов (что я уже сделал с помощью Jquery), но IE оказался самым большим кошмаром, чтобы заставить это работать правильно - поэтому я пробую другой путь.

Я написал небольшой скрипт для получения времени сервера, который указан ниже:

var ldr:URLLoader = new URLLoader()
ldr.load(new URLRequest("http://chronos.csr.net"))
ldr.addEventListener(Event.COMPLETE, onLoaded)
function onLoaded(evt:Event){
    trace(ldr.data)
}

Может ли кто-нибудь сказать мне, как я могу распечатать вывод из приведенного выше синтаксиса, чтобы убедиться, что он действительно работает? И, увидев, что я извлек фрагменты кода из своих различных поисков, необходимо ли указывать URL-адрес для определенного файла?

Если вышесказанное по милости всемогущего Пикселя действительно работает, как можно было бы ввести его в код ниже:

var now:Date;
var ct:Timer = new Timer(1000); 
ct.addEventListener(TimerEvent.TIMER, onTick);
ct.start();
function onTick(event:TimerEvent):void{
    now = new Date();
    var s:uint = now.getSeconds();
    var m:uint = now.getMinutes();
    var h:uint = now.getHours();
    second_hand_mc.rotation = 180 + (s * 6);
    minute_hand_mc.rotation = 180 + (m * 6);
    hour_hand_mc.rotation = 180 + (h * 30) + (m * 0.5);
}

И, пожалуйста, примите во внимание DST, поскольку это была небольшая ловушка, с которой я столкнулся даже с JS (в конечном итоге я бы сработал, но время не на моей стороне - извините за каламбур).

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 27 марта 2012

Есть интересная вещь, которую вы можете использовать, это NTP (сетевой протокол времени).Это простой поток TCP, который отправляет 4 байта данных, которые являются текущим временем в формате UTC.

Проблема во Flash заключается в том, что вы не можете отправлять простые запросы TCP на произвольный сервер - Flash требуетчто сервер отправляет разрешительный ответ политики.Таким образом, вам придется проксировать ответы, полученные от NTP-сервера (или, если вы хотите упростить его, просто распечатать системную дату сервера в потоке вывода) и вызвать скрипт из Flash.

Здесь я нашелпример скрипта синхронизации NTP, написанный на PHP http://www.xenocafe.com/tutorials/php/ntp_time_synchronization/index.php.Вам не нужна часть синхронизации, только часть, где она пытается подключиться к нескольким серверам времени и получает ответ.

Это будет не очень точно, так как подключение и отправка данных из Flash-клиента вваш сервер требует времени, однако вы можете попытаться посчитать среднее время, необходимое для передачи данных клиенту.Ваш курс действий будет следующим:

  1. Отправка текущей даты из сценария вашего сервера во Flash.
  2. Как только Flash получает дату, она отправляет ее обратно.
  3. ПовторУстанавливает 1 и 2 несколько раз, чтобы собрать достаточно данных для расчета среднего времени, которое требуется для поездки.Пусть серверные времена отправки ответа называются ST0, ST1, ... STN и серверные времена получения ответа: RT0, RT1, ... RTN.Затем среднее время, необходимое для путешествия примерно (RT0 - ST0 + RT1 - ST1 + ... RTN - STN) / (2 * N).
  4. Затем вы записываете дельту и добавляете ее к времени, отправляемому во Flash каждый раз, когда он пытается синхронизироваться с сервером.

Опять же, все зависит от того, насколько точным вы хотите быть.Вы можете просто распечатать дату в потоке вывода запроса и игнорировать время для перемещения / никогда не синхронизировать свой сервер с NTP-сервером и т. Д.

...