XMLSocket
最近在做Socket项目,贴下部分代码,以及遇到的问题记录:
1.安全策略问题。当服务器传来XML解析后加载访问服务器对象时,我考虑了安全策略问题,反而会报错,后来后台工程师告诉他们已经在壳子里考虑到了,我前端就不要考虑了 否则反而会出错。
2..XMLSocket是继承IEventDispatcher的因此我们最好对他的侦听和remove重新写方法 便于管理回收。
3.这个问题是在项目中遇到的 与socket无关 ,就是if(DisplayObject.contains(mc))与if(mc!=null)是有区别的 具体区别在哪我还不清楚,但是后者会在removeChild的时候报错。
private function connect():void {
_socket = new XMLSocket();
_server = dataModel.socketRoot;
_port = dataModel.socketPort;
configSocket(_socket);
_socket.connect(_server,_port);
}
private function configSocket(dispatcher:IEventDispatcher):void {
dispatcher.addEventListener(Event.CLOSE, closeHandler);
dispatcher.addEventListener(Event.CONNECT, connectHandler);
dispatcher.addEventListener(DataEvent.DATA, receivedHandler);
dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
}
private function closeHandler(e:Event):void {
trace("Socket has been closed! Connect Again...");
connect();
}
private function connectHandler(e:Event):void {
trace("Socket Connected successfully!\n");
_socketflashid = dataModel.socketFlashId;
sendMsg("<id>"+_socketflashid+"</id>");
_timer = new Timer(5000, 0);
_timer.addEventListener(TimerEvent.TIMER, heartBeat);
_timer.start();
}
private function heartBeat(e:TimerEvent):void {
sendMsg("<ping />");
}
public function receivedHandler(e:DataEvent):void {
_xml = new XML(e.data);
_xml.ignoreWhitespace = true;
if (_xml.getIn==1) {
modelName=_xml.modelName;
trace(_xml);
loadSWF(modelName+"_default.swf");
} else {
loadSWF("default.swf");
}
}
最新评论及回复