带有Qt的消息队列C ++用于网络传输

时间:2014-07-30 08:29:54

标签: c++ qt

我正在为网络邮件写一个新的邮件队列,服务器会发送这些邮件进行文件复制。

从套接字读取一定数量的字节后,我会发出一个用于解释标题的信号,如果它不能被解释,则会再次发出信号,直到知道类型为止。

解释标题后,我必须发出对相应工作者(类)的调用以解码其余的消息。

我的问题是,使用设计模式是否更好,如果是最好的方法,或者我应该使用开关的旧方法?

我使用的是Qt 4.8.5,它应该适用于所有系统(Win / Mac / Linux)。

2 个答案:

答案 0 :(得分:0)

如果您事先知道所有标头类型,那么您可以使用QHash存储所有邮件解析器,映射到邮件标头类型。

因此,您需要一个枚举来定义所有消息头类型和所有消息解析器的基类。 你最终会得到:

QHash<MessageType, AbstractMessageParser*> mappings;

然后,您可以使用单行检索与特定标头类型对应的解析器。 当然,所有解析器都需要在实际解析之前在散列中注册。我会在程序的初始化阶段完成它。

所以,没有特定的模式。我想你可以使用工厂模式,但你仍然会得到一个大屁股开关。

您可以将其视为Factory pattern的变体或Service Locator模式的变体。

答案 1 :(得分:0)

关于使用设计模式或switch case处理工作线程中的操作,我会建议command pattern,因此您在命令类中组合所需的信息,然后从工作线程调用该类。切换案例的问题可能是一个巨大的功能,并且每个消息都会分开enum / struct / code。