RakNet iOS of Unity 5.x 的應用il2cpp的bug規(guī)避

由于Unity的iOS版本需要為了運行效率,需要應用il2cpp模式。

但是RakNet該網絡庫的一些接口通過il2cpp導出之后,會出現bug。

最開始的方案是想導入libRakNet.a靜態(tài)庫,該庫通過xcode編譯成iOS版本。

該libRakNet.a庫,應用于原生的ObjectC工程是沒問題,但是應用到unity通過il2cpp之后,就出現連接不成功的情況。

進一步分析:在服務器上單步之后,發(fā)現服務器可以接收到請求連接的消息,但是接收到的消息頭解析是錯亂的。

也在stackOver上找到了別人也有遇到過類似問題,詳細;

修改方案是將 DatagramHeaderFormat 結構體中的 serialize 方法名字重命名下,在文件ReliabilityLayer.cpp 重新編譯成靜態(tài)庫之后,發(fā)現請求協議頭解析是改正確了。

但是連接還是不成功。

繼續(xù)分析,發(fā)現是服務器在請求處理連接請求的時候,會把該客戶端還沒完成三次握手的情況下,將該客戶端判定為超時,直接關閉該連接。

懷疑還是在connection_time的指通過il2cpp導出的C++代碼中還存在問題。因為要的比較急,就沒有繼續(xù)研究下去,基本上可以確定是il2cpp的bug。

放棄了使用靜態(tài)庫方案。

因為il2cpp本身導出就是C++代碼,那就直接將raknet的源碼導入到Plugin/iOS/Raknet/ 目錄下,果然可行。

一、在加入前需要加入兩部分代碼:

1、RakNet->Source下的全部加載

2、通過Swig導出的導出接口文件也需要放進去,但是需要將RakNet_wrap.cxx 的后綴修改成cpp,RakNet_wrap.cpp 和RakNet_wrap.h兩個文件也需要加入,否者在C#中是獲取不到接口的。

二、導出成xcode工程之后,開始編譯,

因為有動態(tài)類型轉換的應用,所以編譯時會報錯,在XCode的 build setting中將Enable C++ runtime Types 修改yes

如果是使用xcodebuild編譯的話,就帶上 GCC_ENABLE_CPP_RTTI = YES 編譯選項就不會報錯。

打包導出ipa測試網絡連接ok了。


修改之后的代碼連接 在此

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 發(fā)現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 15,654評論 4 61
  • 今天是2017年11月19日,風變實習3個半月的日子。技術上沒有成長起來去勝任好工作,以至于推遲了轉正時間,又多一...
    游腦詩閱讀 215評論 0 0
  • 見字如面,如雁帶去思念;見字如面,如歌撫慰流年。消失了時空,懷念成相見。信中你我,定格成永遠的容顏。 文字有溫度,...
    花生栗子閱讀 1,393評論 0 1
  • 感恩環(huán)衛(wèi)工人把我們店前刷的干干凈凈,每隔倆天就用水槍把門前的道路刷一遍。看著干凈的路面心情都是美的。 感恩今天一位...
    孔美榮閱讀 230評論 0 0

友情鏈接更多精彩內容