建立XML來發送到伺服器。
在Unity裡,我沒有找到可以不添加大量排行來做這個的标準函數,是以我建立了下述機制:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | |
buildXMLRPCRequest 是用來建立 XML的。
你想要編碼的字段HashTable可能包括types: int, string 或者 Hashtable的對象。它将傳回精美格式化的(簡單)XML-RPC字元串,準備發送到伺服器。
發送
把XML發送到伺服器,你需要發出帶有設定為text/xml的mine類型post請求。标準C#函數沒有一個能用于Unity的,但是用這種buildXMLRPCRequest邏輯輸出非常有效,它所做的是:
在Unity發送:
我使用這個代碼:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | |
• 用UTF8把XML編碼成ByteArray
• 建立一個新的Unity WWWForm
• 建立HashTable, 存儲目前的http标頭,覆寫内容類型為text/xml。
• 發送lot給server
• 建立協程等待答複
不适用Unity發送
我發現使用C#(MonoDevelop)的标準版本)開發library比用Uinty開發一切簡單多了。是以如果想用C#做同樣的邏輯發送,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | |
從 XML中提取資料
我寫了一個簡單的解析器。用于下述findNode函數的構造函數應給予原始XML資料,以及你想要找到的子節點對象。如果節點可以在最進階别的XML字元串找到,它将傳回該節點的值,如果找不到就null。這個解析器是特定于:簡單的XML-RPC,需要花點時間來解碼編碼的字元,那也很簡單。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | |