| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- // Events has a default implementations of EventStream for mtglib.
- //
- // Please see documentation for [mtglib.EventStream] interface to get an idea
- // of such an abstraction. This package has implementations for the default
- // event stream.
- //
- // Default event stream has a list of its own concepts. First, all it does is a
- // routing of messages to known observers. It takes an event, defines its type
- // and pass this message to a method of the observer.
- //
- // There might be many observers, but default event stream has a guarantee
- // though. It uses StreamID as a sharding key and guarantees that a message
- // with the same StreamID will be devlivered to the same observer instance. So,
- // each producer is guarateed to get all relevant messages related to the same
- // session. It is not possible that it will get EventFinish if it has not seen
- // EventStart for that session yet.
- package events
-
- import "github.com/9seconds/mtg/v2/mtglib"
-
- // Observer is an instance that listens for the incoming events.
- //
- // As it is said in the package description, the default event stream
- // guarantees that all events with the same StreamID are going to be routed to
- // the same instance of the observer. So, there is no need to synchronize
- // information about streams between many observers instances, they can have
- // their local storage.
- type Observer interface {
- // EventStart reacts on incoming mtglib.EventStart event.
- EventStart(mtglib.EventStart)
-
- // EventFinish reacts on incoming mtglib.EventFinish event.
- EventFinish(mtglib.EventFinish)
-
- // EventConnectedToDC reacts on incoming mtglib.EventConnectedToDC
- // event.
- EventConnectedToDC(mtglib.EventConnectedToDC)
-
- // EventDomainFronting reacts on incoming mtglib.EventDomainFronting
- // event.
- EventDomainFronting(mtglib.EventDomainFronting)
-
- // EventTraffic reacts on incoming mtglib.EventTraffic event.
- EventTraffic(mtglib.EventTraffic)
-
- // EventConcurrencyLimited reacts on incoming
- // mtglib.EventConcurrencyLimited event.
- EventConcurrencyLimited(mtglib.EventConcurrencyLimited)
-
- // EventIPBlocklisted reacts on incoming mtglib.EventIPBlocklisted event.
- EventIPBlocklisted(mtglib.EventIPBlocklisted)
-
- // EventReplayAttack reacts on incoming mtglib.EventReplayAttack event.
- EventReplayAttack(mtglib.EventReplayAttack)
-
- // EventIPListSize reacts on incoming mtglib.EventIPListSize
- EventIPListSize(mtglib.EventIPListSize)
-
- // Shutdown stop observer. Default event stream guarantees:
- // 1. If shutdown is executed, it is executed only once
- // 2. Observer won't receieve any new message after this
- // function call.
- Shutdown()
- }
-
- // ObserverFactory creates a new instance of the observer.
- //
- // Default event stream creates a small set of goroutines to manage incoming
- // messages. Each message is routed to an appropriate observer based on a
- // sharding key, stream id. So, it is possible that an instance of mtg will
- // have many observer instances, not a single one.
- type ObserverFactory func() Observer
|