下面是socket源码:
package Scripts.Core
{
import laya.net.Socket;
import laya.utils.Byte;
import laya.events.Event;
import Scripts.Core.MsgManger;
import Scripts.Core.IHandler;
import Scripts.Core.TipsManager;
import laya.utils.Browser;
/**
* ...
* @author
*/
public class Socketmanger{
private static var _I:Socketmanger;
public static function get Instance():Socketmanger
{
if(_I==null)_I=new Socketmanger();
return _I;
}
private static var socket:Socket=null;
private var list:Array=;
public function Connect(url:String):void
{
socket=new Socket();
socket.on(Event.OPEN, this, onSocketOpen);
socket.on(Event.CLOSE, this, onSocketClose);
socket.on(Event.MESSAGE, this, onMessageReveived);
socket.on(Event.ERROR, this, onConnectError);
socket.connectByUrl(url);
}
public function Add(handler:IHandler):void
{
if(list.indexOf(handler) < 0){
list.push(handler);
}
}
public function Remove(handler:IHandler):void
{
var index:int=list.indexOf(handler);
if(index>=0){
list.splice(index,1);
}
}
public function GetHandler(key:String):IHandler
{
for(var i:int=0;i<list.length;i+=1)
{
var handler:IHandler=list[i].GetHandler(key);
if(handler!=null){
return handler;
}
}
return null;
}
public function Send(data:String):void
{
socket.send(data);
}
private function onSocketOpen(e:*=null):void
{
trace("Service connection successful!");
MsgManger.SendMsg("SockeConnetSucc");
}
private function onSocketClose(e:*=null):void
{
trace("Socket closed");
}
private function onMessageReveived(message:*=null):void
{
trace("============message=============");
if (message is String)
{
var dataObj:Object=JSON.parse(message);
trace("Message from server:"+dataObj+"-----------"+dataObj.status);
if(dataObj.messageType){
trace("Reveive message type"+dataObj.messageType);
}
if(dataObj!=null){
if(dataObj.status == "S" || (dataObj.body && dataObj.body.status == "S")){
var key:String=dataObj.messageType;
var handler:IHandler=GetHandler(key);
if(handler!=null){
handler.OnReveived(dataObj);
}
}else
{
var str:String=dataObj.errorMsg;
if(str.indexOf("-100")>=0){
str="This account is already logged in!";
}
TipsManager.Instance.ShowTips(str,"Confirm",OnCallBack);
}
}
}
else if (message is ArrayBuffer)
{
trace(new Byte(message).readUTFBytes());
}
socket.input.clear();
}
private function OnCallBack():void
{
MsgManger.SendMsg("LoginOut");
}
private function onConnectError(e:Event=null):void
{
trace("error");
}
}
}
[/i]
写了个测试例子,可以收到服务器的推送的数据 :<!DOCTYPE html>
Test WebSocket
连接状态:
发送下注请求
<div>
<button id="sendButton1">发送查询开盘剩余时间请求</button>
</div>
连接
断开
<div style="height:300px; overflow:auto;" id="outputdiv">
<pre id="output"></pre>
</div>