diff --git a/src/ProtocolStreamReader.php b/src/ProtocolStreamReader.php index 699fb3c..2d0e351 100644 --- a/src/ProtocolStreamReader.php +++ b/src/ProtocolStreamReader.php @@ -6,7 +6,6 @@ namespace LanguageServer; use LanguageServer\Protocol\Message; use AdvancedJsonRpc\Message as MessageBody; use Sabre\Event\Loop; -use RuntimeException; class ProtocolStreamReader implements ProtocolReader { @@ -26,11 +25,8 @@ class ProtocolStreamReader implements ProtocolReader public function __construct($input) { $this->input = $input; - Loop\addReadStream($this->input, function () { - if (feof($this->input)) { - throw new RuntimeException('Stream is closed'); - } + Loop\addReadStream($this->input, function () { while (($c = fgetc($this->input)) !== false && $c !== '') { $this->buffer .= $c; switch ($this->parsingMode) { diff --git a/src/ProtocolStreamWriter.php b/src/ProtocolStreamWriter.php index d2b2c0e..7da47c4 100644 --- a/src/ProtocolStreamWriter.php +++ b/src/ProtocolStreamWriter.php @@ -5,6 +5,7 @@ namespace LanguageServer; use LanguageServer\Protocol\Message; use Sabre\Event\Loop; +use RuntimeException; class ProtocolStreamWriter implements ProtocolWriter { @@ -22,9 +23,17 @@ class ProtocolStreamWriter implements ProtocolWriter { $this->output = $output; Loop\addWriteStream($this->output, function () { - $msgSize = strlen($this->buffer); + error_clear_last(); $bytesWritten = @fwrite($this->output, $this->buffer); - if ($bytesWritten > 0) { + if ($bytesWritten === false) { + $error = error_get_last(); + if ($error !== null) { + throw new RuntimeException('Could not write message: ' . error_get_last()['message']); + } else { + throw new RuntimeException('Could not write message'); + } + } + else if ($bytesWritten > 0) { $this->buffer = substr($this->buffer, $bytesWritten); } });