MCPcopy Create free account
hub / github.com/koding/kite / handleResp

Method handleResp

sockjsclient/xhr.go:176–261  ·  view source on GitHub ↗
(resp *http.Response)

Source from the content-addressed store, hash-verified

174}
175
176func (x *XHRSession) handleResp(resp *http.Response) (msg string, again bool, err error) {
177 defer resp.Body.Close()
178
179 switch resp.StatusCode {
180 case http.StatusOK:
181 case http.StatusNotFound:
182 x.Close(3000, "session not found") // invalidate session - see details: sockjs/sockjs-client#66
183
184 return "", false, &ErrSession{
185 Type: config.XHRPolling,
186 State: sockjs.SessionClosed,
187 Err: errors.New("session does not exist: " + x.sessionID),
188 }
189 default:
190 return "", false, fmt.Errorf("Receiving data failed. Want: 200 Got: %d", resp.StatusCode)
191 }
192
193 fr := newFrameReader(resp.Body, x.timeout)
194
195 frame, err := fr.ReadByte()
196 if err == ErrPollTimeout {
197 return "", true, nil
198 }
199 if err != nil {
200 return "", false, err
201 }
202
203 switch frame {
204 case 'o':
205 x.setState(sockjs.SessionActive)
206
207 return "", true, nil
208 case 'm':
209 var message string
210 if err := json.NewDecoder(fr).Decode(&message); err != nil {
211 return "", false, err
212 }
213
214 if message == "" {
215 return "", false, errors.New("unexpected empty message")
216 }
217
218 x.messages = append(x.messages, message)
219
220 message, x.messages = x.messages[0], x.messages[1:]
221
222 return message, false, nil
223 case 'a':
224 // received an array of messages
225 var messages []string
226 if err := json.NewDecoder(fr).Decode(&messages); err != nil {
227 return "", false, err
228 }
229
230 x.messages = append(x.messages, messages...)
231
232 if len(x.messages) == 0 {
233 return "", false, errors.New("no message")

Callers 1

RecvMethod · 0.95

Calls 4

CloseMethod · 0.95
setStateMethod · 0.95
newFrameReaderFunction · 0.85
ReadByteMethod · 0.80

Tested by

no test coverage detected