2011-11-06 106 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

客户端线程将数据发送到主机线程(套接字),反之亦然。 –