天天看點

可在廣域網部署運作的QQ高仿版 -- GG叽叽V3.2,增加離線消息、離線檔案功能(源碼)

離線消息和離線檔案是IM類軟體的必備基礎功能,GG在這一版本中完整地實作了這兩個功能。

  (幾句題外話:雖然就如何将GG發展為一個有商業價值的産品,我還沒有很清晰明确的思路,但是從GG釋出以來,通過GG認識了一些朋友,也接了一些小單子,賺了一點小錢。有了一點甜頭,目前和2、3個好朋友一起做做小項目也是不錯的,這未嘗不是一條養家糊口之路了?呵呵)

  距離上次更新(GG叽叽V3.0,完善基礎功能)正好有1個月了,在這個月中,我主要為GG增加了離線消息和離線檔案的功能。之是以将這兩個功能提前實作,是因為至GG釋出以來,就有很多朋友問我在GG的基礎上如何實作離線消息和離線檔案。看來作為一個能用的IM軟體,離線消息和離線檔案是必備的基礎功能了。

一.GG V3.2 新增功能展現 

(1)離線消息。

(2)離線檔案。

(3)以前功能的幾個bug修改。

      廢話不多說,還是先上圖。

  離線消息:

可在廣域網部署運作的QQ高仿版 -- GG叽叽V3.2,增加離線消息、離線檔案功能(源碼)

  發送離線檔案:

可在廣域網部署運作的QQ高仿版 -- GG叽叽V3.2,增加離線消息、離線檔案功能(源碼)

  離線檔案發送完成、接收完成:

  

可在廣域網部署運作的QQ高仿版 -- GG叽叽V3.2,增加離線消息、離線檔案功能(源碼)

二.實作思路

  雖然提供了源代碼,但是,我還是想将主要的思路列一下,這樣,大家了解起源碼來,會節省更多的時間。

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到我郵箱:[email protected]。 

如果你覺得還不錯,請粉我,順便再頂一下啊,呵呵