2017-08-15 85 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