如果数据有变化,如何使用套接字轮询xml数据(AS3)

时间:2011-03-08 11:40:14

标签: xml actionscript-3

我正处于失败状态并非常感谢一些帮助,因为它已经超出了我的舒适区域。基本上我在我工作的各个办公室的屏幕上显示销售演示。这些显示每日销售数据可以随着某人进行销售而变化。我有一个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);

    }

1 个答案:

答案 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.

那应该做你需要的。