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");

            }

        }
 

Tags:XMLSocket  

0 Comment so far



Leave a reply