Start Langium as standalone server #471
Answered
by
spoenemann
theogiraudet
asked this question in
Q&A
|
Hi! But it doesn't seem to work. Thanks! |
Answered by
spoenemann
May 4, 2022
Replies: 2 comments 8 replies
|
Hi @theogiraudet, That's weird, I just tried to use |
7 replies
|
You can connect Langium directly to a WebSocket with a custom message reader / writer. The following snippet is based on the class WebSocketMessageWriter extends AbstractMessageWriter {
private readonly ws: WebSocket;
constructor(ws: WebSocket) {
super();
this.ws = ws;
}
write(msg: Message): Promise<void> {
return new Promise((resolve, reject) => {
const content = JSON.stringify(msg);
this.ws.send(content, err => {
if (err) {
reject(err);
} else {
resolve();
}
});
});
}
end(): void {}
}
class WebSocketMessageReader extends AbstractMessageReader {
private readonly ws: WebSocket;
constructor(ws: WebSocket) {
super();
this.ws = ws;
}
listen(callback: DataCallback): Disposable {
const messageListener = (rawMessage: Message) => {
const message = JSON.parse(rawMessage.toString()) as Message;
callback(message);
};
const closeListener = () => this.fireClose()
this.ws.on('message', messageListener);
this.ws.on('close', closeListener);
return {
dispose: () => {
this.ws.removeListener('message', messageListener);
this.ws.removeListener('close', closeListener);
}
};
}
}
const wsServer = new WebSocket.Server(/* options */);
wsServer.on('connection', (ws, request) => {
const reader = new WebSocketMessageReader(ws);
const writer = new WebSocketMessageWriter(ws);
const connection = createConnection(reader, writer);
const services = createMyLanguageServices({ connection });
startLanguageServer(services.shared);
}); |
1 reply
Answer selected by
theogiraudet
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment

You can connect Langium directly to a WebSocket with a custom message reader / writer. The following snippet is based on the
wspackage: