在ESFramework 4.0 快速上手 -- 入門Demo,一個簡單的IM系統(附源碼)一文中,咱們介紹了使用ESFramework的Rapid引擎開發的winform聊天程序,本文咱們將在以前demo的基礎上添加使用ESFramework.SL開發的Silverlight客戶端。這樣一來,不只Silverlight客戶端之間能夠相互通訊,Silverlight客戶端還能夠跟winform客戶端進行通訊。若是不瞭解在Silverlight中如何使用ESFramework,能夠先看看ESFramework 4.0 快速上手 -- 在Silverlight中使用ESFramework。html
Silverlight客戶端一樣實現瞭如下功能並有所加強:api
(1)客戶端用戶上下線時,通知其餘在線用戶。服務器
(2)當客戶端與服務端網絡斷開時,進行自動重連,當網絡恢復後,重連成功。網絡
(3)全部在線用戶(包括Winform客戶端)之間能夠進行文字聊天。工具
(4)消息同步調用。(演示了三種類型的同步調用)post
(5)重登錄模式。當同名的用戶登錄時,會把前面的用戶擠掉。spa
一.服務端code
服務端直接使用ESFramework 4.0 快速上手 -- 入門Demo,一個簡單的IM系統(附源碼)的實現,而且增長了服務器同步調用客戶端的功能 -- 即服務端向某個在線客戶端提交請求並返回客戶端的回覆信息。咱們利用了服務端UI的「工具」菜單裏面「自定義功能」,當點擊這個菜單時,將默認向在線用戶列表中的第一個用戶發送同步調用請求。如圖中第一個在線用戶是aa01,那麼點擊「自定義功能」後,就由aa01來處理服務端的同步調用。orm
服務端同步調用客戶端由ICustomizeInfoController.QueryClient()方法來實現。 htm
二.客戶端
1.客戶端的MainPage類實現了ESFramework.SL.Application.Basic.IBasicBusinessHandler接口,以接收其餘用戶的上下線通知、被擠掉線通知、心跳超時通知等。
2.客戶端的MainPage類還實現了ESFramework.SL.Application.CustomizeInfo.ICustomizeInfoBusinessHandler接口,以處理來自其它用戶的聊天消息、來自服務端的同步調用、以及來自其它客戶端的P2P同步調用等。
3.客戶端的MainPage類還預約並處理了ESFramework.SL.Rapid.IRapidPassiveEngine的TcpPassiveEngine屬性的與鏈接狀態變化相關的事件,如鏈接斷開、重連開始、重連成功/失敗。
客戶端啓動登錄後,顯示的主界面MainPage以下:
當有其餘用戶登錄時,會在「在線用戶列表」中顯示出來,點擊選擇用戶ID,就能夠與該用戶聊天。UI右邊上面是與所選擇的用戶的聊天曆史記錄,下面是發送消息的文本框。 從在線用戶列表選擇要對話的好友,而後在聊天輸入框輸入文本,最後點擊「發送」按鈕便可。程序經過ESFramework.SL.Application.CustomizeInfo.ICustomizeInfoOutter的Send方法發送消息給好友。
好友掉線時,好友的名稱會從好友列表中消失,若是正在與該好友聊天,則右邊的歷史記錄會清空,「發送」按鈕也再也不可用。
若是咱們在另外一個地方再登錄一個aa01(演示重登錄),程序會先回調ESFramework.SL.Application.Basic.IBasicBusinessHandler的OnBeingPushedOut(),而後再觸發TcpPassiveEngine的ConnectionInterrupted事件,通知當前的用戶。
3、同步調用
這個demo裏面演示了三種類型的同步調用:客戶端與客戶端之間的同步調用,客戶端同步調用服務端,服務端同步調用客戶端。
1.客戶端同步調用服務端:這個在前一個Demo中演示過,在Sliverlight客戶端中徹底使用同樣的模式。
2. 服務端同步調用客戶端:這個在第一部分已經介紹,而客戶端是經過實現ICustomizeInfoBusinessHandler接口的HandleQueryFromServer方法來處理來自服務端的同步調用的:
3. 客戶端同步調用客戶端:調用是由ICustomizeInfoOutter接口的CommitP2PRequest方法來發出的,
目標客戶端收到來自其餘用戶的同步調用請求後,會由ICustomizeInfoBusinessHandler接口的HandleP2PRequest方法來處理這個請求:
四. 兩種類型的客戶端公用同一服務端
基於ESFramework Rapid引擎開發的winform客戶端和silverlight客戶端能夠公用同一個服務端,甚至之後,ESFramework還可能支持基於C++/Flash/Java的客戶端。下圖是本文的Demo啓動後,silverlight客戶端和winform客戶端用戶以前的通訊截圖。
五.Demo源碼下載
下載本文的Demo源碼。注意,在運行基於Silverlight的客戶端程序時,服務器上首先應該起到「Silverlight策略服務器」,能夠從ESFramework 4.0 概述文末下載策略服務器。