麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 辦公 > Flash > 正文

Flash AS3教程:ApplySocket類

2020-07-17 13:17:40
字體:
供稿:網(wǎng)友
前面學(xué)習(xí)了Flash AS3教程:運(yùn)算符,今天學(xué)習(xí)的ApplySocket類,這個(gè)類是對(duì)socket應(yīng)用就行了系統(tǒng)化封裝,并且考慮了很多因素,整合出來的一套,較為完善的flash程序部分socket解決方案
比如:一些socket服務(wù)端,不一定你send過去一條,他馬上就會(huì)轉(zhuǎn)發(fā),可能會(huì)有延時(shí),或者數(shù)據(jù)堆在一起等現(xiàn)象,而有寫socket服務(wù)端,在發(fā)送數(shù)據(jù)的時(shí)候,會(huì)有一些附加碼等,這樣不利于取出真實(shí)數(shù)據(jù)
該類除了普通的用法,就是對(duì)上述假設(shè)情況整合了一套解決方案,雖不是很完善,但是能解決大部分問題,至少我碰到過的問題,用這個(gè)類應(yīng)該可以輕松搞定,并且可以適合更復(fù)雜的

另外光看講解,可能不大懂,提供了什么解決方案,來解決上面這些問題,因此,麻煩大家賴著性子,先過一到代碼,然后在看后面的用法

index.base.net.ApplySocket類:
對(duì)socket進(jìn)行封裝,并且提供多種socket解決方案

構(gòu)造函數(shù):
public function ApplySocket(_isSide:Boolean = false,_datatype:String = "String")
第一參數(shù),是否使用包邊,對(duì)數(shù)據(jù)進(jìn)行處理,詳細(xì)請(qǐng)看isSide屬性
第二參數(shù),默認(rèn)數(shù)據(jù)發(fā)布類型
如果構(gòu)造函數(shù)中兩個(gè)參數(shù)都是用默認(rèn)值,則該類只是一個(gè)普普通通的socket類

connect方法:
public function connect(_host:String,_port:int):void
連接遠(yuǎn)程socket服務(wù)端
第一參數(shù):主機(jī)地址,可以是202.89.***.***,或者www.*****.com這樣的
第二參數(shù):連接的端口號(hào)

send方法:
public function send(...strs):void
發(fā)送數(shù)據(jù)到socket服務(wù)端
如果datatype為Object或者ArrayObject的時(shí)候,send方法傳入的參數(shù)必須大于或者等于兩個(gè)!否則會(huì)引發(fā)錯(cuò)誤!

close方法:
public function close():void
關(guān)閉與遠(yuǎn)程服務(wù)端連接

connect事件:
當(dāng)連接上了之后,會(huì)調(diào)度該事件

close事件:
當(dāng)socket關(guān)閉后,會(huì)調(diào)度該事件

sync事件:
當(dāng)有數(shù)據(jù)需要同步的時(shí)候,會(huì)調(diào)度該事件

error事件:
當(dāng)連接失敗的時(shí)候,會(huì)調(diào)度該事件

靜態(tài)常量:
public static const ARRAY:String = "Array";
public static const STRING:String = "String";
public static const OBJECT:String = "Object";
public static const ARRAY_ARRAY:String = "ArrayArray";
public static const ARRAY_OBJECT:String = "ArrayObject";
分別表示datatype的5種類型

host屬性:
public var host:String;
當(dāng)connect后,會(huì)自動(dòng)把主機(jī)地址記錄到該值上

port屬性:
public var port:int;
當(dāng)connect后,會(huì)自動(dòng)把連接端口號(hào)記錄到該值上

space屬性:
public var space:String = " ";
當(dāng)send傳入2個(gè)或者2個(gè)以上參數(shù)時(shí),采用何種值進(jìn)行隔開,默認(rèn)是 空格,如果將值改為"",則表示不用間隔進(jìn)行隔開

ls屬性:
public var ls:String = "{";
當(dāng)isSide為true的時(shí)候,放在左邊所使用的記號(hào)

rs屬性:
public var rs:String = "}";
當(dāng)isSide為true的時(shí)候,放在右邊所使用的記號(hào)

connected屬性:
public var connected:Boolean;
返回socket是否已連接上

isSide屬性:
public var isSide:Boolean;
是否加上包邊處理
如果該值為true,則表示,send傳入的參數(shù)都將會(huì)用rs和ls包起來進(jìn)行傳輸?shù)絪ocket端,當(dāng)socket原版返回?cái)?shù)據(jù)的時(shí)候,在使用正則將真正的數(shù)據(jù)取出來,并且以datatype類型返回
反之,則不做任何處理。

datatype屬性:
public var datatype:String;
發(fā)布同步事件的時(shí)候,data采用何種類型返回
String:以字符串返回,就是說傳入什么返回什么

Array:以數(shù)組返回,選擇使用Array返回的時(shí)候,isSide值必須為true,否則無法斷點(diǎn)找出數(shù)組,原理就是,通過使用ls rs兩個(gè)符號(hào)包起來,然后使用正則把符號(hào)中的數(shù)據(jù)提取出來,并且返回?cái)?shù)組。如果,socket服務(wù)端,可能還會(huì)拋出其他數(shù)據(jù)給客戶端,那么采用isSide包邊處理,則socket回傳的數(shù)據(jù),該類會(huì)自動(dòng)處理,將send出去的數(shù)據(jù)原本拿下來,回傳數(shù)據(jù)不受影響

Object:以O(shè)bject返回,如果send過去的數(shù)據(jù),都是以一個(gè)變量名一個(gè)參數(shù)值來傳輸?shù)模敲纯梢圆捎肙bject來接收數(shù)據(jù),這樣的話,返回data中,直接返回send進(jìn)去的第一個(gè)參數(shù),即可獲得值(該類型不常用,一般只在特殊情況使用)

ArrayArray:以數(shù)組嵌套數(shù)組的形式返回?cái)?shù)據(jù),如果socket的執(zhí)行效率不是很高,或者同步要求不是很高,那么客戶端send一次,未必會(huì)接收到同步事件,可能會(huì)堆積在一起,一起發(fā)送到客戶端,這個(gè)時(shí)候,就可以采用ArrayArray的形式,那么該類會(huì)幫你把send過去的數(shù)據(jù),重新劃分,并且以一個(gè)數(shù)組為一個(gè)send數(shù)據(jù)的形式返回,很利于做連連看,對(duì)對(duì)碰類似同步不是很即時(shí),很多個(gè)動(dòng)作可以堆積到一起來發(fā)送

ArrayObject:以數(shù)組嵌套Object的形式返回?cái)?shù)據(jù),不過多說,只不過是Array加上Object的符合模式而已(該類型也不常用)

Object與ArrayObject,很適合用在群聊天室,比如send("sunbright","大家好{哈 哈}");那么即時(shí)你在說話的內(nèi)容加了很多怪怪符號(hào),比如加上分隔符,空格等等,因?yàn)镺bject的解析原理是,拿出第一個(gè)參數(shù)做為引用變量名,然后把后面的所有數(shù)據(jù)賦值給這個(gè)引用變量名來返回,所有后面的數(shù)據(jù)不管怎么樣,都是不會(huì)破壞數(shù)據(jù)內(nèi)容,即得到data數(shù)據(jù)后只要返回data的sunbright值,即可得到說話內(nèi)容,不會(huì)因?yàn)楦袷藉e(cuò)誤,而把說話的內(nèi)容有所改變

該類的作用在datatype屬性中,講了很多東西
下面講講應(yīng)用:
該類的關(guān)鍵就在于isSide和datatype兩個(gè)值,
如果isSide為true,那么就等于啟用了數(shù)據(jù)包邊處理,那么當(dāng)你調(diào)用send方法傳入某些參數(shù),只要socket方做到的是,傳進(jìn)去什么他返回給你什么,那么通過同步事件,又會(huì)自動(dòng)把處理過的數(shù)據(jù),拿出來,做到數(shù)據(jù)的準(zhǔn)確性,不會(huì)因?yàn)閭髁撕芏鄥?shù),有時(shí)候會(huì)紊亂。

而當(dāng)datatype的屬性改變后:
返回給你的數(shù)據(jù),就做了一些處理,這樣程序拿到最終數(shù)據(jù)的時(shí)候,根本不用處理,就可以直接使用,因?yàn)樵擃愐呀?jīng)把需要解決的問題,搞定了
比如數(shù)據(jù)類型是ArrayArray的時(shí)候,請(qǐng)看下面的例子:
下面是一個(gè)同步的例子,接收到的數(shù)據(jù)類型是ArrayArray,拿到數(shù)據(jù)之后for循環(huán)一下,把該放的數(shù)據(jù),放到相應(yīng)位置,則完成同步。程序大大簡化了,不會(huì)我們拿到數(shù)據(jù)了還要處理,如果是第一次玩socket的,肯定還會(huì)碰到很多怪怪問題,比如數(shù)據(jù)不對(duì),拿出來的數(shù)據(jù)有問題,還要進(jìn)行分段處理什么的

CODE:
private function syncFun(e:ApplySocketEvent):void{
var tmpAr:Array = e.data as Array;
for(var i:int = 0; i < tmpAr.length; i ){
var ar:Array = tmpAr[i];
var _index:String = ar[1];
if(_index != index && (has(_index) || ar[0] == "create")){
switch(ar[0]){
case "create":
createTank(_index);
break;
case "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;
break;
case "bullet":
get(_index).bullet();
break;
case "shell":
get(_index).shell();
break;
case "turn":
var turnStr:String = ar[2];
var turnAr:Array = turnStr.split("");
get(_index).turn(expBoo(turnAr[0]),expBoo(turnAr[1]));
break;
}
}
ar = null;
}
tmpAr = null;
}
如果沒看懂,還有蝦米問題,就跟貼吧。。。

上一頁12 下一頁 閱讀全文
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 一区二区三区日韩在线观看 | 久久6国产| 久久精品一二三区白丝高潮 | 日本特级a一片免费观看 | 国产色视频一区 | 在线看免费观看av | 久久精品23 | 最新中文字幕第一页视频 | 日韩在线播放第一页 | 久久精品一二三区 | 欧美女优一区 | 国产99久久久国产精品 | 国产黄色免费网站 | a级高清免费毛片av在线 | 国产一级小视频 | 毛片免费看电影 | 久久撸视频 | 国产精品久久久久网站 | 96视频在线免费观看 | 永久在线观看电影 | 91成人在线免费视频 | 成人午夜视频免费看 | 欧美亚洲另类在线 | 久久久久久久久久久久久久av | 成人羞羞视频在线观看 | 日韩黄色av网站 | 久久毛片 | 日本中文不卡视频 | 97zyz成人免费视频 | 欧洲精品久久 | 日本aaaa片毛片免费观看视频 | 男女生羞羞视频网站在线观看 | 最新久久免费视频 | 精品国产欧美一区二区 | 日韩电影一区二区 | 成人男男视频拍拍拍在线观看 | 日本精品中文字幕 | 激情综合在线 | 看免费5xxaaa毛片 | 91在线色| 欧美成年人视频在线观看 |