Loading...
Searching...
No Matches
ATAS.DataFeedsCore.BaseMessageQueue< TMessage, TItem > Class Template Referenceabstract

A queue processed by its own thread.
The queue runs in sessions: Start begins one (the first connector of a shared queue), Stop ends it (the last connector). An item belongs to the session it was queued in: the items still queued when the session ends are dropped - also when the next session has already begun (a connect issued right after a disconnect) and the thread of the stopped session goes on to serve it. A message or an action queued while no session runs waits for the next session (unless a thread of the stopped queue is still alive and drops it); a continuation (EnqueueContinuation) queued after a session ended is dropped, it never runs in a later session. More...

Inheritance diagram for ATAS.DataFeedsCore.BaseMessageQueue< TMessage, TItem >:
[legend]
Collaboration diagram for ATAS.DataFeedsCore.BaseMessageQueue< TMessage, TItem >:
[legend]

Public Member Functions

void Enqueue (IDataFeedConnector connector, TMessage message)
 
void Enqueue (IDataFeedConnector connector, Action action)
 
void EnqueueContinuation (IDataFeedConnector connector, Action continuation)
 Queues an await continuation of the connector's thread (the connector's synchronization context).
A continuation belongs to the connection session it was posted in: once that session has ended (the connector's final disconnect stopped the queue), it must not run in a later one - it would resume the code of an abandoned connect attempt or of a closed connection inside the new connection (complete the new attempt, start transports, process stale data). Unlike a message queued while the connector is disconnected, which waits for the next connect, a continuation posted after its session ended is dropped.
The default implementation queues it as an ordinary action.
 
void Start (IDataFeedConnector connector, Action< TMessage > handler)
 
void Stop (IDataFeedConnector connector)
 
void Enqueue (IDataFeedConnector connector, TMessage message)
 
void Enqueue (IDataFeedConnector connector, Action action)
 
void EnqueueContinuation (IDataFeedConnector connector, Action continuation)
 Queues an await continuation of the connector's thread (the connector's synchronization context).
A continuation belongs to the connection session it was posted in: once that session has ended (the connector's final disconnect stopped the queue), it must not run in a later one - it would resume the code of an abandoned connect attempt or of a closed connection inside the new connection (complete the new attempt, start transports, process stale data). Unlike a message queued while the connector is disconnected, which waits for the next connect, a continuation posted after its session ended is dropped.
The default implementation queues it as an ordinary action.
 
void Start (IDataFeedConnector connector, Action< TMessage > handler)
 
void Stop (IDataFeedConnector connector)
 

Protected Member Functions

 BaseMessageQueue ()
 
abstract TItem CreateItem (IDataFeedConnector connector, TMessage? message, Action? action)
 
abstract void OnStart (IDataFeedConnector connector, Action< TMessage > handler)
 
abstract bool OnStop (IDataFeedConnector connector)
 
abstract void OnProcess (TItem item)
 
virtual ? object DescribeItem (TItem item)
 Short representation of a queued item for debug logging. Full message dumps are logged by connectors on receive; dumping them again here would double the cost.
 

Properties

TimeSpan HeartbeatTimeout [get, set]
 
- Properties inherited from ATAS.DataFeedsCore.IMessageQueue< TMessage >
TimeSpan HeartbeatTimeout [get, set]
 

Events

Action? Heartbeat
 
- Events inherited from ATAS.DataFeedsCore.IMessageQueue< TMessage >
Action? Heartbeat
 

Detailed Description

A queue processed by its own thread.
The queue runs in sessions: Start begins one (the first connector of a shared queue), Stop ends it (the last connector). An item belongs to the session it was queued in: the items still queued when the session ends are dropped - also when the next session has already begun (a connect issued right after a disconnect) and the thread of the stopped session goes on to serve it. A message or an action queued while no session runs waits for the next session (unless a thread of the stopped queue is still alive and drops it); a continuation (EnqueueContinuation) queued after a session ended is dropped, it never runs in a later session.

Constructor & Destructor Documentation

◆ BaseMessageQueue()

ATAS.DataFeedsCore.BaseMessageQueue< TMessage, TItem >.BaseMessageQueue ( )
protected

Member Function Documentation

◆ CreateItem()

abstract TItem ATAS.DataFeedsCore.BaseMessageQueue< TMessage, TItem >.CreateItem ( IDataFeedConnector  connector,
TMessage?  message,
Action?  action 
)
protectedpure virtual

◆ DescribeItem()

virtual ? object ATAS.DataFeedsCore.BaseMessageQueue< TMessage, TItem >.DescribeItem ( TItem  item)
protectedvirtual

Short representation of a queued item for debug logging. Full message dumps are logged by connectors on receive; dumping them again here would double the cost.

◆ Enqueue() [1/2]

void ATAS.DataFeedsCore.BaseMessageQueue< TMessage, TItem >.Enqueue ( IDataFeedConnector  connector,
Action  action 
)

◆ Enqueue() [2/2]

void ATAS.DataFeedsCore.BaseMessageQueue< TMessage, TItem >.Enqueue ( IDataFeedConnector  connector,
TMessage  message 
)

◆ EnqueueContinuation()

void ATAS.DataFeedsCore.BaseMessageQueue< TMessage, TItem >.EnqueueContinuation ( IDataFeedConnector  connector,
Action  continuation 
)

Queues an await continuation of the connector's thread (the connector's synchronization context).
A continuation belongs to the connection session it was posted in: once that session has ended (the connector's final disconnect stopped the queue), it must not run in a later one - it would resume the code of an abandoned connect attempt or of a closed connection inside the new connection (complete the new attempt, start transports, process stale data). Unlike a message queued while the connector is disconnected, which waits for the next connect, a continuation posted after its session ended is dropped.
The default implementation queues it as an ordinary action.

Implements ATAS.DataFeedsCore.IMessageQueue< TMessage >.

◆ OnProcess()

abstract void ATAS.DataFeedsCore.BaseMessageQueue< TMessage, TItem >.OnProcess ( TItem  item)
protectedpure virtual

◆ OnStart()

abstract void ATAS.DataFeedsCore.BaseMessageQueue< TMessage, TItem >.OnStart ( IDataFeedConnector  connector,
Action< TMessage >  handler 
)
protectedpure virtual

◆ OnStop()

◆ Start()

void ATAS.DataFeedsCore.BaseMessageQueue< TMessage, TItem >.Start ( IDataFeedConnector  connector,
Action< TMessage >  handler 
)

◆ Stop()

Property Documentation

◆ HeartbeatTimeout

TimeSpan ATAS.DataFeedsCore.BaseMessageQueue< TMessage, TItem >.HeartbeatTimeout
getset

Event Documentation

◆ Heartbeat

Action? ATAS.DataFeedsCore.BaseMessageQueue< TMessage, TItem >.Heartbeat

The documentation for this class was generated from the following file: