@@ -72,62 +72,38 @@ func (d *DiscoveryServer) Run(in io.Reader, out io.Writer) error {
72
72
for {
73
73
fullCmd , err := reader .ReadString ('\n' )
74
74
if err != nil {
75
- d .output (& genericMessageJSON {
76
- EventType : "command_error" ,
77
- Error : true ,
78
- Message : err .Error (),
79
- })
75
+ d .outputError ("command_error" , err .Error ())
80
76
return err
81
77
}
82
78
split := strings .Split (fullCmd , " " )
83
79
cmd := strings .ToUpper (strings .TrimSpace (split [0 ]))
84
80
85
81
if ! d .initialized && cmd != "HELLO" {
86
- d .output (& genericMessageJSON {
87
- EventType : "command_error" ,
88
- Error : true ,
89
- Message : fmt .Sprintf ("First command must be HELLO, but got '%s'" , cmd ),
90
- })
82
+ d .outputError ("command_error" , fmt .Sprintf ("First command must be HELLO, but got '%s'" , cmd ))
91
83
continue
92
84
}
93
85
94
86
switch cmd {
95
87
case "HELLO" :
96
88
if d .initialized {
97
- d .output (& genericMessageJSON {
98
- EventType : "hello" ,
99
- Error : true ,
100
- Message : "HELLO already called" ,
101
- })
89
+ d .outputError ("hello" , "HELLO already called" )
102
90
continue
103
91
}
104
92
re := regexp .MustCompile (`(\d+) "([^"]+)"` )
105
93
matches := re .FindStringSubmatch (fullCmd [6 :])
106
94
if len (matches ) != 3 {
107
- d .output (& genericMessageJSON {
108
- EventType : "hello" ,
109
- Error : true ,
110
- Message : "Invalid HELLO command" ,
111
- })
95
+ d .outputError ("hello" , "Invalid HELLO command" )
112
96
continue
113
97
}
114
98
d .userAgent = matches [2 ]
115
99
if v , err := strconv .ParseInt (matches [1 ], 10 , 64 ); err != nil {
116
- d .output (& genericMessageJSON {
117
- EventType : "hello" ,
118
- Error : true ,
119
- Message : "Invalid protocol version: " + matches [2 ],
120
- })
100
+ d .outputError ("hello" , "Invalid protocol version: " + matches [2 ])
121
101
continue
122
102
} else {
123
103
d .reqProtocolVersion = int (v )
124
104
}
125
105
if err := d .impl .Hello (d .userAgent , 1 ); err != nil {
126
- d .output (& genericMessageJSON {
127
- EventType : "hello" ,
128
- Error : true ,
129
- Message : err .Error (),
130
- })
106
+ d .outputError ("hello" , err .Error ())
131
107
continue
132
108
}
133
109
d .output (& genericMessageJSON {
@@ -139,58 +115,31 @@ func (d *DiscoveryServer) Run(in io.Reader, out io.Writer) error {
139
115
140
116
case "START" :
141
117
if d .started {
142
- d .output (& genericMessageJSON {
143
- EventType : "start" ,
144
- Error : true ,
145
- Message : "Discovery already STARTed" ,
146
- })
118
+ d .outputError ("start" , "Discovery already STARTed" )
147
119
continue
148
120
}
149
121
if d .syncStarted {
150
- d .output (& genericMessageJSON {
151
- EventType : "start" ,
152
- Error : true ,
153
- Message : "Discovery already START_SYNCed, cannot START" ,
154
- })
122
+ d .outputError ("start" , "Discovery already START_SYNCed, cannot START" )
155
123
continue
156
124
}
157
125
if err := d .impl .Start (); err != nil {
158
- d .output (& genericMessageJSON {
159
- EventType : "start" ,
160
- Error : true ,
161
- Message : "Cannot START: " + err .Error (),
162
- })
126
+ d .outputError ("start" , "Cannot START: " + err .Error ())
163
127
continue
164
128
}
165
129
d .started = true
166
- d .output (& genericMessageJSON {
167
- EventType : "start" ,
168
- Message : "OK" ,
169
- })
130
+ d .outputOk ("start" )
170
131
171
132
case "LIST" :
172
133
if ! d .started {
173
- d .output (& genericMessageJSON {
174
- EventType : "list" ,
175
- Error : true ,
176
- Message : "Discovery not STARTed" ,
177
- })
134
+ d .outputError ("list" , "Discovery not STARTed" )
178
135
continue
179
136
}
180
137
if d .syncStarted {
181
- d .output (& genericMessageJSON {
182
- EventType : "list" ,
183
- Error : true ,
184
- Message : "discovery already START_SYNCed, LIST not allowed" ,
185
- })
138
+ d .outputError ("list" , "discovery already START_SYNCed, LIST not allowed" )
186
139
continue
187
140
}
188
141
if ports , err := d .impl .List (); err != nil {
189
- d .output (& genericMessageJSON {
190
- EventType : "list" ,
191
- Error : true ,
192
- Message : "LIST error: " + err .Error (),
193
- })
142
+ d .outputError ("list" , "LIST error: " + err .Error ())
194
143
continue
195
144
} else {
196
145
type listOutputJSON struct {
@@ -205,52 +154,29 @@ func (d *DiscoveryServer) Run(in io.Reader, out io.Writer) error {
205
154
206
155
case "START_SYNC" :
207
156
if d .syncStarted {
208
- d .output (& genericMessageJSON {
209
- EventType : "start_sync" ,
210
- Error : true ,
211
- Message : "Discovery already START_SYNCed" ,
212
- })
157
+ d .outputError ("start_sync" , "Discovery already START_SYNCed" )
213
158
continue
214
159
}
215
160
if d .started {
216
- d .output (& genericMessageJSON {
217
- EventType : "start_sync" ,
218
- Error : true ,
219
- Message : "Discovery already STARTed, cannot START_SYNC" ,
220
- })
161
+ d .outputError ("start_sync" , "Discovery already STARTed, cannot START_SYNC" )
221
162
continue
222
163
}
223
164
if c , err := d .impl .StartSync (d .syncEvent ); err != nil {
224
- d .output (& genericMessageJSON {
225
- EventType : "start_sync" ,
226
- Error : true ,
227
- Message : "Cannot START_SYNC: " + err .Error (),
228
- })
165
+ d .outputError ("start_sync" , "Cannot START_SYNC: " + err .Error ())
229
166
continue
230
167
} else {
231
168
d .syncCloseChan = c
232
169
d .syncStarted = true
233
- d .output (& genericMessageJSON {
234
- EventType : "start_sync" ,
235
- Message : "OK" ,
236
- })
170
+ d .outputOk ("start_sync" )
237
171
}
238
172
239
173
case "STOP" :
240
174
if ! d .syncStarted && ! d .started {
241
- d .output (& genericMessageJSON {
242
- EventType : "stop" ,
243
- Error : true ,
244
- Message : "Discovery already STOPped" ,
245
- })
175
+ d .outputError ("stop" , "Discovery already STOPped" )
246
176
continue
247
177
}
248
178
if err := d .impl .Stop (); err != nil {
249
- d .output (& genericMessageJSON {
250
- EventType : "stop" ,
251
- Error : true ,
252
- Message : "Cannot STOP: " + err .Error (),
253
- })
179
+ d .outputError ("stop" , "Cannot STOP: " + err .Error ())
254
180
continue
255
181
}
256
182
if d .started {
@@ -261,24 +187,14 @@ func (d *DiscoveryServer) Run(in io.Reader, out io.Writer) error {
261
187
close (d .syncCloseChan )
262
188
d .syncStarted = false
263
189
}
264
- d .output (& genericMessageJSON {
265
- EventType : "stop" ,
266
- Message : "OK" ,
267
- })
190
+ d .outputOk ("stop" )
268
191
269
192
case "QUIT" :
270
- d .output (& genericMessageJSON {
271
- EventType : "quit" ,
272
- Message : "OK" ,
273
- })
193
+ d .outputOk ("quit" )
274
194
return nil
275
195
276
196
default :
277
- d .output (& genericMessageJSON {
278
- EventType : "command_error" ,
279
- Error : true ,
280
- Message : fmt .Sprintf ("Command %s not supported" , cmd ),
281
- })
197
+ d .outputError ("command_error" , fmt .Sprintf ("Command %s not supported" , cmd ))
282
198
}
283
199
}
284
200
}
@@ -301,6 +217,21 @@ type genericMessageJSON struct {
301
217
ProtocolVersion int `json:"protocolVersion,omitempty"`
302
218
}
303
219
220
+ func (d * DiscoveryServer ) outputOk (event string ) {
221
+ d .output (& genericMessageJSON {
222
+ EventType : event ,
223
+ Message : "OK" ,
224
+ })
225
+ }
226
+
227
+ func (d * DiscoveryServer ) outputError (event , msg string ) {
228
+ d .output (& genericMessageJSON {
229
+ EventType : event ,
230
+ Error : true ,
231
+ Message : msg ,
232
+ })
233
+ }
234
+
304
235
func (d * DiscoveryServer ) output (msg interface {}) {
305
236
data , err := json .MarshalIndent (msg , "" , " " )
306
237
if err != nil {
0 commit comments