- event - it's multicasting. You listen to what you need.
- interface - it's dynamic. You can incorporate the interface into any of your class.
- callback using Action<T> or Func<T> - you handle what you are interested.
The core of this strategy - the publisher & subscriber + multi-threaded object. Let's call it NotificationServer. This core object allows the publisher to send the notification messages into the message pool. It also allows the subscriber to subscribe and listen to the notification messages that they are interested. You will find tons of example on how to implement the publisher & subscriber + multi-threaded in the Internet.
The notification message object contains the following properties:
- message ID - the ID that allows the subscriber to identify the purpose of it.
- session ID - it's GUID type and it's used in conjunction with broadcast flag.
- data - it's an object to be passing around.
- broadcast - it's a flag which tells the NotificationServer whether it should send the message to a specific subscriber or all subscribers. This can be very useful if you are implementing a TCP NotificationServer.
- should feedback - it's a flag that indicate whether it waits for the NotificationServer's respond. This can be very useful if you are implementing a TCP NotificationServer.
- Embedded NotificationServer- the implementation is to have a publisher & subscriber + multi-threaded object.
- The fun does not stop here - you can embed the NotificationServer class into a TCP server class and all communications are done through TCP communication. In this case, you will have a TCP NotificationServer which is able to run as a Windows Service. The publisher and subscribers can be any program, ASP.Net web page or another Windows Service. The publisher and subscribers could be running from the same computer or different computer.