// Create a FIXClient with common routes for market connectors func NewFIXClient(c common.Config) *FIXClient { app := &FIXClient{ MessageRouter: quickfix.NewMessageRouter(), marketConnectorName: c.MarketConnectorName, } // Initiate message bus listening for requests if msgbus, err := messagebus.Connect(c.MessageBusURL); err != nil { log.Fatalf("error: Cannot connect to order message bus @ %v", c.MessageBusURL) } else { app.MessageBus = msgbus } // Connect to database storage driver if storage, err := database.NewOrderStore(c.DatabaseDriver, c.DatabaseUrl, nil); err != nil { log.Fatalf("error: Cannot connect to database driver %v @ %v", c.DatabaseDriver, c.DatabaseUrl) } else { app.OrderStore = storage } // QuickFIX settings from config appSettings := quickfix.NewSettings() var settings *quickfix.SessionSettings settings = appSettings.GlobalSettings() settings.Set("SocketConnectHost", "127.0.0.1") settings.Set("SocketConnectPort", "5001") settings.Set("HeartBtInt", "30") settings.Set("SenderCompID", "CYAN") settings.Set("TargetCompID", "CORP") settings.Set("ResetOnLogon", "Y") settings.Set("FileLogPath", "tmp") settings = quickfix.NewSessionSettings() settings.Set("BeginString", "FIX.4.4") if session, err := appSettings.AddSession(settings); err != nil { log.WithError(err).Fatal("FIX Session Error") } else { app.Session = session } // FIX routes app.AddRoute(fix44er.Route(app.onFIX44ExecutionReport)) app.AddRoute(fix44ocj.Route(app.onFIX44OrderCancelReject)) // FIX logging logFactory := quickfix.NewNullLogFactory() // quickfix.NewScreenLogFactory() // Create initiator if initiator, err := quickfix.NewInitiator(app, quickfix.NewMemoryStoreFactory(), appSettings, logFactory); err != nil { log.WithError(err).Fatal("FIX NewInitiator Error") } else { app.Initiator = initiator } return app }
func newExecutor() *executor { e := &executor{MessageRouter: quickfix.NewMessageRouter()} e.AddRoute(fix40nos.Route(e.OnFIX40NewOrderSingle)) e.AddRoute(fix41nos.Route(e.OnFIX41NewOrderSingle)) e.AddRoute(fix42nos.Route(e.OnFIX42NewOrderSingle)) e.AddRoute(fix43nos.Route(e.OnFIX43NewOrderSingle)) e.AddRoute(fix44nos.Route(e.OnFIX44NewOrderSingle)) e.AddRoute(fix50nos.Route(e.OnFIX50NewOrderSingle)) return e }
func newApplication() *Application { app := &Application{ MessageRouter: quickfix.NewMessageRouter(), OrderMatcher: NewOrderMatcher(), } app.AddRoute(newordersingle.Route(app.onNewOrderSingle)) app.AddRoute(ordercancelrequest.Route(app.onOrderCancelRequest)) app.AddRoute(marketdatarequest.Route(app.onMarketDataRequest)) return app }
package main import ( "fmt" "io/ioutil" "log" "os" "os/signal" "github.com/quickfixgo/quickfix" "github.com/quickfixgo/quickfix/enum" "github.com/quickfixgo/quickfix/field" "github.com/quickfixgo/quickfix/tag" ) var router *quickfix.MessageRouter = quickfix.NewMessageRouter() type EchoApplication struct { log *log.Logger OrderIds map[string]bool } func (e EchoApplication) OnCreate(sessionID quickfix.SessionID) { e.log.Printf("OnCreate %v\n", sessionID.String()) } func (e *EchoApplication) OnLogon(sessionID quickfix.SessionID) { e.log.Printf("OnLogon %v\n", sessionID.String()) e.OrderIds = make(map[string]bool) } func (e *EchoApplication) OnLogout(sessionID quickfix.SessionID) { e.log.Printf("OnLogout %v\n", sessionID.String())