2011-11-06 110 views
0

我對C++相當陌生,特別是面向對象的類設計。 我想設計一個支持以下的路由器類:C++和設計OO類

我在下面要求指導的主要領域是如何設計類(es)和路由器類方法,剝離主機和偵聽器線程以便於建立主持人與客戶之間的聯繫。主機類和客戶機類將擁有自己的寫入方法。

目前我有一個主機類,客戶端類和客戶端監聽器類。 主機將在其自己的線程上運行並具有唯一的套接字。 客戶端偵聽器將在其自己的線程上運行,並在客戶端連接時啓動客戶端類的每個實例並使用其自己的套接字。客戶端偵聽器線程只會在主機線程連接後啓動。

從主機接收到的任何消息將: 1)路由到所有客戶端 2)根據消息中的關鍵信息路由到特定的客戶端。套接字表的一個鍵將被保留。

從客戶端收到的任何消息將無條件路由(寫入)主機套接字。第二階段將通過相應的方案實現對多個主機的支持,從而處理哪個主機要路由到哪個主機。另外,我正在使用boost :: asio進行通信。

任何幫助,將不勝感激。如果這對你們中的一些人來說似乎太低級了,請致電 。 謝謝

回答

1

看起來你可以使用類似於HostToClientMapper這樣的類,它可以維護地圖以獲取主機的所有客戶端,反之亦然。此課程可以是Router的成員。然後,路由器將擁有完成映射所需的全部功能。

+0

好的,但我不清楚如何做的事情是如何獲得訪問在分離線程中創建的套接字信息。主機套接字和由客戶端偵聽器線程建立的任何客戶端連接。換句話說,如果我在一個啓動一個線程的類中有一個成員,我該如何返回這個指針給這個類? –

+0

爲了澄清,您是否正在尋找一種方法將客戶端線程的數據發送迴路由器?如果是這樣,一個簡單的方法是將一個指向Router實例的指針傳遞給你創建的Client對象,例如客戶端c =新客戶端(本)。然後在路由器中你可以有一個方法來設置套接字,例如Router:setSocket(Client c,Socket s)。確保使用互斥鎖來同步對路由器數據結構的訪問,以防止客戶端線程的併發修改。 – Macondo2Seattle

+0

客戶端線程將數據發送到主機線程(套接字),反之亦然。 –