From 0651ec4a0ce1181cf2f10824316d3bd8556a1f61 Mon Sep 17 00:00:00 2001 From: Chris Busbey Date: Tue, 9 Feb 2016 14:20:43 -0800 Subject: [PATCH] refactor echo server for simpliciy --- _test/echo_server.go | 159 +++++++++++-------------------------------- 1 file changed, 40 insertions(+), 119 deletions(-) diff --git a/_test/echo_server.go b/_test/echo_server.go index abdbfa693..62ecaacb8 100644 --- a/_test/echo_server.go +++ b/_test/echo_server.go @@ -3,21 +3,9 @@ package main import ( "fmt" "github.com/quickfixgo/quickfix" + "github.com/quickfixgo/quickfix/enum" "github.com/quickfixgo/quickfix/field" - fix40nos "github.com/quickfixgo/quickfix/fix40/newordersingle" - fix41nos "github.com/quickfixgo/quickfix/fix41/newordersingle" - fix42nos "github.com/quickfixgo/quickfix/fix42/newordersingle" - fix42secdef "github.com/quickfixgo/quickfix/fix42/securitydefinition" - fix43nos "github.com/quickfixgo/quickfix/fix43/newordersingle" - fix43secdef "github.com/quickfixgo/quickfix/fix43/securitydefinition" - fix44nos "github.com/quickfixgo/quickfix/fix44/newordersingle" - fix44secdef "github.com/quickfixgo/quickfix/fix44/securitydefinition" - fix50nos "github.com/quickfixgo/quickfix/fix50/newordersingle" - fix50secdef "github.com/quickfixgo/quickfix/fix50/securitydefinition" - fix50sp1nos "github.com/quickfixgo/quickfix/fix50sp1/newordersingle" - fix50sp1secdef "github.com/quickfixgo/quickfix/fix50sp1/securitydefinition" - fix50sp2nos "github.com/quickfixgo/quickfix/fix50sp2/newordersingle" - fix50sp2secdef "github.com/quickfixgo/quickfix/fix50sp2/securitydefinition" + "github.com/quickfixgo/quickfix/tag" "io/ioutil" "log" "os" @@ -58,113 +46,46 @@ func (e *EchoApplication) FromApp(msg quickfix.Message, sessionID quickfix.Sessi } func (e *EchoApplication) processMsg(msg quickfix.Message, sessionID quickfix.SessionID) quickfix.MessageRejectError { + var possResend field.PossResendField + msg.Header.Get(&possResend) - var orderID field.ClOrdIDField - if err := msg.Body.Get(&orderID); err != nil { - return err - } + if msg.Body.Has(tag.ClOrdID) { + var orderID field.ClOrdIDField - reply := copyMessageToBuilder(msg) - sessionOrderID := sessionID.String() + orderID.String() - var possResend field.PossResendField - if err := msg.Header.Get(&possResend); err == nil && possResend.FIXBoolean { - if e.OrderIds[sessionOrderID] { - return nil + if err := msg.Body.Get(&orderID); err != nil { + return err } - reply.Header.Set(possResend) + sessionOrderID := sessionID.String() + orderID.String() + if possResend.FIXBoolean { + if e.OrderIds[sessionOrderID] { + return nil + } + } + + e.OrderIds[sessionOrderID] = true } - e.OrderIds[sessionOrderID] = true + reply := copyMessage(msg) + if possResend.FIXBoolean { + reply.Header.Set(possResend) + } quickfix.SendToTarget(reply, sessionID) return nil } -func copyMessageToBuilder(msg quickfix.Message) quickfix.Message { - reply := quickfix.NewMessage() - +func copyMessage(msg quickfix.Message) quickfix.Message { msgType := new(field.MsgTypeField) msg.Header.Get(msgType) - reply.Header.Set(msgType) - - for _, tag := range msg.Body.Tags() { - var field quickfix.FIXString - if err := msg.Body.GetField(tag, &field); err == nil { - reply.Body.SetField(tag, field) - } - } - - return reply -} - -func (e *EchoApplication) OnFIX40NewOrderSingle(msg fix40nos.Message, sessionID quickfix.SessionID) quickfix.MessageRejectError { - return e.processMsg(msg.Message, sessionID) -} - -func (e *EchoApplication) OnFIX41NewOrderSingle(msg fix41nos.Message, sessionID quickfix.SessionID) quickfix.MessageRejectError { - return e.processMsg(msg.Message, sessionID) -} - -func (e *EchoApplication) OnFIX42NewOrderSingle(msg fix42nos.Message, sessionID quickfix.SessionID) quickfix.MessageRejectError { - return e.processMsg(msg.Message, sessionID) -} - -func (e *EchoApplication) OnFIX43NewOrderSingle(msg fix43nos.Message, sessionID quickfix.SessionID) quickfix.MessageRejectError { - return e.processMsg(msg.Message, sessionID) -} - -func (e *EchoApplication) OnFIX44NewOrderSingle(msg fix44nos.Message, sessionID quickfix.SessionID) quickfix.MessageRejectError { - return e.processMsg(msg.Message, sessionID) -} - -func (e *EchoApplication) OnFIX50NewOrderSingle(msg fix50nos.Message, sessionID quickfix.SessionID) quickfix.MessageRejectError { - return e.processMsg(msg.Message, sessionID) -} - -func (e *EchoApplication) OnFIX50SP1NewOrderSingle(msg fix50sp1nos.Message, sessionID quickfix.SessionID) quickfix.MessageRejectError { - return e.processMsg(msg.Message, sessionID) -} -func (e *EchoApplication) OnFIX50SP2NewOrderSingle(msg fix50sp2nos.Message, sessionID quickfix.SessionID) quickfix.MessageRejectError { - return e.processMsg(msg.Message, sessionID) -} + msg.Header.Clear() + msg.Trailer.Clear() -func (e *EchoApplication) OnFIX42SecurityDefinition(msg fix42secdef.Message, sessionID quickfix.SessionID) (err quickfix.MessageRejectError) { - reply := copyMessageToBuilder(msg.Message) - quickfix.SendToTarget(reply, sessionID) - return -} + msg.Header.Set(msgType) -func (e *EchoApplication) OnFIX43SecurityDefinition(msg fix43secdef.Message, sessionID quickfix.SessionID) (err quickfix.MessageRejectError) { - reply := copyMessageToBuilder(msg.Message) - quickfix.SendToTarget(reply, sessionID) - return -} - -func (e *EchoApplication) OnFIX44SecurityDefinition(msg fix44secdef.Message, sessionID quickfix.SessionID) (err quickfix.MessageRejectError) { - reply := copyMessageToBuilder(msg.Message) - quickfix.SendToTarget(reply, sessionID) - return -} - -func (e *EchoApplication) OnFIX50SecurityDefinition(msg fix50secdef.Message, sessionID quickfix.SessionID) (err quickfix.MessageRejectError) { - reply := copyMessageToBuilder(msg.Message) - quickfix.SendToTarget(reply, sessionID) - return -} - -func (e *EchoApplication) OnFIX50SP1SecurityDefinition(msg fix50sp1secdef.Message, sessionID quickfix.SessionID) (err quickfix.MessageRejectError) { - reply := copyMessageToBuilder(msg.Message) - quickfix.SendToTarget(reply, sessionID) - return -} - -func (e *EchoApplication) OnFIX50SP2SecurityDefinition(msg fix50sp2secdef.Message, sessionID quickfix.SessionID) (err quickfix.MessageRejectError) { - reply := copyMessageToBuilder(msg.Message) - quickfix.SendToTarget(reply, sessionID) - return + return msg } func main() { @@ -172,21 +93,21 @@ func main() { app.log = log.New(ioutil.Discard, "", log.LstdFlags) //app.log = log.New(os.Stdout, "", log.LstdFlags) - router.AddRoute(fix40nos.Route(app.OnFIX40NewOrderSingle)) - router.AddRoute(fix41nos.Route(app.OnFIX41NewOrderSingle)) - router.AddRoute(fix42nos.Route(app.OnFIX42NewOrderSingle)) - router.AddRoute(fix43nos.Route(app.OnFIX43NewOrderSingle)) - router.AddRoute(fix44nos.Route(app.OnFIX44NewOrderSingle)) - router.AddRoute(fix50nos.Route(app.OnFIX50NewOrderSingle)) - router.AddRoute(fix50sp1nos.Route(app.OnFIX50SP1NewOrderSingle)) - router.AddRoute(fix50sp2nos.Route(app.OnFIX50SP2NewOrderSingle)) - - router.AddRoute(fix42secdef.Route(app.OnFIX42SecurityDefinition)) - router.AddRoute(fix43secdef.Route(app.OnFIX43SecurityDefinition)) - router.AddRoute(fix44secdef.Route(app.OnFIX44SecurityDefinition)) - router.AddRoute(fix50secdef.Route(app.OnFIX50SecurityDefinition)) - router.AddRoute(fix50sp1secdef.Route(app.OnFIX50SP1SecurityDefinition)) - router.AddRoute(fix50sp2secdef.Route(app.OnFIX50SP2SecurityDefinition)) + router.AddRoute(enum.BeginStringFIX40, "D", app.processMsg) + router.AddRoute(enum.BeginStringFIX41, "D", app.processMsg) + router.AddRoute(enum.BeginStringFIX42, "D", app.processMsg) + router.AddRoute(enum.BeginStringFIX43, "D", app.processMsg) + router.AddRoute(enum.BeginStringFIX44, "D", app.processMsg) + router.AddRoute(enum.BeginStringFIX50, "D", app.processMsg) + router.AddRoute(enum.ApplVerID_FIX50SP1, "D", app.processMsg) + router.AddRoute(enum.ApplVerID_FIX50SP2, "D", app.processMsg) + + router.AddRoute(enum.BeginStringFIX42, "d", app.processMsg) + router.AddRoute(enum.BeginStringFIX43, "d", app.processMsg) + router.AddRoute(enum.BeginStringFIX44, "d", app.processMsg) + router.AddRoute(enum.BeginStringFIX50, "d", app.processMsg) + router.AddRoute(enum.ApplVerID_FIX50SP1, "d", app.processMsg) + router.AddRoute(enum.ApplVerID_FIX50SP2, "d", app.processMsg) cfg, err := os.Open(os.Args[1]) if err != nil {