(幾句題外話:雖然就如何將GG發展為一個有商業價值的產品,我還沒有很清晰明確的思路,但是從GG釋出以來,通過GG認識了一些朋友,也接了一些小單子,賺了一點小錢。有了一點甜頭,目前和2、3個好朋友一起做做小專案也是不錯的,這未嘗不是一條養家餬口之路了?呵呵)
距離上次更新(GG嘰嘰V3.0,完善基礎功能)正好有1個月了,在這個月中,我主要為GG增加了離線訊息和離線檔案的功能。之所以將這兩個功能提前實現,是因為至GG釋出以來,就有很多朋友問我在GG的基礎上如何實現離線訊息和離線檔案。看來作為一個能用的IM軟體,離線訊息和離線檔案是必備的基礎功能了。
一.GG V3.2 新增功能展現
(1)離線訊息。
(2)離線檔案。
(3)以前功能的幾個bug修改。
廢話不多說,還是先上圖。
離線訊息:
傳送離線檔案:
離線檔案傳送完成、接收完成:
二.實現思路
雖然提供了原始碼,但是,我還是想將主要的思路列一下,這樣,大家理解起原始碼來,會節省更多的時間。
1. GG V3.2仍然使用的是在記憶體虛擬的資料庫VirtualDB類,並且在其中增加了兩個表:offlineMessageTable、offlineFileTable,分別用於儲存離線訊息和離線檔案條目資訊。
如果使用真實的資料庫,移植也是很簡單的,只需要將VirtualDB的所有方法重寫,並與真實的資料庫互動即可。
2. 在服務端增加了OfflineMessageController類,用於管理離線訊息。
3. 在服務端增加了OfflineFileController類,用於管理離線檔案。注意:GG將要中轉的離線檔案是儲存在服務端執行目錄下的OfflineFiles資料夾下(可在OfflineFileController原始碼中修改這個路徑)。
4. 需特別提醒是,網盤功能和離線檔案功能的實現都用到了一個非常重要的欄位,TransferingProject的Comment屬性:
(1)TransferingProject的Comment屬性對應著方法BeginSendFile(用於請求傳送檔案)的comment引數。
(2)在網盤的功能中,comment用於表示上傳或下載時儲存的路徑,GGLib專案中的Comment4NDisk靜態類用於支援這一點。
(3)在離線檔案功能中,comment用於表示傳送者或接收者的UserID,GG.Core專案中的Comment4OfflineFile靜態類用於支援這一點。
5.離線訊息基本邏輯要點:通過預定IRapidServerEngine的CustomizeController屬性的TransmitFailed事件,來取得所有轉發失敗的訊息,並只關注其中的聊天訊息。
6.離線檔案基本邏輯要點:
(1)當客戶端登入成功並完成初始化後,會向伺服器傳送兩個請求訊息(位於MainForm的MainForm_Load方法):InformationTypes.GetOfflineMessage、InformationTypes.GetOfflineFile。
(2)服務端接收到上述兩個請求後,會呼叫OfflineMessageController和OfflineFileController來分分別處理。(位於CustomizeHandler類的HandleInformation方法)
(3)無論客戶端(作為接收者)是接收完了離線檔案、還是拒絕了離線檔案,服務端都會傳送一個InformationTypes.OfflineFileResultNotify訊息通知離線檔案的傳送方。
三.GG V3.2 原始碼下載
下載最新版本,請轉到這裡。
注:GG使用VS2010編譯生成的GG.exe檔案,這個檔案經常被新毒霸誤報為病毒,所以,這次釋出的壓縮包中我把客戶端生成的GG.exe刪除了,大家可以自己編譯生成它。
關於GG的最新全貌介紹,我單獨寫了一篇文章,作為彙總,可參見 可在廣域網部署執行的QQ高仿版 -- GG2013概要。
歡迎和我探討關於GG2013的一切,我的QQ:2027224508,多多交流!
大家有什麼問題和建議,可以留言,也可以傳送email到我郵箱:ggim2013@163.com。
如果你覺得還不錯,請粉我,順便再頂一下啊,呵呵