天天看點

一個簡單的IM系統(Demo附源碼)-- ESFramework 4.0 快速上手(08)一.步驟說明二.服務端說明三.用戶端四.源碼下載下傳

      本文将介紹使用ESFramework的Rapid引擎開發的兩個最簡單的Demo,ESFramework.Demos.Simplest 和 ESFramework.Demos.Silverlight。這兩個Demo是一個簡單的聊天系統,并示範了以下功能:

(1)用戶端使用者上下線時,通知其他線上使用者。

(2)當用戶端與服務端網絡斷開時,進行自動重連,當網絡恢複後,重連成功。

(3)所有線上使用者之間可以進行文字聊天。

(6)在控制台程式中啟動服務端引擎。 

2.确定是否需要分組。在本demo中,我們不需要廣播消息,不需要進行分組,可以完全忽略組機制的存在。

3.定義資訊類型與資訊協定。

    在本demo中,我們隻需要定義兩個資訊類型,一個類型表示聊天消息,一個類型表示用戶端同步調用服務端。其定義如下:

      由于InformationTypes的定義以及接下來定義的資訊協定類在用戶端和服務端都需要用到,是以,我們将其放在一個單獨的項目ESFramework.Demos.Core中,用戶端和服務端都可以引用它。

      資訊類型定義好後,我們接下來定義資訊協定。

      對于聊天消息,由于消息中除了文字之外,還可能包含表情,是以我們專門定義了一個協定類:TextChatContract。

      對于同步調用,我們的demo假設請求資訊是一個字元串,回複資訊也是字元串,直接使用UTF-8編碼就可以了,不需要專門的協定類。或者說,string就是我們用到的協定類。

4.實作自定義資訊處理器

      用戶端的MainForm實作了ICustomizeHandler接口,其主要實作HandleInformation方法,來處理收到的聊天資訊(資訊類型為InformationTypes.Chat)。

      服務端的CustomizeHandler實作了服務端的ICustomizeHandler接口,其主要實作HandleQuery方法來處理來自用戶端的同步調用(資訊類型為InformationTypes.ClientCallServer)。

5.服務端的BasicHandler類實作IBasicHandler接口,以驗證登入使用者的賬号密碼。本demo中,假設所有的驗證都通過,是以驗證方法直接傳回true。

7.在服務端和用戶端各自的Program類的Main方法中,初始化Rapid引擎。 

      上面我們介紹了這個demo需要的主要元件,我們接下來看看用戶端和服務端所需的額外基礎設施。

     如果擷取了ESFramework的正式授權,那麼應該在初始化服務端引擎之前,設定正确的授權使用者帳号和密碼。 demo中使用的是免費帳戶“FreeUser”。  

       服務端直接使用了ESPlus提供的預設的主窗體MainServerForm,來顯示線上使用者狀态資訊。

      服務端運作起來後,界面如下所示:     

一個簡單的IM系統(Demo附源碼)-- ESFramework 4.0 快速上手(08)一.步驟說明二.服務端說明三.用戶端四.源碼下載下傳

(1)最下面的狀态欄,顯示了線程池中剩餘的線程數,初始設定的背景線程池和IOCP線程都是100個。最右邊的“線上人數”還顯示了已成功建立的連接配接數-使用者數。

(2)當有使用者登陸時,線上使用者清單中會實時顯示每個使用者的狀态。

      文末我們會給出MainServerForm的源碼,有需要的朋友可以在上面進行修改增加功能以滿足自己應用的需要。 

      解決方案中的ESFramework.Demos.ServerConsole項目是一個控制台項目,用于示範如何在控制台程式中啟動服務端引擎。

      對于更多的系統,可能是要求在Windows服務中Host服務端引擎,其實也是類似的做法。這裡就不再贅述了。

     用戶端啟動登陸後,顯示的主界面MainForm如下:    

一個簡單的IM系統(Demo附源碼)-- ESFramework 4.0 快速上手(08)一.步驟說明二.服務端說明三.用戶端四.源碼下載下傳

    當有其他使用者登陸時,會在“線上使用者清單”中顯示出來,輕按兩下頭像,會彈出聊天視窗,就可以對話了。   

一個簡單的IM系統(Demo附源碼)-- ESFramework 4.0 快速上手(08)一.步驟說明二.服務端說明三.用戶端四.源碼下載下傳

     當該視窗會灰掉不可用時,表示好友已經掉線。

   如果我們再登陸一個aa01(示範重登陸),則原來aa01的主界面狀态欄會顯示如下:    

一個簡單的IM系統(Demo附源碼)-- ESFramework 4.0 快速上手(08)一.步驟說明二.服務端說明三.用戶端四.源碼下載下傳

      如果Client與伺服器不在一台機器上,你還可以通過斷開網絡在恢複網絡以觀察自動重連的效果,主界面的狀态欄也有相應的文字提示。或者更簡單地,直接退出服務端,這會斷開所有的用戶端連接配接,也類似于斷線的效果;再重新開機服務端,用戶端就會重連上來了。

      最後,點選“測試請求123”後面的按鈕,可以測試消息同步調用,消息同步調用是通過用戶端的ICustomizeOutter接口的Query方法來發出的,同步調用請求将被前述的服務端的HandleQuery方法處理的。

      要提醒的是,本示例僅僅是一個demo,是為了展示如何使用ESFramework提供的功能而存在,為了簡潔,省略了很多工作,比如,将Rapid引擎執行個體作為Program的靜态成員,又如上面的MainForm實作了多個接口,使得MainForm類變得比較巨大。大家在正式的項目中,應該根據項目實際情況做正确的結構設計,不要效仿本例。