@@ -3,21 +3,9 @@ package main
33import (
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
6048func (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
17091func 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