(幾句題外話:雖然就如何將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。
如果你覺得還不錯,請粉我,順便再頂一下啊,呵呵