Changelog
View SourceUnreleased
FixAlchemy.MessageStore.Detsstores sent messages in a file per session, so a session resuming its sequence numbers can replay the original messages instead of gap-filling them.- NextExpectedMsgSeqNum(789) in Logon, for both roles, behind
:next_expected_msg_seq_num. A counterparty reporting a number behind what this session sent is resent the difference without waiting for a ResendRequest; one reporting a number beyond it is logged out. FixAlchemy.Engine.session_key/1names the identity a session's storage is keyed by, and the engine passes it toFixAlchemy.MessageStore.new/1.
0.1.0
Initial release.
Session protocol
FixAlchemy.Engineruns the session protocol for one connection, independent of which side dialed: framing, sequence numbers, heartbeats and TestRequests, ResendRequests and replay, and delivery to subscribers.FixAlchemy.Clientinitiates: dials, sends the Logon, reconnects with backoff.FixAlchemy.Serveraccepts: listens over TCP or TLS, matches each Logon to a configured session, and refuses one that matches nothing, fails credentials, or names a session already connected.
Dictionaries
- Generates field, message, and repeating-group parsers from a venue's FIX XML,
including the
FIXT1.1.xmlandFIX50SP2.xmlpair a FIX 5.0 session needs. FixAlchemy.Engine.Validationchecks inbound messages against the dictionary and answers a bad one with a Reject naming the SessionRejectReason.
Routing and market data
FixAlchemy.Dispatchroutes inbound messages to subscribers by MsgType, by a tag equalling a value, or by a predicate over a tag.FixAlchemy.Feedpublishes one price to many sessions through a tree of venue transforms, applying each transform once however many sessions sit below it.
Storage
FixAlchemy.MessageStoreretains sent messages for replay; in-memory by default.FixAlchemy.SessionStorecarries sequence numbers across connections and restarts, keyed by BeginString, SenderCompID and TargetCompID; ETS-backed implementation included.