#155 Minimise timing issues with websocket close.
This commit is contained in:
@ -186,14 +186,8 @@ type rawToCodeOceanWriter struct {
|
|||||||
// Write implements the io.Writer interface.
|
// Write implements the io.Writer interface.
|
||||||
// The passed data is forwarded to the WebSocket to CodeOcean.
|
// The passed data is forwarded to the WebSocket to CodeOcean.
|
||||||
func (rc *rawToCodeOceanWriter) Write(p []byte) (int, error) {
|
func (rc *rawToCodeOceanWriter) Write(p []byte) (int, error) {
|
||||||
select {
|
err := rc.proxy.sendToClient(dto.WebSocketMessage{Type: rc.outputType, Data: string(p)})
|
||||||
case <-rc.proxy.webSocketCtx.Done():
|
return len(p), err
|
||||||
return 0, nil
|
|
||||||
default:
|
|
||||||
log.Info("Passed WriteToCodeOceanCheck")
|
|
||||||
err := rc.proxy.sendToClient(dto.WebSocketMessage{Type: rc.outputType, Data: string(p)})
|
|
||||||
return len(p), err
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// webSocketProxy is an encapsulation of logic for forwarding between Runners and CodeOcean.
|
// webSocketProxy is an encapsulation of logic for forwarding between Runners and CodeOcean.
|
||||||
@ -308,12 +302,17 @@ func (wp *webSocketProxy) sendToClient(message dto.WebSocketMessage) error {
|
|||||||
return fmt.Errorf("error marshaling WebSocket message: %w", err)
|
return fmt.Errorf("error marshaling WebSocket message: %w", err)
|
||||||
}
|
}
|
||||||
log.WithField("message", message).Trace("Sending message to client")
|
log.WithField("message", message).Trace("Sending message to client")
|
||||||
err = wp.writeMessage(websocket.TextMessage, encodedMessage)
|
select {
|
||||||
if err != nil {
|
case <-wp.webSocketCtx.Done():
|
||||||
errorMessage := "Error writing the message"
|
default:
|
||||||
log.WithField("message", message).WithError(err).Warn(errorMessage)
|
log.Info("Passed WriteToCodeOceanCheck")
|
||||||
wp.closeWithError(errorMessage)
|
err = wp.writeMessage(websocket.TextMessage, encodedMessage)
|
||||||
return fmt.Errorf("error writing WebSocket message: %w", err)
|
if err != nil {
|
||||||
|
errorMessage := "Error writing the message"
|
||||||
|
log.WithField("message", message).WithError(err).Warn(errorMessage)
|
||||||
|
wp.closeWithError(errorMessage)
|
||||||
|
return fmt.Errorf("error writing WebSocket message: %w", err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user