Skip to content

Commit

Permalink
refactor echo server for simpliciy
Browse files Browse the repository at this point in the history
  • Loading branch information
Chris Busbey committed Feb 9, 2016
1 parent 82dcc9e commit 0651ec4
Showing 1 changed file with 40 additions and 119 deletions.
159 changes: 40 additions & 119 deletions _test/echo_server.go
Expand Up @@ -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"
Expand Down Expand Up @@ -58,135 +46,68 @@ 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() {
app := &EchoApplication{}
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 {
Expand Down

0 comments on commit 0651ec4

Please sign in to comment.