可在廣域網部署執行的QQ高仿版 -- GG嘰嘰V2.0,增加網盤和遠端磁碟功能(原始碼)

C#開源即時通訊GGTalk發表於2013-09-23

盡力2~3周釋出一個版本,我這次也沒有失言。這段時間內,我仿照QQ的微雲功能,在GG中增加了網盤的功能,而且,我還自創了一個QQ沒有的新的功能:遠端磁碟。正如遠端桌面一樣,遠端磁碟允許我們像訪問本地磁碟一樣來訪問線上的其它使用者的磁碟。

一.GG V2.0 新增功能展現

(1)網盤:在服務端為每個使用者分配一個網盤,使用者通過客戶端可以訪問自己的網盤。就像QQ的微雲一樣。

(2)遠端磁碟:任何一個線上使用者,都可以訪問其它線上使用者的磁碟(先要經過對方的同意)。

(3)無論是網盤、還是遠端磁碟,都支援:上傳/下載/刪除/複製/剪下/貼上 檔案、新建資料夾、重新命名。

(4)在GG的實現中,網盤和遠端磁碟公用的是同一個元件NDiskBrowser。

    廢話不多說,還是先上圖。新功能入口按鈕:

     

  上圖中有三處標記:1.按鈕可進入 我的網盤;2.按鈕可進入 好友的遠端磁碟;3.顯示和好友之間的P2P通道的狀態

  下圖是網盤截圖:

     

     

    磁碟訪問請求截圖:

     

    進入遠端磁碟(就像開啟自己本地硬碟一樣):

     

    遠端磁碟操作:

     

 

二.實現思路

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

1. 該版本增加了一個新的專案GGLib。

  我打算將GGLib作為一個可複用的類庫,這樣它就可以在GG以外其它的專案中使用。目前,GGLib已經包含了修改後的檔案傳輸顯示控制元件FileTransferingViewer以及網盤元件。

2. 網盤元件:位於GGLib專案的NDisk資料夾下,雖然網盤元件的底層仍然基於ESFramework提供的檔案傳輸功能,但是,其實現還是比較複雜的。

(1)通過網盤元件,既可以訪問網盤,也可以訪問另一個線上使用者的磁碟。

(2)目前版本的GG服務端提供的是一個簡單的網盤功能,其在執行目錄下的NetworkDisk資料夾下,為需要的使用者新建一個資料夾(以UserID命名)作為使用者的網盤。

(3)如果需要,我們可以重新實現GGLib.NDisk.Server.INDiskPathManager介面,比如,我們可以使用分散式檔案系統,作為網盤的後端儲存。

(4)普通檔案傳送和網盤檔案傳送,都使用了ESFramework的檔案傳送功能,在程式中,我是通過TransferingProject的Comment屬性來區分二者的(普通檔案的Comment為null,網盤則不為null)。

(5)普通檔案和網盤檔案,也都使用了FileTransferingViewer來顯示檔案傳送進度,我改寫了原始的FileTransferingViewer,為其Initialize增加了一個filter引數,使其可以過濾掉無關的檔案傳送事件。

(6)進入遠端磁碟時,預設進入的是“我的電腦”的內容 -- 列出所有分割槽、包括光碟、U盤等,我們可以通過修改程式來改變這一行為,比如,磁碟的主人可以控制自己只允許來訪者訪問哪一個分割槽或目錄。

(7)基於(6),換個方向,我們就可以實現磁碟共享或目錄共享的功能。

3. 資料庫:有很多朋友問資料庫怎麼弄,實際上GG的目前版本還沒有用到資料庫(後續高階版本會增加),所有的資訊都只是在記憶體中,所以,目前版本的GG做了一些假設:

(1)使用者登入帳號隨意,但必須為數字組;密碼可隨意輸入。

(2)所有的線上使用者都是好友。

4. 語音視訊:也有很多朋友問語音視訊裝置的工作怎麼不正常,這個可以直接參考OMCS官方文件:攝像頭、麥克風、揚聲器裝置測試

5. GG使用了最新版本的SkinForm,如果有關於SkinForm的問題,可以直接聯絡我的好友 威廉喬克斯_汀

 

三.新的想法

有了遠端磁碟點子之後,我又產生了一個新的點子,這個新點子的孕育過程是這樣的:

我經常晚上在家加班,所以,下班的時候,我就用U盤把專案文件拷回去,在家裡的電腦上工作,完畢後,再把更新的文件拷回U盤,第二天再帶到公司覆蓋公司電腦上舊的文件。相信有些朋友也有類似的經歷,用U盤拷來拷去很麻煩。當然,如果不是保密性的要求,我們也可以使用網盤。無論是U盤還是網盤,都需要經過“中間站”轉一道,不夠直接。

如果下面的情形能夠實現該多好:下班的時候,我在公司的電腦上能夠直接訪問家裡電腦的磁碟,把需要的文件傳送到指定的目錄,晚上回去就可以繼續工作,完畢後,在家裡的電腦上又可以直接訪問公司電腦的磁碟,把更新後的文件再傳送回去。這樣就夠直接了,也不需要U盤了。

我想在GG中增加這樣的功能,那麼,該如何實現了?我的初步方案如下:增加一個新的專案叫GG受控端,受控端不需要主介面,只要一個托盤,表示其在執行。在家裡的電腦上,我用帳號514330登入GG受控端,到公司後,用514330正常登入GG,在GG的主介面上,就可以列出所有線上的受控端,點選其中一個,就可以訪問其磁碟,這就是已有的GG的遠端磁碟的功能了。當前,前提是受控端電腦必需是開啟的並且是聯網的。

關於這個功能,大家有什麼好的想法,可以留言告訴我。

 

四.原始碼下載

  

下載最新版本,請轉到這裡。 

 注意:如果要將GG部署到廣域網,則可以在服務端的配置檔案中設定監聽的埠;而在客戶端的配置檔案中,則可以指定伺服器的IP和Port。

 

特別說明:為了減少壓縮包的大小(部落格園最大上傳檔案只能為10M,這個限制有點過了),我把debug目錄清空了,大家重新編譯生產後,請將Dlls資料夾下的三個dll(VideoEngine.dll,VideoEngineCore.dll,AudioEngineCore.dll)拷貝到執行那個目錄下,才可正常啟動程式的。 

 

GG最新進展總覽連結:可在廣域網部署執行的QQ高仿版 -- GG2013總覽

我會繼續努力爭取2~3個星期釋出一個新版本,使GG慢慢成熟起來。

大家有什麼問題和建議,可以留言,也可以傳送email到我郵箱:ggim2013@163.com。 

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

 

相關文章