1
0
Fork 0

Created factory for creating new protocol messages from raw strings

pull/661/head
dantleech 2018-07-29 14:43:56 +01:00 committed by Daniel Leech
parent 7adc455af9
commit 3b6c900ed3
3 changed files with 35 additions and 2 deletions

View File

@ -42,7 +42,7 @@ class ClientHandler
$id = $this->idGenerator->generate(); $id = $this->idGenerator->generate();
return $this->protocolWriter->write( return $this->protocolWriter->write(
new Protocol\Message( new Protocol\Message(
new AdvancedJsonRpc\Request($id, $method, (object)$params) (new AdvancedJsonRpc\Request($id, $method, (object)$params))->__toString()
) )
)->then(function () use ($id) { )->then(function () use ($id) {
$promise = new Promise; $promise = new Promise;

View File

@ -0,0 +1,32 @@
<?php
namespace LanguageServer\ProtocolBridge;
use AdvancedJsonRpc\Message as AdvancedJsonRpcMessage;
use LanguageServer\Protocol\Message;
class MessageFactory
{
/**
* Returns a LSP Message from a raw requets string.
*
* NOTE: This is only used in the MockProtocolStream. Consider moving it
* somewhere else.
*
* @param string $msg
* @return Message
*/
public static function fromRawMessage(string $msg): Message
{
$obj = new Message();
$parts = explode("\r\n", $msg);
$obj->body = AdvancedJsonRpcMessage::parse(array_pop($parts))->__toString();
foreach ($parts as $line) {
if ($line) {
$pair = explode(': ', $line);
$obj->headers[$pair[0]] = $pair[1];
}
}
return $obj;
}
}

View File

@ -4,6 +4,7 @@ declare(strict_types = 1);
namespace LanguageServer\Tests; namespace LanguageServer\Tests;
use LanguageServer\{ProtocolReader, ProtocolWriter}; use LanguageServer\{ProtocolReader, ProtocolWriter};
use LanguageServer\ProtocolBridge\MessageFactory;
use LanguageServer\Protocol\Message; use LanguageServer\Protocol\Message;
use Sabre\Event\{Loop, Emitter, Promise}; use Sabre\Event\{Loop, Emitter, Promise};
@ -21,7 +22,7 @@ class MockProtocolStream extends Emitter implements ProtocolReader, ProtocolWrit
public function write(Message $msg): Promise public function write(Message $msg): Promise
{ {
Loop\nextTick(function () use ($msg) { Loop\nextTick(function () use ($msg) {
$this->emit('message', [Message::parse((string)$msg)]); $this->emit('message', [MessageFactory::fromRawMessage((string)$msg)]);
}); });
return Promise\resolve(null); return Promise\resolve(null);
} }