changing to initiator

This commit is contained in:
Ramiro Paz
2026-03-10 16:28:09 -03:00
parent 557c04436d
commit 5053bfa9af
8 changed files with 58 additions and 86 deletions

View File

@ -17,9 +17,9 @@ import (
"quantex.com/qfixdpl/src/domain"
)
// Manager wraps the QuickFIX acceptor and implements domain.FIXSender.
// Manager wraps the QuickFIX initiator and implements domain.FIXSender.
type Manager struct {
acceptor *quickfix.Acceptor
initiator *quickfix.Initiator
app *application
sessionsMu sync.RWMutex
sessions map[string]quickfix.SessionID
@ -38,7 +38,7 @@ func NewManager(cfg app.FIXConfig, orderStore domain.OrderStore, notify domain.N
}
func (m *Manager) Start() error {
fixApp := newApplication(m.orderStore)
fixApp := newApplication()
fixApp.onLogon = m.onLogon
fixApp.onLogout = m.onLogout
m.app = fixApp
@ -57,26 +57,26 @@ func (m *Manager) Start() error {
storeFactory := quickfix.NewMemoryStoreFactory()
logFactory := quickfix.NewNullLogFactory()
acceptor, err := quickfix.NewAcceptor(fixApp, storeFactory, settings, logFactory)
initiator, err := quickfix.NewInitiator(fixApp, storeFactory, settings, logFactory)
if err != nil {
return fmt.Errorf("creating FIX acceptor: %w", err)
return fmt.Errorf("creating FIX initiator: %w", err)
}
m.acceptor = acceptor
m.initiator = initiator
if err = m.acceptor.Start(); err != nil {
return fmt.Errorf("starting FIX acceptor: %w", err)
if err = m.initiator.Start(); err != nil {
return fmt.Errorf("starting FIX initiator: %w", err)
}
slog.Info("FIX acceptor started", "settings", m.cfg.SettingsFile)
slog.Info("FIX initiator started", "settings", m.cfg.SettingsFile)
return nil
}
func (m *Manager) Stop() {
if m.acceptor != nil {
m.acceptor.Stop()
slog.Info("FIX acceptor stopped")
if m.initiator != nil {
m.initiator.Stop()
slog.Info("FIX initiator stopped")
}
}
@ -94,17 +94,18 @@ func (m *Manager) onLogout(sessionID quickfix.SessionID) {
// SendQuote implements domain.FIXSender.
func (m *Manager) SendQuote(clOrdID, quoteID, symbol, currency string, bidPx, offerPx, bidSize, offerSize decimal.Decimal) error {
order, ok := m.orderStore.GetOrderByClOrdID(clOrdID)
if !ok {
return fmt.Errorf("order not found: %s", clOrdID)
}
m.sessionsMu.RLock()
sessionID, ok := m.sessions[order.SessionID]
var sessionID quickfix.SessionID
var ok bool
for _, sid := range m.sessions {
sessionID = sid
ok = true
break
}
m.sessionsMu.RUnlock()
if !ok {
return fmt.Errorf("session not active for order %s (session %s)", clOrdID, order.SessionID)
return fmt.Errorf("no active FIX session")
}
q := quote.New(