我有一个类应该以数据包的形式发送/接收数据。此类包含一个事件处理程序,当新数据可从物理介质读取时运行。
在事件处理程序中,我从媒体读取数据并解析可用数据以获取完整的数据包。一旦识别出一个数据包,就会引发一个事件以将新数据包传递给订阅者。此事件的订阅者决定是否要使用该数据包。
到目前为止一切顺利......现在我的问题。虽然上面的场景可以将传入的数据分发给众多订阅者,并将进一步的处理逻辑放在应用程序中,但它给我留下了一个问题:
有时班级会收到一个数据包,它只是对班级发送的另一个数据包的回复(想想 ACK/FAIL)。
我将如何实现一种方法来发送等待此类确认的内容,同时又不破坏上述在事件处理程序中处理传入原始数据的概念?
一些伪代码来说明问题:
class CommCenter
{
public event NewPacketAvailable;
private void _newRawDataAvailable_EventHandler
{
// read incoming data from physical medium
// parse incoming data for packet structure
// the received packet may either contain a reply to
// a previously sent message or unrelated
// if packet found raise NewPacketAvailable event
// so that subscribers can handle the packet
}
public void SendMessage(DataPacket packet, Int32 timeoutInMilliseconds)
{
// put message on the physical medium
// wait for a packet confirming the previously sent packet
// How would I have to do this??
// the packet confirmation would arrive in _newRawDataAvailable_EventHandler
}
}
也许之前有一个好主意,甚至实现过这样的逻辑。我现在有点困惑该怎么办。很高兴有任何帮助或正确方向的指示;-)