日麻折騰筆記Java篇(5)-雀魂的websocket協(xié)議
近況
雀魂瀏覽器和服務(wù)端雖然也是通過websocket交互的但是它的數(shù)據(jù)是用的谷歌家的protobuf,最近一直在研究protobuf,耽擱了不少時間。
參考
從chrome開發(fā)者工具里可以看到雀魂加載了一個liqi.json的protobuf的描述文件,不過谷歌官方壓根沒有提供json描述文件的支持,谷歌一下發(fā)現(xiàn)是一個叫protobuf.js的第三方庫提供的支持,且其只有js版本沒有其他語言版本,怎么辦。。。
從github上面其他倉庫的描述來看,以前版本的雀魂有提供.proto格式的描述文件,現(xiàn)在已經(jīng)下載不到了(?),還好github上面有小伙伴有.proto文件,于是下下來,通過proto程序轉(zhuǎn)成java文件,好家伙,生成了953個java文件:

數(shù)據(jù)解析
從websocket中拿到二進(jìn)制數(shù)據(jù)(byte數(shù)組)后,還需要對其截取才能成功解出來數(shù)據(jù),其客戶端發(fā)送的請求與服務(wù)端響應(yīng)要截取的長度不同,大部分請求是3,響應(yīng)是1,我為了圖方便直接亂寫一通:

typeUrl包含了具體的數(shù)據(jù)類型,需要自己判斷并將其轉(zhuǎn)為protobuf生成的類,如下所示:

這里沒有什么好說的,各種類型判斷的體力活兒,我并沒有實現(xiàn)多復(fù)雜的功能,和天鳳一樣只定義了初始化、摸牌、打牌等幾種事件,實際用起來是下面這個樣子:

好像向聽數(shù)判斷在某些極端情況下還是不太對勁,等有時間再修了。
后續(xù)
昨天打了一把雀魂,東一w立七對都被下家給胡了過去,東二接到領(lǐng)導(dǎo)電話開始查線上的故障,我直接退出游戲了,又是一個四位,非常難受。
up要去搬磚賺錢,等有空再來整日麻相關(guān)的代碼了。