?
圖1 藍(lán)牙聊天系統(tǒng)服務(wù)器架構(gòu)
?
圖2 藍(lán)牙聊天系統(tǒng)客戶端架構(gòu)
下面對(duì)各層做簡(jiǎn)要介紹:
表示層向用戶展示模型的狀態(tài),在本軟件中是以每個(gè)Activity 的對(duì)應(yīng)的頁(yè)面、對(duì)話框和一些顯示控件所展現(xiàn),一般以layout 文件夾下的布局文件承載。主要用來(lái)輸入和顯示文本消息、打開(kāi)藍(lán)牙"可被查找"功能及搜索藍(lán)牙設(shè)備。
控制層負(fù)責(zé)表示層和業(yè)務(wù)層的流程控制,一方面將表示層的調(diào)用發(fā)到業(yè)務(wù)層請(qǐng)求處理;另一方面將業(yè)務(wù)層的處理結(jié)果反應(yīng)到表示層進(jìn)行界面上的顯示。
業(yè)務(wù)和數(shù)據(jù)交互層,封裝了藍(lán)牙數(shù)據(jù)傳輸?shù)暮诵牟僮?,如?chuàng)建socket 創(chuàng)建通道、傳輸數(shù)據(jù)、處理輸入輸出流等。它可以通過(guò)控制層被調(diào)用,也可以在收到連接請(qǐng)求或文本消息時(shí)把結(jié)果返回給控制層,進(jìn)而返回到表示層。
采用 MVC 設(shè)計(jì)模式,對(duì)整個(gè)代碼進(jìn)行了分層,使程序結(jié)構(gòu)更加清晰、代碼更加健壯,提高了模塊化程度,各模塊職責(zé)明確,高效率的處理相應(yīng)事件。
5 聊天系統(tǒng)實(shí)現(xiàn)
5.1 服務(wù)器端
參考圖1 藍(lán)牙聊天系統(tǒng)服務(wù)器架構(gòu):
① 在 BTServer 里,有兩個(gè)ListView,分別用來(lái)顯示從不同客戶端接收到的文本消息,兩個(gè)輸入框,用來(lái)輸入文本消息發(fā)給客戶端。這是程序的界面構(gòu)成。
② 啟動(dòng)程序后,到StartDiscoverableModeActivity 界面,提示用戶設(shè)置本設(shè)備"可被查找".
"可被查找"的含義是其他藍(lán)牙設(shè)備在搜索的情況下,能獲得服務(wù)器端的存在及其相關(guān)信息。為了隱私保護(hù)及安全,藍(lán)牙設(shè)備默認(rèn)是關(guān)閉狀態(tài),需要在用戶的同意下才打開(kāi)并設(shè)置為可被查找。
③ 服務(wù)器進(jìn)行初始化操作,包括構(gòu)造OnMessageReceivedListener 用以監(jiān)聽(tīng)消息到來(lái)事件;啟動(dòng)ConnectionService,由它來(lái)處理發(fā)送和接收文本消息。
?、?在 ConnectionService 里,創(chuàng)建ConnectionWaiter 線程,在ConnectionWaiter 線程里創(chuàng)建BluetoothServerSocket 監(jiān)聽(tīng)連接請(qǐng)求。
?、?在有連接請(qǐng)求的時(shí)候,ConnectionService 里的ConnectionWaiter 線程接收請(qǐng)求,創(chuàng)建BluetoothSocket,并把遠(yuǎn)端請(qǐng)求的地址address 和這個(gè)BluetoothSocket 放到HashMap 里,用來(lái)管理socket.接著啟動(dòng)BtStreamWatcher 線程,用來(lái)監(jiān)聽(tīng)這個(gè)socket 里的輸入輸出流,把此線程也放到另外一個(gè)HashMap里。接著創(chuàng)建新的ConnectionWaiter 線程,繼續(xù)監(jiān)聽(tīng)新的連接請(qǐng)求。也就是說(shuō),創(chuàng)建多個(gè)通信線程,并放到HashMap 里進(jìn)行管理,以完成藍(lán)牙的一對(duì)多通信。
?、?BtStreamWatcher 用來(lái)處理輸入輸出流。在BTServer 界面上進(jìn)行輸入的時(shí)候,根據(jù)目的地址(address)的不同,從HashMap 里取出對(duì)應(yīng)的socket,由它來(lái)向此address 發(fā)送消息。接收到文本消息時(shí),回調(diào)OnMessageReceivedListener 來(lái)通知上層,在界面上顯示。
評(píng)論
查看更多