Skip to content

Commit bd6ac94

Browse files
committed
Merge pull request #53 from cbusbey/echo_refactor
refactor echo server for simplicity
2 parents 82dcc9e + 0651ec4 commit bd6ac94

File tree

1 file changed

+40
-119
lines changed

1 file changed

+40
-119
lines changed

_test/echo_server.go

Lines changed: 40 additions & 119 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,9 @@ package main
33
import (
44
"fmt"
55
"github.com/quickfixgo/quickfix"
6+
"github.com/quickfixgo/quickfix/enum"
67
"github.com/quickfixgo/quickfix/field"
7-
fix40nos "github.com/quickfixgo/quickfix/fix40/newordersingle"
8-
fix41nos "github.com/quickfixgo/quickfix/fix41/newordersingle"
9-
fix42nos "github.com/quickfixgo/quickfix/fix42/newordersingle"
10-
fix42secdef "github.com/quickfixgo/quickfix/fix42/securitydefinition"
11-
fix43nos "github.com/quickfixgo/quickfix/fix43/newordersingle"
12-
fix43secdef "github.com/quickfixgo/quickfix/fix43/securitydefinition"
13-
fix44nos "github.com/quickfixgo/quickfix/fix44/newordersingle"
14-
fix44secdef "github.com/quickfixgo/quickfix/fix44/securitydefinition"
15-
fix50nos "github.com/quickfixgo/quickfix/fix50/newordersingle"
16-
fix50secdef "github.com/quickfixgo/quickfix/fix50/securitydefinition"
17-
fix50sp1nos "github.com/quickfixgo/quickfix/fix50sp1/newordersingle"
18-
fix50sp1secdef "github.com/quickfixgo/quickfix/fix50sp1/securitydefinition"
19-
fix50sp2nos "github.com/quickfixgo/quickfix/fix50sp2/newordersingle"
20-
fix50sp2secdef "github.com/quickfixgo/quickfix/fix50sp2/securitydefinition"
8+
"github.com/quickfixgo/quickfix/tag"
219
"io/ioutil"
2210
"log"
2311
"os"
@@ -58,135 +46,68 @@ func (e *EchoApplication) FromApp(msg quickfix.Message, sessionID quickfix.Sessi
5846
}
5947

6048
func (e *EchoApplication) processMsg(msg quickfix.Message, sessionID quickfix.SessionID) quickfix.MessageRejectError {
49+
var possResend field.PossResendField
50+
msg.Header.Get(&possResend)
6151

62-
var orderID field.ClOrdIDField
63-
if err := msg.Body.Get(&orderID); err != nil {
64-
return err
65-
}
52+
if msg.Body.Has(tag.ClOrdID) {
53+
var orderID field.ClOrdIDField
6654

67-
reply := copyMessageToBuilder(msg)
68-
sessionOrderID := sessionID.String() + orderID.String()
69-
var possResend field.PossResendField
70-
if err := msg.Header.Get(&possResend); err == nil && possResend.FIXBoolean {
71-
if e.OrderIds[sessionOrderID] {
72-
return nil
55+
if err := msg.Body.Get(&orderID); err != nil {
56+
return err
7357
}
7458

75-
reply.Header.Set(possResend)
59+
sessionOrderID := sessionID.String() + orderID.String()
60+
if possResend.FIXBoolean {
61+
if e.OrderIds[sessionOrderID] {
62+
return nil
63+
}
64+
}
65+
66+
e.OrderIds[sessionOrderID] = true
7667
}
7768

78-
e.OrderIds[sessionOrderID] = true
69+
reply := copyMessage(msg)
70+
if possResend.FIXBoolean {
71+
reply.Header.Set(possResend)
72+
}
7973

8074
quickfix.SendToTarget(reply, sessionID)
8175

8276
return nil
8377
}
8478

85-
func copyMessageToBuilder(msg quickfix.Message) quickfix.Message {
86-
reply := quickfix.NewMessage()
87-
79+
func copyMessage(msg quickfix.Message) quickfix.Message {
8880
msgType := new(field.MsgTypeField)
8981
msg.Header.Get(msgType)
90-
reply.Header.Set(msgType)
91-
92-
for _, tag := range msg.Body.Tags() {
93-
var field quickfix.FIXString
94-
if err := msg.Body.GetField(tag, &field); err == nil {
95-
reply.Body.SetField(tag, field)
96-
}
97-
}
98-
99-
return reply
100-
}
101-
102-
func (e *EchoApplication) OnFIX40NewOrderSingle(msg fix40nos.Message, sessionID quickfix.SessionID) quickfix.MessageRejectError {
103-
return e.processMsg(msg.Message, sessionID)
104-
}
105-
106-
func (e *EchoApplication) OnFIX41NewOrderSingle(msg fix41nos.Message, sessionID quickfix.SessionID) quickfix.MessageRejectError {
107-
return e.processMsg(msg.Message, sessionID)
108-
}
109-
110-
func (e *EchoApplication) OnFIX42NewOrderSingle(msg fix42nos.Message, sessionID quickfix.SessionID) quickfix.MessageRejectError {
111-
return e.processMsg(msg.Message, sessionID)
112-
}
113-
114-
func (e *EchoApplication) OnFIX43NewOrderSingle(msg fix43nos.Message, sessionID quickfix.SessionID) quickfix.MessageRejectError {
115-
return e.processMsg(msg.Message, sessionID)
116-
}
117-
118-
func (e *EchoApplication) OnFIX44NewOrderSingle(msg fix44nos.Message, sessionID quickfix.SessionID) quickfix.MessageRejectError {
119-
return e.processMsg(msg.Message, sessionID)
120-
}
121-
122-
func (e *EchoApplication) OnFIX50NewOrderSingle(msg fix50nos.Message, sessionID quickfix.SessionID) quickfix.MessageRejectError {
123-
return e.processMsg(msg.Message, sessionID)
124-
}
125-
126-
func (e *EchoApplication) OnFIX50SP1NewOrderSingle(msg fix50sp1nos.Message, sessionID quickfix.SessionID) quickfix.MessageRejectError {
127-
return e.processMsg(msg.Message, sessionID)
128-
}
12982

130-
func (e *EchoApplication) OnFIX50SP2NewOrderSingle(msg fix50sp2nos.Message, sessionID quickfix.SessionID) quickfix.MessageRejectError {
131-
return e.processMsg(msg.Message, sessionID)
132-
}
83+
msg.Header.Clear()
84+
msg.Trailer.Clear()
13385

134-
func (e *EchoApplication) OnFIX42SecurityDefinition(msg fix42secdef.Message, sessionID quickfix.SessionID) (err quickfix.MessageRejectError) {
135-
reply := copyMessageToBuilder(msg.Message)
136-
quickfix.SendToTarget(reply, sessionID)
137-
return
138-
}
86+
msg.Header.Set(msgType)
13987

140-
func (e *EchoApplication) OnFIX43SecurityDefinition(msg fix43secdef.Message, sessionID quickfix.SessionID) (err quickfix.MessageRejectError) {
141-
reply := copyMessageToBuilder(msg.Message)
142-
quickfix.SendToTarget(reply, sessionID)
143-
return
144-
}
145-
146-
func (e *EchoApplication) OnFIX44SecurityDefinition(msg fix44secdef.Message, sessionID quickfix.SessionID) (err quickfix.MessageRejectError) {
147-
reply := copyMessageToBuilder(msg.Message)
148-
quickfix.SendToTarget(reply, sessionID)
149-
return
150-
}
151-
152-
func (e *EchoApplication) OnFIX50SecurityDefinition(msg fix50secdef.Message, sessionID quickfix.SessionID) (err quickfix.MessageRejectError) {
153-
reply := copyMessageToBuilder(msg.Message)
154-
quickfix.SendToTarget(reply, sessionID)
155-
return
156-
}
157-
158-
func (e *EchoApplication) OnFIX50SP1SecurityDefinition(msg fix50sp1secdef.Message, sessionID quickfix.SessionID) (err quickfix.MessageRejectError) {
159-
reply := copyMessageToBuilder(msg.Message)
160-
quickfix.SendToTarget(reply, sessionID)
161-
return
162-
}
163-
164-
func (e *EchoApplication) OnFIX50SP2SecurityDefinition(msg fix50sp2secdef.Message, sessionID quickfix.SessionID) (err quickfix.MessageRejectError) {
165-
reply := copyMessageToBuilder(msg.Message)
166-
quickfix.SendToTarget(reply, sessionID)
167-
return
88+
return msg
16889
}
16990

17091
func main() {
17192
app := &EchoApplication{}
17293
app.log = log.New(ioutil.Discard, "", log.LstdFlags)
17394
//app.log = log.New(os.Stdout, "", log.LstdFlags)
17495

175-
router.AddRoute(fix40nos.Route(app.OnFIX40NewOrderSingle))
176-
router.AddRoute(fix41nos.Route(app.OnFIX41NewOrderSingle))
177-
router.AddRoute(fix42nos.Route(app.OnFIX42NewOrderSingle))
178-
router.AddRoute(fix43nos.Route(app.OnFIX43NewOrderSingle))
179-
router.AddRoute(fix44nos.Route(app.OnFIX44NewOrderSingle))
180-
router.AddRoute(fix50nos.Route(app.OnFIX50NewOrderSingle))
181-
router.AddRoute(fix50sp1nos.Route(app.OnFIX50SP1NewOrderSingle))
182-
router.AddRoute(fix50sp2nos.Route(app.OnFIX50SP2NewOrderSingle))
183-
184-
router.AddRoute(fix42secdef.Route(app.OnFIX42SecurityDefinition))
185-
router.AddRoute(fix43secdef.Route(app.OnFIX43SecurityDefinition))
186-
router.AddRoute(fix44secdef.Route(app.OnFIX44SecurityDefinition))
187-
router.AddRoute(fix50secdef.Route(app.OnFIX50SecurityDefinition))
188-
router.AddRoute(fix50sp1secdef.Route(app.OnFIX50SP1SecurityDefinition))
189-
router.AddRoute(fix50sp2secdef.Route(app.OnFIX50SP2SecurityDefinition))
96+
router.AddRoute(enum.BeginStringFIX40, "D", app.processMsg)
97+
router.AddRoute(enum.BeginStringFIX41, "D", app.processMsg)
98+
router.AddRoute(enum.BeginStringFIX42, "D", app.processMsg)
99+
router.AddRoute(enum.BeginStringFIX43, "D", app.processMsg)
100+
router.AddRoute(enum.BeginStringFIX44, "D", app.processMsg)
101+
router.AddRoute(enum.BeginStringFIX50, "D", app.processMsg)
102+
router.AddRoute(enum.ApplVerID_FIX50SP1, "D", app.processMsg)
103+
router.AddRoute(enum.ApplVerID_FIX50SP2, "D", app.processMsg)
104+
105+
router.AddRoute(enum.BeginStringFIX42, "d", app.processMsg)
106+
router.AddRoute(enum.BeginStringFIX43, "d", app.processMsg)
107+
router.AddRoute(enum.BeginStringFIX44, "d", app.processMsg)
108+
router.AddRoute(enum.BeginStringFIX50, "d", app.processMsg)
109+
router.AddRoute(enum.ApplVerID_FIX50SP1, "d", app.processMsg)
110+
router.AddRoute(enum.ApplVerID_FIX50SP2, "d", app.processMsg)
190111

191112
cfg, err := os.Open(os.Args[1])
192113
if err != nil {

0 commit comments

Comments
 (0)