Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
159 changes: 40 additions & 119 deletions _test/echo_server.go
Original file line number Diff line number Diff line change
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