我正处于失败状态并非常感谢一些帮助,因为它已经超出了我的舒适区域。基本上我在我工作的各个办公室的屏幕上显示销售演示。这些显示每日销售数据可以随着某人进行销售而变化。我有一个swf加载数据从XML文件到幻灯片,除了我需要强制刷新(手动)时XML文件发生变化,一切都很好。我想这样做,如果文件更改它会自动反映在swf中。到目前为止,我的研究已经向我指出了AS3套接字通信,但我没有成功找到相关的教程。我的代码如下,如果有人能指出我正确的直接我会非常感激它。
//
//XML LOADING
//
var xmlfile:String;
var xmlf:String = stage.loaderInfo.parameters.xmlfile;
if(xmlf!=null){
xmlfile = xmlf;
}else{
xmlfile = "file path";
}
var xmlLoader:URLLoader = new URLLoader();
xmlLoader.addEventListener(IOErrorEvent.IO_ERROR, function(evt:IOErrorEvent):void {},false,0,true);
xmlLoader.addEventListener(Event.COMPLETE, xmlLoadingDone);
xmlLoader.load(new URLRequest(xmlfile));
////////////////////////////////////////////////////////////////////////////////////////////
//
//socket connection text
//
var xmlSocket:XMLSocket = new XMLSocket();
var hostName:String = "hostname";
var connectionOpen:Boolean = false;
xmlSocket.addEventListener(Event.CONNECT, onSocketConnection, false, 0, true);
xmlSocket.addEventListener(DataEvent.DATA, onSocketResponse, false, 0, true);
xmlSocket.addEventListener(Event.CLOSE, onSocketClose, false, 0, true);
xmlSocket.addEventListener(IOErrorEvent.IO_ERROR, onIOError, false, 0, true);
function onSocketConnection(evt:Event):void {
//option to go here
connectionOpen = true;
trace("connection open");
}
function onSocketResponse(evt:DataEvent):void {
//option to go here
}
function onIOError(evt:IOErrorEvent):void {
//option to go here for error
}
function onSocketClose(evt:DataEvent):void {
//option to go here
xmlSocket.close();
connectionOpen = false;
}
///////////////////////////////////////////////////////////////////////////////////////////
//
//XML DATA PARSING AND IMAGE LOADING STARTER
//
function xmlLoadingDone(e:Event):void {
xmlLoader.removeEventListener(Event.COMPLETE, xmlLoadingDone);
var XMLdata:XML = new XML(e.currentTarget.data);
}
答案 0 :(得分:0)
您需要一个轮询循环,基本上设置一个Timer
并让已经过的计时器处理程序重新加载XML。
根据需要将循环间隔设为长或短。
此代码示例可以添加到现有代码中......
// Add these imports at the top...
import flash.utils.Timer;
import flash.events.TimerEvent;
// Then insert this code...
var delay:int = 30000; // 30 seconds. (as milliseconds)
var repeat:int = 0; // continue until the Timer is stopped.
var pollingLoop:Timer = new Timer(delay, repeat);
pollingLoop.addEventListener(TimerEvent.TIMER, timerHandler);
pollingLoop.start(); // begin polling.
function timerHandler(e:TimerEvent):void{
// We do the xmlLoading in the timer handler...
xmlLoader.load(new URLRequest(xmlfile));
// So remove the other copy of this ^ line from your code.
}
// The xmlLoader handler now looks after the rest.
那应该做你需要的。