flash sokect 通讯

Dear 丶 2022-08-09 11:54 139阅读 0赞

package net
{
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.events.IOErrorEvent;
import flash.events.ProgressEvent;
import flash.events.SecurityErrorEvent;
import flash.net.Socket;
import flash.utils.ByteArray;
import flash.utils.Endian;

  1. import org.aswing.JOptionPane;
  2. import test.UserControlTest;
  3. import ui.ConsolePane;
  4. public class AppSocket extends EventDispatcher
  5. \{
  6. protected var debug:Boolean = false;
  7. protected var callerUrl:String;
  8. protected var socketURL:String;
  9. //vars returned from discovery
  10. public var sessionID:String;
  11. protected var heartBeatTimeout:int;
  12. protected var connectionClosingTimeout:int;
  13. protected var protocols:Array;
  14. //hold over variables from constructor for discover to use
  15. private var domain:String;
  16. private var protocol:String;
  17. private var proxyHost:String;
  18. private var proxyPort:int;
  19. private var headers:String;
  20. private var ackRegexp:RegExp = new RegExp('(\\\\d+)\\\\+(.\*)');
  21. private var ackId:int = 0;
  22. private var acks:Object = \{\};
  23. public function AppSocket()
  24. \{
  25. \}
  26. public function initSocket():void
  27. \{
  28. socket = new Socket();
  29. init();
  30. addEvent();
  31. \}
  32. public function setSocket(service:Socket):void
  33. \{
  34. socket = service;
  35. init();
  36. addEvent();
  37. \}
  38. private function init():void
  39. \{
  40. socket.endian = Endian.BIG\_ENDIAN;
  41. socket.objectEncoding = 0;

// bean = new ResponseBeanParse();
cacheData = new ByteArray();
}

  1. private function addEvent():void
  2. \{
  3. socket.addEventListener(Event.CONNECT, onConnect);
  4. socket.addEventListener(Event.CLOSE, onClose);
  5. socket.addEventListener(ProgressEvent.SOCKET\_DATA, onData);
  6. socket.addEventListener(IOErrorEvent.IO\_ERROR, onError);
  7. socket.addEventListener(SecurityErrorEvent.SECURITY\_ERROR, onSecurity);
  8. \}
  9. public function connect(host:String, port:int):void
  10. \{
  11. CONFIG::local
  12. \{
  13. trace('connect:' + host + ':' + port);
  14. \}
  15. this.host = host;
  16. this.port = port;
  17. socket.connect(host, port);
  18. \}
  19. public function close():void
  20. \{
  21. socket.close();
  22. \}
  23. /\*\*
  24. \* 发送数据
  25. \*
  26. \* @param cmd 命令代号
  27. \* @param data 数据
  28. \*/
  29. public function sendData(req:String):void
  30. \{
  31. CONFIG::local
  32. \{
  33. trace("send:" + req.toString());
  34. \}
  35. if (socket.connected)
  36. \{

// var str:String = JSON.stringify(req);
// trace(str);
var buffer:ByteArray = new ByteArray();
buffer.writeUTFBytes(req);

socket.writeShort(buffer.length);

  1. socket.writeBytes(buffer);
  2. socket.flush();

ConsolePane.ins.addClientMsg(req);
}
}

  1. /\*\*
  2. \* 连接了服务器时候响应
  3. \*
  4. \* @param e
  5. \*/
  6. private function onConnect(e:Event):void
  7. \{
  8. CONFIG::local
  9. \{
  10. trace("socket has been connected!");
  11. \}

UserControlTest.getInstance().init();
this.dispatchEvent(e);
// var str:String = ‘2[“connection”,{}]‘;
// NetService.instance.sendData(str);
// NetService.instance.sendData({action:’userjoin’, session:’test’, gameid:’ fishing_haiwang2’, tableid: 100});
}

  1. /\*\*
  2. \* 服务器主动断开socket 时候响应
  3. \*
  4. \* @param e
  5. \*/
  6. private function onClose(e:Event):void
  7. \{
  8. CONFIG::local
  9. \{
  10. trace("socket has been closed!");
  11. \}

this.dispatchEvent(e);
}

  1. /\*\*
  2. \* 接收服务器数据响应事件
  3. \* @param e
  4. \*/
  5. private function onData(e:ProgressEvent):void
  6. \{

var socketBytes:ByteArray = new ByteArray();
socket.readBytes(socketBytes, 0, socket.bytesAvailable);
socketBytes.position = 0;

check(socketBytes); // 数据处理
}

public function check(dataAry:ByteArray):void
{
cacheData.position = cacheData.length;
cacheData.writeBytes(dataAry);
cacheData.position = 0;
processCacheData();
}

public function processCacheData():void
{
if(cacheData.length >= 2)
{
var length:int = cacheData.readShort();
if(cacheData.length >= length + 2)
{
cacheData.position = 0;
var d:ByteArray = new ByteArray();
d.writeBytes(cacheData, 2, length);
d.position = 0;
processData(d);

cacheData.position = 0;
var l:ByteArray = new ByteArray();
l.writeBytes(cacheData, (length + 2));
cacheData = l;
cacheData.position = 0;

processCacheData();
}
}
}

  1. private function processData(d:ByteArray):void
  2. \{

var str:String = d.readUTFBytes(d.bytesAvailable);

try{
var msg:Object = JSON.parse(str);
}catch(e:Error){
trace(e.message);
return;
}

ConsolePane.ins.addServerMsg(str);
trace(‘收到服务器消息:’+str);
if(msg.content.status == “error”){
JOptionPane.showMessageDialog(“”, msg.content.error + “\n” + msg.content.debug);
return;
}
var command:ICommad = ActionRegister.getAction(msg.event);
if(command) command.excute(msg);
// var responseBean:AbstractResponseBean = bean.parse(allData);
// if (responseBean)
// {
// var msgCode:int = responseBean.getMsgCode();
// var action:ICommad = ActionRegister.getAction(msgCode);
// if (action)
// {
// action.excute(responseBean);
// }
// else
// {
// CONFIG::local
// {
// trace(“没处理的消息:” + msgCode);
// }
// }
// CONFIG::local
// {
// trace(“handler:” + responseBean.toString());
// }
// }
// else
// {
// CONFIG::local
// {
// trace(“没处理的消息”);
// }
// }
}

  1. private function onError(e:Event):void
  2. \{
  3. CONFIG::local
  4. \{
  5. trace("socket io error ? !");
  6. \}

this.dispatchEvent(e);
}

  1. private function onSecurity(e:Event):void
  2. \{
  3. CONFIG::local
  4. \{
  5. trace("socket security error !");
  6. \}

this.dispatchEvent(e);
}

  1. public function get isConnected():Boolean
  2. \{
  3. return \_isConnected;
  4. \}
  5. public function set isConnected(value:Boolean):void
  6. \{
  7. \_isConnected = value;
  8. \}
  9. private var headStr:String;
  10. private var socket:Socket;
  11. /\*\*
  12. \* 服务器地址
  13. \*/
  14. private var host:String;
  15. /\*\*
  16. \* 服务器端口
  17. \*/
  18. private var port:int;
  19. /\*\*
  20. \* socket连接成功
  21. \*/
  22. private var \_isConnected:Boolean = false;
  23. private var cacheData:ByteArray; //缓存的数据
  24. \}

}

==========================如果你觉得对你有用,请支持一下我,随便打赏点,谢谢======================

20151119105239139

                     

发表评论

表情:
评论列表 (有 0 条评论,139人围观)

还没有评论,来说两句吧...

相关阅读

    相关 NOR Flash 和 NAND Flash

    目录 闪存技术 二者区别 使用场景 闪存技术 闪存技术是一种固态电子存储介质,它广泛应用于移动设备、数码相机等电子产品中。 闪存使用

    相关 flash

    <template> <div class="flashWarp"> <div id="myContent"></div> <!-- 组件控制 --> </d

    相关 Flash

    一 介绍 Macromedia Flash起初是作为嵌入到网页上基于小型动画而诞生的,现在已经成长为一个可以制作整个网站和Web应用的开发环境了。Flash已经不在是单纯的动