flash播放器:Flash AS3教程:ApplySocket类

  前面学习了Flash AS3教程:运算符今天学习ApplySocket类这个类是对应用就行了系统化封装并且考虑了很多原因整合出来较为完善flash部分解决方案

  比如:服务端定你send过去他马上就会转发可能会有延时或者数据堆在起等现象而有写服务端在发送数据时候会有些附加码等这样不利于取出真实数据

  该类除了普通使用方法就是对上述假设情况整合了套解决方案虽不是很完善但是能解决大部分问题至少我碰到过问题用这个类应该可以轻松搞定并且可以适合更复杂

  另外光看讲解可能不大懂提供了什么解决方案来解决上面这些问题因此麻烦大家赖着性子先过到代码然后在看后面使用方法

  index.base.net.ApplySocket类:

  对进行封装并且提供多种解决方案

  构造:

  public function ApplySocket(_isSide:Boolean = false,_datatype:String = "String")

  第参数是否使用包边对数据进行处理详细请看isSide属性

  第 2参数默认数据发布类型

  如果构造中两个参数都是用默认值则该类只是个普普通通

  connect思路方法:

  public function connect(_host:String,_port:):void

  连接远程服务端

  第参数:主机地址可以是202.89.***.***或者www.*****.com这样

  第 2参数:连接端口号

  send思路方法:

  public function send(...strs):void

  发送数据到服务端

  如果datatype为Object或者ArrayObject时候send思路方法传入参数必须大于或者等于两个!否则会引发

  close思路方法:

  public function close:void

  关闭和远程服务端连接

  connect事件:

  当连接上了的后会调度该事件

  close事件:

  当关闭后会调度该事件

  sync事件:

  当有数据需要同步时候会调度该事件

  error事件:

  当连接失败时候会调度该事件

  静态常量:

  public const ARRAY:String = "Array";

  public const STRING:String = "String";

  public const OBJECT:String = "Object";

  public const ARRAY_ARRAY:String = "ArrayArray";

  public const ARRAY_OBJECT:String = "ArrayObject";

  分别表示datatype5种类型

  host属性:

  public var host:String;

  当connect后会自动把主机地址记录到该值上

  port属性:

  public var port:;

  当connect后会自动把连接端口号记录到该值上

  space属性:

  public var space:String = " ";

  当send传入2个或者2个以上参数时采用何种值进行隔开默认是 空格如果将值改为""则表示不用间隔进行隔开

  ls属性:

  public var ls:String = "{";

  当isSide为true时候放在左边所使用记号

  rs属性:

  public var rs:String = "}";

  当isSide为true时候放在右边所使用记号

  connected属性:

  public var connected:Boolean;

  返回是否已连接上

  isSide属性:

  public var isSide:Boolean;

  是否加上包边处理

  如果该值为true则表示send传入参数都将会用rs和ls包起来进行传输到原版返回数据时候在使用正则将真正数据取出来并且以datatype类型返回

  反的则不做任何处理

  datatype属性:

  public var datatype:String;

  发布同步事件时候data采用何种类型返回

  String:以串返回就是说传入什么返回什么

  Array:以返回选择使用Array返回时候isSide值必须为true否则无法断点找出原理就是通过使用ls rs两个符号包起来然后使用正则把符号中数据提取出来并且返回如果服务端可能还会抛出其他数据给客户端那么采用isSide包边处理回传数据该类会自动处理将send出去数据原本拿下来回传数据不受影响

  Object:以Object返回如果send过去数据都是以个变量名个参数值来传输那么可以采用Object来接收数据这样返回data中直接返回send进去个参数即可获得值(该类型不常用般只在特殊情况使用)

  ArrayArray:以嵌套形式返回数据如果执行效率不是很高或者同步要求不是很高那么客户端send未必会接收到同步事件可能会堆积在起发送到客户端这个时候就可以采用ArrayArray形式那么该类会帮你把send过去数据重新划分并且以个send数据形式返回很利于做连连看对对碰类似同步不是很即时很多个动作可以堆积到起来发送

  ArrayObject:以嵌套Object形式返回数据不过多说只不过是Array加上Object符合模式而已(该类型也不常用)

  Object和ArrayObject很适合用在群聊天室比如send("sunbright","大家好{哈 哈}");那么即时你在说话内容加了很多怪怪符号比如加上分隔符空格等等Object解析原理是拿出第个参数做为引用变量名然后把后面所有数据赋值给这个引用变量名来返回所有后面数据不管如何样都是不会破坏数据内容即得到data数据后只要返回datasunbright值即可得到说话内容不会格式而把说话内容有所改变

  该类作用在datatype属性中讲了很多东西

  下面讲讲应用:

  该类关键就在于isSide和datatype两个值

  如果isSide为true那么就等于启用了数据包边处理那么当你send思路方法传入某些参数只要方做到传进去什么他返回给你什么那么通过同步事件又会自动把处理过数据拿出来做到数据准确性不会传了很多参数有时候会紊乱

  而当datatype属性改变后:

  返回给你数据就做了些处理这样拿到最终数据时候根本不用处理就可以直接使用该类已经把需要解决问题搞定了

  比如数据类型是ArrayArray时候请看下面例子:

  下面是个同步例子接收到数据类型是ArrayArray拿到数据的后for循环把该放数据放到相应位置则完成同步大大简化了不会我们拿到数据了还要处理如果是第次玩肯定还会碰到很多怪怪问题比如数据不对拿出来数据有问题还要进行分段处理什么

  CODE:

private function syncFun(e:ApplySocketEvent):void{
    var tmpAr:Array = e.data as Array;
    for(var i: = 0; i < tmpAr.length; i ){
        var ar:Array = tmpAr[i];
        var _index:String = ar[1];
        (_index != index && (has(_index) || ar[0] "create")){
            switch(ar[0]){
                 "create":
                    createTank(_index);
                ;
                 "move":
                    var moveStr:String = ar[2];
                    var moveAr:Array = moveStr.split("");
                    get(_index).move(expBoo(moveAr[0]),expBoo(moveAr[1]),expBoo(moveAr[2]),expBoo(moveAr[3]));
                    moveAr = null;
                ;
                 "bullet":
                    get(_index).bullet;
                ;
                 "shell":
                    get(_index).shell;
                ;
                 "turn":
                    var turnStr:String = ar[2];
                    var turnAr:Array = turnStr.split("");
                    get(_index).turn(expBoo(turnAr[0]),expBoo(turnAr[1]));
                ;
            }
        }
        ar = null;
    }
    tmpAr = null;
}




  如果没看懂还有虾米问题就跟贴吧



Tags:  flashplayer flash播放器

延伸阅读

最新评论

发表评论