第135頁(第1/2 頁)
}
這段程式碼的作用就是把一個長整型的資料封裝進入位元組流,並且位元組流的首地上返回給二級指標。
業務模組就好理解很多了,比如轉發一個客戶端傳遞來的訊息,透過使用者id的標示找到相應的使用者,再從使用者註冊在伺服器的訊息找到相應的客戶端,然後把訊息透過sket傳輸給另外的客戶端。
韓海花了整整半夜才完成了伺服器的編寫,要不是很多東西他都寫過,也不可能這麼快,一個新手如果寫一個聊天伺服器,從入門到上手就需要一個月,當然新手是指的工科畢業生的水平。
接下來該編寫客戶端了,客戶端和伺服器就不同了,客戶端需要一個載體,這個韓海早想到了,這個時候豌豆射手的攻擊,已經無法破開普通喪屍的防禦了,所以韓海準備把它改成通訊工具,想想大家每人肩膀上一個豌豆射手,然後對著它的炮筒通話是中什麼樣的畫面。
韓海一想到這個,就感覺有無窮的動力,作為一個理工男的惡趣,還真不是一般人可以理解的。
韓海回了回神,開啟了豌豆射手的資料模型,然後開始了長時間的閱讀,這一次因為還是改寫炮筒攻擊方位的模組,所以他是有操作許可權的。
但是這一次韓海需要大改這個模組的函式了,因為韓海要把攻擊的功能,完全改寫成一個收聽聲音和播放聲音的組建,好在豌豆射手天生有聽覺模型,並且在炮筒上也長著嘴巴,韓海只需要把這兩樣功能模組,進行取樣和轉發就可以了。
到了這一步,韓海就必須使用鉤子技術了,他一共編寫了2個篡改函式,因為函式的原型韓海可以看到,所以篡改以後的函式可以無縫對接原來的功能,從而不影響以前的程式。
第一個篡改的是豌豆射手收聽聲音的函式,他只不過是從中擷取了每一幀聲音的資料。
第二個篡改的是豌豆射手發聲的函式,這一次他需要在發出聲音的隊裡中,加入自己從sket收到的聲音資料。
豌豆射手聲音的樣板是標準的p,也就是pulse de dulat,即為脈衝編碼調製。
在光纖通訊系統中,光纖中傳輸的是二進位光脈衝&ldo;0&rdo;碼和&ldo;&rdo;碼,它由二進位數位訊號對光源進行通斷調製而產生。而數位訊號是對連續變化的模擬訊號進行抽樣、量化和編碼產生的,稱為p(pulse-de dulat),即脈衝編碼調製。
而這種樣本資料一般數量級比較大,不利於傳輸,所以韓海使用了一個通用壓縮標準aa進行編碼傳輸,aa即是高階音訊編碼(advaned audi dg)。
目前韓海可以粗略的實現aa的編碼步驟,這種壓縮編碼演算法是有損失的演算法,原理取樣一段時間內的p資料,然後使用傅立葉變幻編解碼,聲音其實就是不同頻域的振幅,疊加起來的正弦波,編碼演算法其實就是進行時域正弦波疊加成近方型的正弦波,而解碼就是使用傅立葉反變換,把疊加正弦波解碼成原來一段段的正弦波。(這裡只是粗略的進行編解碼)
再之後的步驟,把壓縮後的音訊向伺服器進行傳送就可以了,再由伺服器轉發到另外的客戶端,當客戶端接收到音訊訊息的時候,再執行篡改後的發聲函式,這樣就達到了通訊的目的。
當然客戶端也必須建立一套身份標識,否則通訊就無從尋找聯絡人了,這一點韓海已經想到了,當建立模型的時候,韓海可以給每個豌豆射手設定一個數字號碼,當有人想要通訊的時候,在豌豆射手上撥號就可以了,而且系統內部還建立的群組概念,其實就是聊天群,聯絡人可以在群裡發資訊與群組內的所有人通訊。
之後韓海還編寫了一套聊天介面,他把豌豆射手一側綠色的表皮,變