BaseSocket类-可以提升Socket数据传输效率

[AS3]BaseSocket类-可以提升Socket数据传输效率

需要Flash Player 9.0或更高版本的支持

原理就是结合AMF3和ByteArray的特性对原来数据进行压缩后再传输,这样就可以大大提高数据传输效率。

我现在把客户端方法进行优化,现在写成一个BaseSocket类来方便调用。




BaseSocket类

view plain copy to clipboard print ?
  1. /**  
  2. * @author Kinglong  
  3. * @link [email protected]  
  4. * @builddate 20081121  
  5. * @flashplayerversion 9+  
  6. * @version 0.1  
  7. */   
  8.   
  9. package  com.klstudio.socket {     
  10.       
  11.     import  flash.events.*;  
  12.     import  flash.net.Socket;  
  13.     import  flash.net.ObjectEncoding;  
  14.     import  flash.system.Security;  
  15.     import  flash.utils.ByteArray;  
  16.   
  17.     public  class  BaseSocket extends  EventDispatcher{  
  18.           
  19.         private  var _host:String;  
  20.         private  var _port:uint;  
  21.         private  var _socket:Socket;  
  22.           
  23.         public  function BaseSocket(host:String, port:uint = 80 ) {  
  24.             this ._host = host;  
  25.             this ._port = port;  
  26.             this ._socket = new  Socket();  
  27.             this ._socket.objectEncoding = ObjectEncoding.AMF3;            
  28.             Security.loadPolicyFile("xmlsocket://"  + this .host + ":"  + this .port);  
  29.             this ._socket.addEventListener(Event.CONNECT, handler);  
  30.             this ._socket.addEventListener(Event.CLOSE, handler);  
  31.             this ._socket.addEventListener(IOErrorEvent.IO_ERROR, handler);  
  32.             this ._socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, handler);  
  33.             this ._socket.addEventListener(ProgressEvent.SOCKET_DATA, handler);  
  34.         }  
  35.           
  36.         public  function get host():String {  
  37.             return  _host;  
  38.         }  
  39.           
  40.         public  function get port():uint {  
  41.             return  _port;  
  42.         }  
  43.           
  44.         public  function get connected():Boolean {  
  45.             return  this ._socket.connected;  
  46.         }  
  47.           
  48.         public  function connect():void  {  
  49.             this ._socket.connect(host, port);  
  50.         }  
  51.           
  52.         public  function close():void  {  
  53.             this ._socket.close();  
  54.         }  
  55.           
  56.         public  function send(params:Object=null ):void  {  
  57.             if (!this .connected || params == null ){  
  58.                 return ;  
  59.             }  
  60.             var bytes:ByteArray = new  ByteArray();  
  61.             bytes.writeObject(params);  
  62.             bytes.compress();  
  63.             this ._socket.writeBytes(bytes);  
  64.             this ._socket.flush();  
  65.             this .dispatchEvent(new  BaseSocketEvent(BaseSocketEvent.SENDING, params));             
  66.         }  
  67.           
  68.         private  function received():void  {                
  69.             var bytes:ByteArray = new  ByteArray();  
  70.             while  (this ._socket.bytesAvailable > 0 ) {  
  71.                 this ._socket.readBytes(bytes, 0this ._socket.bytesAvailable);  
  72.             }  
  73.             try {                  
  74.                 bytes.uncompress();  
  75.                 this .dispatchEvent(new  BaseSocketEvent(BaseSocketEvent.RECEIVED, bytes.readObject()));  
  76.             }catch  (error:Error) {  
  77.                 this .dispatchEvent(new  BaseSocketEvent(BaseSocketEvent.DECODE_ERROR));  
  78.             }  
  79.         }  
  80.           
  81.         private  function handler(event:Event):void  {  
  82.             switch (event.type) {  
  83.                 case  Event.CLOSE:  
  84.                     this .dispatchEvent(new  BaseSocketEvent(BaseSocketEvent.CLOSE));  
  85.                     break ;  
  86.                 case  Event.CONNECT:                   
  87.                 case  IOErrorEvent.IO_ERROR:  
  88.                 case  SecurityErrorEvent.SECURITY_ERROR:  
  89.                     this .dispatchEvent(new  BaseSocketEvent(event.type));  
  90.                     break ;  
  91.                 case  ProgressEvent.SOCKET_DATA:  
  92.                     this .received();  
  93.                     break ;  
  94.             }  
  95.         }  
  96.     }  
  97. }  
view plain copy to clipboard print ?
  1. /**<br/>*  
  2. @author Kinglong<br/>* @link [email protected]<br/>*  
  3. @builddate 20081121<br/>* @flashplayerversion 9+<br/>*  
  4. @version 0.1<br/>*/ <br/><br/>package   
  5. com.klstudio.socket { <br/> <br/> import   
  6. flash.events.*;<br/> import  flash.net.Socket;<br/> import   
  7. flash.net.ObjectEncoding;<br/> import   
  8. flash.system.Security;<br/> import   
  9. flash.utils.ByteArray;<br/><br/> public  class  BaseSocket  
  10. extends  EventDispatcher{<br/> <br/> private  var  
  11. _host:String;<br/> private  var _port:uint;<br/> private  var  
  12. _socket:Socket;<br/> <br/> public  function  
  13. BaseSocket(host:String, port:uint = 80 ) {<br/> this ._host =  
  14. host;<br/> this ._port = port;<br/> this ._socket = new   
  15. Socket();<br/> this ._socket.objectEncoding = ObjectEncoding.AMF3;  
  16. <br/> Security.loadPolicyFile("xmlsocket://"  + this .host + ":"  +  
  17. this .port);<br/> this ._socket.addEventListener(Event.CONNECT,  
  18. handler);<br/> this ._socket.addEventListener(Event.CLOSE,  
  19. handler);<br/>  
  20. this ._socket.addEventListener(IOErrorEvent.IO_ERROR,  
  21. handler);<br/>  
  22. this ._socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR,  
  23. handler);<br/>  
  24. this ._socket.addEventListener(ProgressEvent.SOCKET_DATA,  
  25. handler);<br/> }<br/> <br/> public  function get  
  26. host():String {<br/> return  _host;<br/> }<br/>  
  27. <br/> public  function get port():uint {<br/> return   
  28. _port;<br/> }<br/> <br/> public  function get  
  29. connected():Boolean {<br/> return   
  30. this ._socket.connected;<br/> }<br/> <br/> public   
  31. function connect():void  {<br/> this ._socket.connect(host,  
  32. port);<br/> }<br/> <br/> public  function close():void   
  33. {<br/> this ._socket.close();<br/> }<br/> <br/>  
  34. public  function send(params:Object=null ):void  {<br/>  
  35. if (!this .connected || params == null ){<br/> return ;<br/>  
  36. }<br/> var bytes:ByteArray = new  ByteArray();<br/>  
  37. bytes.writeObject(params);<br/> bytes.compress();<br/>  
  38. this ._socket.writeBytes(bytes);<br/>  
  39. this ._socket.flush();<br/> this .dispatchEvent(new   
  40. BaseSocketEvent(BaseSocketEvent.SENDING, params)); <br/>  
  41. }<br/> <br/> private  function received():void  { <br/>  
  42. var bytes:ByteArray = new  ByteArray();<br/> while   
  43. (this ._socket.bytesAvailable > 0 ) {<br/>  
  44. this ._socket.readBytes(bytes, 0 ,  
  45. this ._socket.bytesAvailable);<br/> }<br/> try { <br/>  
  46. bytes.uncompress();<br/> this .dispatchEvent(new   
  47. BaseSocketEvent(BaseSocketEvent.RECEIVED,  
  48. bytes.readObject()));<br/> }catch  (error:Error) {<br/>  
  49. this .dispatchEvent(new   
  50. BaseSocketEvent(BaseSocketEvent.DECODE_ERROR));<br/> }<br/>  
  51. }<br/> <br/> private  function handler(event:Event):void   
  52. {<br/> switch (event.type) {<br/> case   
  53. Event.CLOSE:<br/> this .dispatchEvent(new   
  54. BaseSocketEvent(BaseSocketEvent.CLOSE));<br/> break ;<br/>  
  55. case  Event.CONNECT: <br/> case  IOErrorEvent.IO_ERROR:<br/>  
  56. case  SecurityErrorEvent.SECURITY_ERROR:<br/>  
  57. this .dispatchEvent(new  BaseSocketEvent(event.type));<br/>  
  58. break ;<br/> case  ProgressEvent.SOCKET_DATA:<br/>  
  59. this .received();<br/> break ;<br/> }<br/> }<br/>  
  60. }<br/>}  

/**<br/>* @author Kinglong<br/>* @link [email protected]<br/>* @builddate 20081121<br/>* @flashplayerversion 9+<br/>* @version 0.1<br/>*/<br/><br/>package com.klstudio.socket { <br/> <br/> import flash.events.*;<br/> import flash.net.Socket;<br/> import flash.net.ObjectEncoding;<br/> import flash.system.Security;<br/> import flash.utils.ByteArray;<br/><br/> public class BaseSocket extends EventDispatcher{<br/> <br/> private var _host:String;<br/> private var _port:uint;<br/> private var _socket:Socket;<br/> <br/> public function BaseSocket(host:String, port:uint = 80) {<br/> this._host = host;<br/> this._port = port;<br/> this._socket = new Socket();<br/> this._socket.objectEncoding = ObjectEncoding.AMF3; <br/> Security.loadPolicyFile("xmlsocket://" + this.host + ":" + this.port);<br/> this._socket.addEventListener(Event.CONNECT, handler);<br/> this._socket.addEventListener(Event.CLOSE, handler);<br/> this._socket.addEventListener(IOErrorEvent.IO_ERROR, handler);<br/> this._socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, handler);<br/> this._socket.addEventListener(ProgressEvent.SOCKET_DATA, handler);<br/> }<br/> <br/> public function get host():String {<br/> return _host;<br/> }<br/> <br/> public function get port():uint {<br/> return _port;<br/> }<br/> <br/> public function get connected():Boolean {<br/> return this._socket.connected;<br/> }<br/> <br/> public function connect():void {<br/> this._socket.connect(host, port);<br/> }<br/> <br/> public function close():void {<br/> this._socket.close();<br/> }<br/> <br/> public function send(params:Object=null):void {<br/> if(!this.connected || params == null){<br/> return;<br/> }<br/> var bytes:ByteArray = new ByteArray();<br/> bytes.writeObject(params);<br/> bytes.compress();<br/> this._socket.writeBytes(bytes);<br/> this._socket.flush();<br/> this.dispatchEvent(new BaseSocketEvent(BaseSocketEvent.SENDING, params)); <br/> }<br/> <br/> private function received():void { <br/> var bytes:ByteArray = new ByteArray();<br/> while (this._socket.bytesAvailable > 0) {<br/> this._socket.readBytes(bytes, 0, this._socket.bytesAvailable);<br/> }<br/> try{ <br/> bytes.uncompress();<br/> this.dispatchEvent(new BaseSocketEvent(BaseSocketEvent.RECEIVED, bytes.readObject()));<br/> }catch (error:Error) {<br/> this.dispatchEvent(new BaseSocketEvent(BaseSocketEvent.DECODE_ERROR));<br/> }<br/> }<br/> <br/> private function handler(event:Event):void {<br/> switch(event.type) {<br/> case Event.CLOSE:<br/> this.dispatchEvent(new BaseSocketEvent(BaseSocketEvent.CLOSE));<br/> break;<br/> case Event.CONNECT: <br/> case IOErrorEvent.IO_ERROR:<br/> case SecurityErrorEvent.SECURITY_ERROR:<br/> this.dispatchEvent(new BaseSocketEvent(event.type));<br/> break;<br/> case ProgressEvent.SOCKET_DATA:<br/> this.received();<br/> break;<br/> }<br/> }<br/> }<br/>}

BaseSocketEvent类


view plain copy to clipboard print ?
  1. /**  
  2. * @author Kinglong  
  3. * @link [email protected]  
  4. * @builddate 20081121  
  5. * @flashplayerversion 9+  
  6. * @version 0.1  
  7. */   
  8.   
  9. package  com.klstudio.socket {  
  10.           
  11.     import  flash.events.*;  
  12.   
  13.     public  class  BaseSocketEvent extends  Event {  
  14.           
  15.         public  static  const  SECURITY_ERROR:String = SecurityErrorEvent.SECURITY_ERROR;  
  16.         public  static  const  IO_ERROR:String = IOErrorEvent.IO_ERROR;  
  17.         public  static  const  DECODE_ERROR:String = "decode_error" ;  
  18.         public  static  const  RECEIVED:String = "received" ;  
  19.         public  static  const  SENDING:String = "sending" ;  
  20.         public  static  const  CLOSE:String = Event.CLOSE;  
  21.         public  static  const  CONNECT:String = Event.CONNECT;  
  22.           
  23.         private  var _data:Object;  
  24.           
  25.         public  function BaseSocketEvent(type:String, data:Object = null ) {  
  26.             super (type, true );  
  27.             this ._data = data;            
  28.         }  
  29.           
  30.         public  function get data():Object {  
  31.             return  _data;  
  32.         }  
  33.           
  34.         override public  function toString():String {  
  35.             return  formatToString("BaseSocketEvent""type""bubbles""cancelable""data" );  
  36.         }  
  37.           
  38.         override public  function clone():Event {  
  39.             return  new  BaseSocketEvent(type, data);  
  40.         }  
  41.     }  
  42.       
  43. }  
view plain copy to clipboard print ?
  1. /**<br/>*  
  2. @author Kinglong<br/>* @link [email protected]<br/>*  
  3. @builddate 20081121<br/>* @flashplayerversion 9+<br/>*  
  4. @version 0.1<br/>*/ <br/><br/>package   
  5. com.klstudio.socket {<br/> <br/> import   
  6. flash.events.*;<br/><br/> public  class  BaseSocketEvent  
  7. extends  Event {<br/> <br/> public  static  const   
  8. SECURITY_ERROR:String = SecurityErrorEvent.SECURITY_ERROR;<br/>  
  9. public  static  const  IO_ERROR:String = IOErrorEvent.IO_ERROR;<br/>  
  10. public  static  const  DECODE_ERROR:String = "decode_error" ;<br/>  
  11. public  static  const  RECEIVED:String = "received" ;<br/> public   
  12. static  const  SENDING:String = "sending" ;<br/> public  static  const   
  13. CLOSE:String = Event.CLOSE;<br/> public  static  const   
  14. CONNECT:String = Event.CONNECT;<br/> <br/> private  var  
  15. _data:Object;<br/> <br/> public  function  
  16. BaseSocketEvent(type:String, data:Object = null ) {<br/>  
  17. super (type, true );<br/> this ._data = data; <br/>  
  18. }<br/> <br/> public  function get data():Object {<br/>  
  19. return  _data;<br/> }<br/> <br/> override public   
  20. function toString():String {<br/> return   
  21. formatToString("BaseSocketEvent""type""bubbles""cancelable" ,  
  22. "data" );<br/> }<br/> <br/> override public  function  
  23. clone():Event {<br/> return  new  BaseSocketEvent(type,  
  24. data);<br/> }<br/> }<br/> <br/>}  

/**<br/>* @author Kinglong<br/>* @link [email protected]<br/>* @builddate 20081121<br/>* @flashplayerversion 9+<br/>* @version 0.1<br/>*/<br/><br/>package com.klstudio.socket {<br/> <br/> import flash.events.*;<br/><br/> public class BaseSocketEvent extends Event {<br/> <br/> public static const SECURITY_ERROR:String = SecurityErrorEvent.SECURITY_ERROR;<br/> public static const IO_ERROR:String = IOErrorEvent.IO_ERROR;<br/> public static const DECODE_ERROR:String = "decode_error";<br/> public static const RECEIVED:String = "received";<br/> public static const SENDING:String = "sending";<br/> public static const CLOSE:String = Event.CLOSE;<br/> public static const CONNECT:String = Event.CONNECT;<br/> <br/> private var _data:Object;<br/> <br/> public function BaseSocketEvent(type:String, data:Object = null) {<br/> super(type, true);<br/> this._data = data; <br/> }<br/> <br/> public function get data():Object {<br/> return _data;<br/> }<br/> <br/> override public function toString():String {<br/> return formatToString("BaseSocketEvent", "type", "bubbles", "cancelable", "data");<br/> }<br/> <br/> override public function clone():Event {<br/> return new BaseSocketEvent(type, data);<br/> }<br/> }<br/> <br/>}

调用实例

view plain copy to clipboard print ?
  1. /**  
  2. * ...  
  3. * @author Kinglong  
  4. * @version 0.1  
  5. */   
  6.   
  7. package  project.test {  
  8.       
  9.     import  flash.display.*;  
  10.     import  flash.events.*;  
  11.     import  flash.text.TextField;  
  12.       
  13.     import  com.klstudio.data.Map;  
  14.     import  com.klstudio.socket.BaseSocket;  
  15.     import  com.klstudio.socket.BaseSocketEvent;  
  16.       
  17.     public  class  TestGame extends  Sprite {    
  18.         private  var _socket:BaseSocket;  
  19.         private  var _id:uint;  
  20.         private  var _lists:Map;  
  21.         private  var _info:TextField;  
  22.         public  function TestGame() {              
  23.             _info = new  TextField();  
  24.             _info.selectable = false ;             
  25.             _info.text = "未连接" ;  
  26.             addChild(_info);          
  27.               
  28.             stage.addEventListener(MouseEvent.MOUSE_UP, stageHandler);            
  29.             _lists = new  Map();  
  30.             _socket = new  BaseSocket("localhost"110 );  
  31.             configureListeners(_socket);  
  32.             _socket.connect();            
  33.         }     
  34.           
  35.         private  function configureListeners(dispatcher:IEventDispatcher):void  {  
  36.             dispatcher.addEventListener(BaseSocketEvent.CLOSE, handler);  
  37.             dispatcher.addEventListener(BaseSocketEvent.CONNECT, handler);  
  38.             dispatcher.addEventListener(BaseSocketEvent.IO_ERROR, handler);  
  39.             dispatcher.addEventListener(BaseSocketEvent.SECURITY_ERROR, handler);  
  40.             dispatcher.addEventListener(BaseSocketEvent.SENDING, handler);  
  41.             dispatcher.addEventListener(BaseSocketEvent.RECEIVED, handler);  
  42.             dispatcher.addEventListener(BaseSocketEvent.DECODE_ERROR, handler);  
  43.         }  
  44.           
  45.         private  function handler(event:BaseSocketEvent):void  {  
  46.             switch (event.type) {  
  47.                 case  BaseSocketEvent.RECEIVED:  
  48.                     receive(event.data);  
  49.                     break ;  
  50.                 case  BaseSocketEvent.CLOSE:  
  51.                     debug("连接关闭" );  
  52.                     removeAll();  
  53.                     break ;  
  54.                 case  BaseSocketEvent.CONNECT:  
  55.                     debug("连接中..." );  
  56.                     _socket.send( { event:"init"  } );  
  57.                     break ;  
  58.                 case  BaseSocketEvent.IO_ERROR:  
  59.                 case  BaseSocketEvent.SECURITY_ERROR:  
  60.                     debug("连接失败" );  
  61.                     break ;  
  62.                 case  BaseSocketEvent.DECODE_ERROR:  
  63.                     debug("解码失败" );  
  64.                     break ;    
  65.             }  
  66.         }  
  67.           
  68.         private  function stageHandler(event:MouseEvent):void  {  
  69.             _socket.send( { event:"move" , x:this .mouseX, y:this .mouseY } );  
  70.         }  
  71.           
  72.         private  function receive(object:Object):void  {  
  73.             switch (object.event) {  
  74.                 case  "init" :  
  75.                     init(object.id);  
  76.                     for  (var i:uint = 0 ; i < object.list.length; i++ ) {  
  77.                         var item:Object = object.list[i];  
  78.                         add(item.id, item.x, item.y);  
  79.                     }  
  80.                     break ;  
  81.                 case  "move" :  
  82.                     move(object.id, object.x, object.y);                      
  83.                     break ;  
  84.                 case  "remove" :  
  85.                     remove(object.id);                    
  86.                     break ;  
  87.                 case  "add" :  
  88.                     add(object.id);  
  89.                     break ;  
  90.             }  
  91.         }  
  92.           
  93.         private  function init(id:uint):void  {  
  94.             this ._id = id;  
  95.             add(id);  
  96.         }  
  97.           
  98.         private  function add(id:uint, x:Number = undefined, y:Number = undefined):void  {              
  99.             x = x || stage.stageWidth / 2 ;  
  100.             y = y || stage.stageHeight / 2 ;  
  101.             if  (_lists.containsKey(id)) {  
  102.                 return ;  
  103.             }  
  104.             var role:GameRole = new  GameRole(id,_id == id);  
  105.             role.move(x,y);  
  106.             addChild(role);  
  107.             _lists.put(id, role);  
  108.         }  
  109.           
  110.         private  function move(id:uint, x:Number, y:Number):void  {  
  111.             if  (_lists.containsKey(id)) {  
  112.                 var role:GameRole = _lists.get(id);  
  113.                 role.to(x, y);  
  114.             }  
  115.         }  
  116.           
  117.         private  function remove(id:uint):void  {  
  118.             if  (_lists.containsKey(id)) {  
  119.                 var role:GameRole = _lists.remove(id);  
  120.                 trace(role);  
  121.                 if  (this .contains(role)) {  
  122.                     removeChild(role);                    
  123.                 }  
  124.                 role = null ;  
  125.             }  
  126.         }  
  127.           
  128.         private  function removeAll():void  {  
  129.             var keys:Array = _lists.keys;  
  130.             for  (var i:uint = 0 ; i < keys.length; i++ ) {  
  131.                 var role:GameRole = _lists.remove(keys[i]);               
  132.                 if  (this .contains(role)) {  
  133.                     removeChild(role);  
  134.                 }  
  135.                 role = null ;                  
  136.             }  
  137.         }  
  138.           
  139.         private  function debug(msg:String):void  {  
  140.             _info.text = msg;  
  141.             trace(msg);  
  142.         }  
  143.           
  144.     }  
  145.       
  146. }  
view plain copy to clipboard print ?
  1. /**<br/>*  
  2. ...<br/>* @author Kinglong<br/>* @version  
  3. 0.1<br/>*/ <br/><br/>package  project.test {<br/>  
  4. <br/> import  flash.display.*;<br/> import   
  5. flash.events.*;<br/> import  flash.text.TextField;<br/>  
  6. <br/> import  com.klstudio.data.Map;<br/> import   
  7. com.klstudio.socket.BaseSocket;<br/> import   
  8. com.klstudio.socket.BaseSocketEvent;<br/> <br/> public   
  9. class  TestGame extends  Sprite { <br/> private  var  
  10. _socket:BaseSocket;<br/> private  var _id:uint;<br/> private   
  11. var _lists:Map;<br/> private  var _info:TextField;<br/>  
  12. public  function TestGame() { <br/> _info = new   
  13. TextField();<br/> _info.selectable = false ; <br/>  
  14. _info.text = "未连接" ;<br/> addChild(_info); <br/> <br/>  
  15. stage.addEventListener(MouseEvent.MOUSE_UP, stageHandler); <br/>  
  16. _lists = new  Map();<br/> _socket = new  BaseSocket("localhost" ,  
  17. 110 );<br/> configureListeners(_socket);<br/>  
  18. _socket.connect(); <br/> } <br/> <br/> private   
  19. function configureListeners(dispatcher:IEventDispatcher):void   
  20. {<br/> dispatcher.addEventListener(BaseSocketEvent.CLOSE,  
  21. handler);<br/>  
  22. dispatcher.addEventListener(BaseSocketEvent.CONNECT,  
  23. handler);<br/>  
  24. dispatcher.addEventListener(BaseSocketEvent.IO_ERROR,  
  25. handler);<br/>  
  26. dispatcher.addEventListener(BaseSocketEvent.SECURITY_ERROR,  
  27. handler);<br/>  
  28. dispatcher.addEventListener(BaseSocketEvent.SENDING,  
  29. handler);<br/>  
  30. dispatcher.addEventListener(BaseSocketEvent.RECEIVED,  
  31. handler);<br/>  
  32. dispatcher.addEventListener(BaseSocketEvent.DECODE_ERROR,  
  33. handler);<br/> }<br/> <br/> private  function  
  34. handler(event:BaseSocketEvent):void  {<br/> switch (event.type)  
  35. {<br/> case  BaseSocketEvent.RECEIVED:<br/>  
  36. receive(event.data);<br/> break ;<br/> case   
  37. BaseSocketEvent.CLOSE:<br/> debug("连接关闭" );<br/>  
  38. removeAll();<br/> break ;<br/> case   
  39. BaseSocketEvent.CONNECT:<br/> debug("连接中..." );<br/>  
  40. _socket.send( { event:"init"  } );<br/> break ;<br/> case   
  41. BaseSocketEvent.IO_ERROR:<br/> case   
  42. BaseSocketEvent.SECURITY_ERROR:<br/> debug("连接失败" );<br/>  
  43. break ;<br/> case  BaseSocketEvent.DECODE_ERROR:<br/>  
  44. debug("解码失败" );<br/> break ; <br/> }<br/> }<br/>  
  45. <br/> private  function stageHandler(event:MouseEvent):void   
  46. {<br/> _socket.send( { event:"move" , x:this .mouseX, y:this .mouseY  
  47. } );<br/> }<br/> <br/> private  function  
  48. receive(object:Object):void  {<br/> switch (object.event)  
  49. {<br/> case  "init" :<br/> init(object.id);<br/> for   
  50. (var i:uint = 0 ; i < object.list.length; i++ ) {<br/> var  
  51. item:Object = object.list[i];<br/> add(item.id, item.x,  
  52. item.y);<br/> }<br/> break ;<br/> case   
  53. "move" :<br/> move(object.id, object.x, object.y); <br/>  
  54. break ;<br/> case  "remove" :<br/> remove(object.id);  
  55. <br/> break ;<br/> case  "add" :<br/>  
  56. add(object.id);<br/> break ;<br/> }<br/> }<br/>  
  57. <br/> private  function init(id:uint):void  {<br/> this ._id =  
  58. id;<br/> add(id);<br/> }<br/> <br/> private   
  59. function add(id:uint, x:Number = undefined, y:Number = undefined):void   
  60. { <br/> x = x || stage.stageWidth / 2 ;<br/> y = y ||  
  61. stage.stageHeight / 2 ;<br/> if  (_lists.containsKey(id))  
  62. {<br/> return ;<br/> }<br/> var role:GameRole = new   
  63. GameRole(id,_id == id);<br/> role.move(x,y);<br/>  
  64. addChild(role);<br/> _lists.put(id, role);<br/>  
  65. }<br/> <br/> private  function move(id:uint, x:Number,  
  66. y:Number):void  {<br/> if  (_lists.containsKey(id)) {<br/>  
  67. var role:GameRole = _lists.get(id);<br/> role.to(x,  
  68. y);<br/> }<br/> }<br/> <br/> private  function  
  69. remove(id:uint):void  {<br/> if  (_lists.containsKey(id))  
  70. {<br/> var role:GameRole = _lists.remove(id);<br/>  
  71. trace(role);<br/> if  (this .contains(role)) {<br/>  
  72. removeChild(role); <br/> }<br/> role = null ;<br/>  
  73. }<br/> }<br/> <br/> private  function removeAll():void   
  74. {<br/> var keys:Array = _lists.keys;<br/> for  (var i:uint =  
  75. 0 ; i < keys.length; i++ ) {<br/> var role:GameRole =  
  76. _lists.remove(keys[i]); <br/> if  (this .contains(role))  
  77. {<br/> removeChild(role);<br/> }<br/> role = null ;  
  78. <br/> }<br/> }<br/> <br/> private  function  
  79. debug(msg:String):void  {<br/> _info.text = msg;<br/>  
  80. trace(msg);<br/> }<br/> <br/> }<br/>  
  81. <br/>} 

你可能感兴趣的:(socket,String,object,function,null,Class)