2017-08-15 77 views
0

我目前正在編寫一個C#程序,並且正在努力解決一個概念性問題。C#UDP通信協議棧實現通知

應用程序的一個領域是通過UDP與微控制器進行通信。因此,我正在使用UDPClient並編寫了一個「通信器」,它執行一些編碼/解碼,校驗和檢查等。

我需要某種控制器,它允許我將命令發送到UDP-服務器)。其中一些是一對發送/接收,其他則是長時間運行。

我想到了以下實行: enter image description here

我的想法是,我的微控制器/ UDP-服務器的每一個能力的一類,它有一個「Execute'功能,其簽約的」接收抽象'的底層Communicator併發送請求。我可以在每個任務(能力)的'Execute'函數中等待我在OnReceive-Handler(或超時)中觸發的事件。但是如果我需要一個任務需要多個發送/接收,那就行不通了。

那麼,有沒有什麼好的設計模式呢?還是有人有一個好的建議,如何以適當的方式實施它?

回答

1

你可以有一個Communicator和一個CommandExecuter並在它們之間共享一個隊列。 Communicator將它從UDP收到的每個命令放回到它有責任接收新命令。 CommandExecuter總是在觀看隊列。只要隊列中有新的命令,就可以執行它並執行它。

+0

在某些命令上,我得到一個答案,例如'下載'我得到一個字節數組。我認爲在你的方法中,調用類(Controller)永遠不會得到答案 – kain

+0

是的,它可以得到答案。 'CommandExecuter'可以執行該命令並將答案返回給'Communicator'並且'Communicator'將答案傳遞給'Controller'。在這種情況下,最好每個命令都有一個「ID」,這樣當Controller收到一個答案時,它可以找到它的命令或請求。 – Beginner

+0

但是,這將如何?控制器將創建一個命令對象並將其放入共享隊列中。之後,它恢復到正常操作。控制流程如何? 或者它會是一個正確的方式來實現每個命令作爲一個任務,並同步在這個任務內運行? – kain