日韩欧美人妻无码精品白浆,www.大香蕉久久网,狠狠的日狠狠的操,日本好好热在线观看

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

即時通信系統(tǒng)中如何實現(xiàn):全局系統(tǒng)通知,并與Web后臺集成?

admin
2017年2月7日 18:43 本文熱度 6822

  像QQ這樣的即時通信軟件,時不時就會從桌面的右下角彈出一個小窗口,或是顯示一個廣告、或是一個新聞、或是一個公告等。在這里,我們將其統(tǒng)稱為“全局系統(tǒng)通知”。很多使用GGTalk的朋友都建議我加上一個類似的功能,今天,GGTalk 5.1終于實現(xiàn)了這一功能,并且可以通過Web后臺發(fā)送全局系統(tǒng)通知。下面,我們將一步步講述這一功能是如何實現(xiàn)的(通過類似同樣的步驟,大家可以為GGTalk添加任意的自己需要的功能)。

1.定義消息類型和協(xié)議類

  我們將全局系統(tǒng)通知分為兩類:

(1)第一種通知,是發(fā)給所有用戶的。

(2)第二種通知,是發(fā)給指定群組(Group)中的用戶的。

  基于此,我們需要定義兩種消息類型,于是,我們在GGTalk.Core項目中的InformationTypes 類下增加兩個常量:

復(fù)制代碼
        /// 
        /// 發(fā)送給所有用戶的系統(tǒng)消息
        /// 
        public const int SystemNotify4AllOnline = 80;

        /// 
        /// 發(fā)送給某個組的系統(tǒng)消息
        /// 
        public const int SystemNotify4Group = 81;      
復(fù)制代碼

  為了簡便,我們讓兩個類型的消息公用同一個協(xié)議類,在GGTalk.Core項目中增加SystemNotifyContract類:

復(fù)制代碼
    /// 
    /// 系統(tǒng)通知的協(xié)議類。
    /// 
    public class SystemNotifyContract
    {
     public SystemNotifyContract(string title, string content, string senderID ,string groupID) { this.Title = title; this.Content = content; this.SenderID = senderID; this.GroupID = groupID; } public string Title { get; set; } public string Content { get; set; } public string SenderID { get; set; } public string GroupID { get; set; } }
復(fù)制代碼

2.客戶端發(fā)送系統(tǒng)通知

(1)我們需要定義用于輸入系統(tǒng)通知的標(biāo)題和內(nèi)容的窗體,具體可參見GGTalk項目下的SystemNotifySendForm,當(dāng)點(diǎn)擊窗體上的“發(fā)送”按鈕時:

復(fù)制代碼
    private void btnSend_Click(object sender, EventArgs e)
    {
        try
        {
            SystemNotifyContract contract = new SystemNotifyContract(this.skinTextBox_id.Text, this.richTextBox1.Text, this.rapidPassiveEngine.CurrentUserID, this.skinTextBox_groupID.Text);
            byte[] data = CompactPropertySerializer.Default.Serialize(contract);
            int infoType = this.skinRadioButton_group.Checked ? InformationTypes.SystemNotify4Group : InformationTypes.SystemNotify4AllOnline;
            this.rapidPassiveEngine.CustomizeOutter.Send(infoType, data);
            MessageBox.Show("發(fā)送成功!");
            this.Close();
        }
        catch (Exception ee)
        {
            MessageBox.Show("發(fā)送失??!" + ee.Message);
        }
    }
復(fù)制代碼

  首先,需要構(gòu)造協(xié)議類實例,然后使用緊湊的序列化器將其序列化,然后通過用戶的選擇確定是全局系統(tǒng)通知、還是組通知,最后使用通信引擎將消息其發(fā)送給服務(wù)端。

(2)SystemNotifySendForm實現(xiàn)完成后,我們需要在GGTalk客戶端住窗體的底部的功能菜單上添加一個“發(fā)送系統(tǒng)通知”的按鈕,當(dāng)點(diǎn)擊該按鈕時,就new一個SystemNotifySendForm,并顯示出來給用戶輸入。

(3)如果需要,可以為該功能加上適當(dāng)?shù)臋?quán)限控制,比如,只有管理員帳號登錄GGTalk后,才會看到“發(fā)送系統(tǒng)通知”的按鈕。

3.服務(wù)端處理

  當(dāng)服務(wù)端收到來自客戶端的全局系統(tǒng)通知消息時,需要將其廣播出去:

(1)如果是全局系統(tǒng)通知(SystemNotify4AllOnline ),則將其發(fā)送給所有在線的用戶。

(2)如果是群組系統(tǒng)通知(SystemNotify4Group),則將其發(fā)送給該組的所有成員。

  下面是處理SystemNotify4Group類型消息的代碼(在GGTalk.Server項目的CustomizeHandler類中):

復(fù)制代碼
    if (informationType == InformationTypes.SystemNotify4Group)
    {
        SystemNotifyContract contract = CompactPropertySerializer.Default.Deserialize(info, 0);
        GGGroup group = this.globalCache.GetGroup(contract.GroupID);
        if (group != null)
        {
            foreach (string userID in group.MemberList)
            {
                this.rapidServerEngine.CustomizeController.Send(userID, InformationTypes.SystemNotify4Group, info);
            }
        }        
    }
復(fù)制代碼

  首先,需要反序列化得到SystemNotifyContract實例,然后拿到該實例中的GroupID的值,然后根據(jù)GroupID從緩存獲取該組的所有成員列表,最后,將系統(tǒng)通知轉(zhuǎn)發(fā)給所有這些成員。

4.客戶端顯示系統(tǒng)通知

  當(dāng)任何一個在線的GGTalk客戶端收到系統(tǒng)通知消息時,就會像QQ一樣在屏幕的右下角彈出一個小窗口,來顯示系統(tǒng)通知的具體內(nèi)容。

(1)我們在GGTalk項目中增加一個SystemNotifyForm,用于顯示系統(tǒng)通知的信息。

(2)在客戶端的信息處理器中(在 MainFormPartial.cs 文件中),增加對SystemNotify4AllOnline 和 SystemNotify4Group消息的處理:

復(fù)制代碼
    if (informationType == InformationTypes.SystemNotify4Group)
    {
        SystemNotifyContract contract = CompactPropertySerializer.Default.Deserialize(info, 0);
        SystemNotifyForm form = new SystemNotifyForm(contract.Title, contract.Content);
        form.Show();
        return;
    }
復(fù)制代碼

  首先,將byte[]信息反序列化得到SystemNotifyContract,然后將其Title和Content交給SystemNotifyForm去顯示出來。

5.與Web后臺集成

  很多時候,我們的管理員可能都是通過Web后臺來進(jìn)行系統(tǒng)管理,并發(fā)送系統(tǒng)通知的,這樣,我們的GGTalk就需要與Web后臺集成到一起。通常,GGTalk與Web的集成是這樣做的:

    

(1)GGTalk的服務(wù)端GGTalk.Server發(fā)布一個Remoting服務(wù)。

(2)Web通過調(diào)用GGTalk.Server的Remoting接口來完成與GGTalk的交互。

  我們在GGTalk.Core項目中的IRemotingService接口中增加一個方法,用于發(fā)送系統(tǒng)通知:

    /// 
    /// 發(fā)送系統(tǒng)通知給所有在線用戶。
    ///       
    void SendSystemNotify(string title, string content);

  并且,在GGTalk.Server項目的RemotingService類中,實現(xiàn)這個方法即可。 

6.源碼下載

       GGTalk即時通信系統(tǒng)是可在廣域網(wǎng)部署運(yùn)行的QQ高仿版,2013.8.7發(fā)布V1.0版本,至今最新是5.1版本,關(guān)于GG更詳細(xì)的介紹以及最新源碼下載,請移步 可在廣域網(wǎng)部署運(yùn)行的QQ高仿版 -- GGTalk總覽。    


該文章在 2017/2/7 18:43:08 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場、車隊、財務(wù)費(fèi)用、相關(guān)報表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

熟女十区| 日本比的嫩比| 日韩国产欧美日韩精品| www大香蕉大香蕉大香蕉| 一区 二区 亚洲 图片| 免费在线观看艹逼视频网站| 日本一区二区伦理免费看| 夜夜嗨av一区二区三区电影| 成年人久久三级片| 99偷拍| 日本剧情久久| BBBAAA精品| 自拍偷拍中文字幕乱| 深爱五月缴情网| 日本一区二区zxsp| ASE69,com男人天堂| 亚洲热图欧美热图在线视频 | 欧美美女的大泬| 中文二区JUY| 亚洲欧洲日本在线| 欧美成人一级网址| 欧美日韩狼人综合在线| 一区二区三四区五六| 性刺激在线| 国产精品18久久久久久白浆动漫| 激情精品综合1234区| 无码视频在线大全| 你懂得黄欧美| 欧美人妻中文字母| 日韩久久久无码精品亚洲| aⅴ一区二区| 欧美情色一区=区| 偷怕自拍av| 国产av一区二区日日夜夜| 91N.com在线视频一区二区| 国产理论片视频| 欧洲无码精品在线观看| 麻豆av手机播放| 区三区四区韩国免费视频播放| 深爱激情网国产五月天| se94se亚洲一区二区|