程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#編寫簡單的聊天程序(3)

C#編寫簡單的聊天程序(3)

編輯:關於C語言

然後我們看一下接收消息,此時我們只關心接收消息這一部分。

接收消息(遠程) 主路徑 可選路徑 1.偵聽到客戶端發來的消息,自動顯示在用戶界面上。  

注意到這樣一點:當遠程主機向本地返回消息時,它的用例又變為了上面的用例“發送消息(本地)”。因為它們的角色已經互 換了。

最後看一下注銷,我們這裡研究的是當我們在本地機器點擊“注銷”後,雙方采取的動作:

注銷(本地主動) 主路徑 可選路徑 1.點擊注銷按鈕,斷開與遠程的連接   2.在用戶界面顯示已經注銷   3.更改控件狀態

3.1注銷為灰色,表示已經注銷

3.2連接為亮色,表示可以連接

3.3發送為灰色,表示無法發送

 

與此對應,服務端應該作出反應:

注銷(遠程被動) 主路徑 可選路徑 1.自動顯示遠程用戶已經斷開連接 

注意到一點:當遠程主動注銷時,它采取的動作為上面的“本地主動”,本地采取的動作則為這裡的“遠程被動”。

至此,應用程序的功能分析和用例編寫就告一段落了,通過上面這些表格,之後再繼續編寫程序變得容易了許多。另外還需要記得,用例只 能為你提供一個操作步驟的指導,在實現的過程中,因為技術等方面的原因,可能還會有少量的修改。如果修改量很大,可以重新修改用例; 如果修改量不大,那麼就可以直接編碼。這是一個迭代的過程,也沒有一定的標准,總之是以高效和合適為標准。

2.分析與設計

我們已經很清楚地知道了程序需要做些什麼,盡管現在還不知道該如何去做。我們甚至可以編寫出這個程序所需要的接口,以後編寫代碼的 時候,我們只要去實現這些接口就可以了。這也符合面向接口編程的原則。另外我們注意到,盡管這是一個聊天程序,但是卻可以明確地劃分 為兩部分,一部分發送消息,一部分接收消息。另外注意上面標識為自動的語句,它們暗示這個操作需要通過事件的通知機制來完成。關於委 托和事件,可以參考這兩篇文章:

C#中的委托和事件 - 委托和事件的入門文章,同時捎帶講述了Observer設計模式和.Net的事件模型

C#中的委托和事件(續) - 委托和事件更深入的一些問題,包括異常、超時的處理,以及使用委托來異步調用方法。

2.1消息Message

首先我們可以定義消息,前面我們已經明確了消息包含三個部分:用戶名、時間、內容,所以我們可以定義一個結構來表示這個消息:

public struct Message {
    private readonly string userName;
    private readonly string content;
    private readonly DateTime postDate;

    public Message(string userName, string content) {
        this.userName = userName;
        this.content = content;
        this.postDate = DateTime.Now;
    }

    public Message(string content) : this("System", content) { }

    public string UserName {
        get { return userName; }
    }

    public string Content {
        get { return content; }
    }

    public DateTime PostDate {
        get { return postDate; }
    }

    public override string ToString() {
        return String.Format("{0}[{1}]:\r\n{2}\r\n", userName, postDate, content);
    }
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved