【轉】可在廣域網部署運行的QQ高仿版 -- GG嘰嘰V3.2,增長離線消息、離線文件功能(源碼)

(幾句題外話:雖然就如何將GG發展爲一個有商業價值的產品,我尚未很清晰明確的思路,可是從GG發佈以來,經過GG認識了一些朋友,也接了一些小單子,賺了一點小錢。有了一點甜頭,目前和二、3個好朋友一塊兒作作小項目也是不錯的,這何嘗不是一條養家餬口之路了?呵呵)html

  距離上次更新(GG嘰嘰V3.0,完善基礎功能)正好有1個月了,在這個月中,我主要爲GG增長了離線消息和離線文件的功能。之因此將這兩個功能提早實現,是由於至GG發佈以來,就有不少朋友問我在GG的基礎上如何實現離線消息和離線文件。看來做爲一個能用的IM軟件,離線消息和離線文件是必備的基礎功能了。數據庫

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

(1)離線消息。api

(2)離線文件。服務器

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

      廢話很少說,仍是先上圖。url

  離線消息:spa

      

  發送離線文件:orm

      

  離線文件發送完成、接收完成:htm

  

 

二.實現思路

  雖然提供了源代碼,可是,我仍是想將主要的思路列一下,這樣,你們理解起源碼來,會節省更多的時間。blog

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 V3.2 源碼

注:GG使用VS2010編譯生成的GG.exe文件,這個文件常常被新毒霸誤報爲病毒,因此,此次發佈的壓縮包中我把客戶端生成的GG.exe刪除了,你們能夠本身編譯生成它。

 

關於GG的最新全貌介紹,我單獨寫了一篇文章,做爲彙總,可參見 可在廣域網部署運行的QQ高仿版 -- GG2013概要。 

歡迎和我探討關於GG2013的一切,個人QQ:2027224508,多多交流!  

你們有什麼問題和建議,能夠留言,也能夠發送email到我郵箱:ggim2013@163.com。 

若是你以爲還不錯,請粉我,順便再頂一下啊,呵呵  

相關文章
相關標籤/搜索