<
From version < 21.1 >
edited by Soeren Domroes
on 2019/05/16 10:36
To version < 23.1 >
edited by Soeren Domroes
on 2019/05/16 10:53
>
Change comment: There is no comment for this version

Summary

Details

Page properties
Content
... ... @@ -169,7 +169,7 @@
169 169  
170 170  === Known issues: ===
171 171  
172 -Refreshing the browser is not enough for the diagram to work. If the diagram is needed the language server has to be restarted before the browser is refreshed. This is a known issue in theia-sprotty.
172 +\\
173 173  
174 174  = Developing for KEITH =
175 175  
... ... @@ -308,8 +308,57 @@
308 308  
309 309  == Server Client communication interface ==
310 310  
311 -Not only messages from client to server but rather mesages from server client might be needed
311 +Not only messages from client to server but rather messages from server client might be needed.
312 312  
313 +Messages that can be send from server to client are defined in the KeithLanguageClient:
314 +
315 +{{code title="Example KeithLanguageLCient"}}
316 +/**
317 + * LanguageClient that implements additional methods necessary for server client communication in KEITH.
318 + *
319 + * @author really fancy name
320 + *
321 + */
322 + @JsonSegment("keith")
323 +interface KeithLanguageClient extends LanguageClient {
324 +
325 + @JsonNotification("kicool/compile")
326 + def void compile(Object results, String uri, boolean finished);
327 +
328 + @JsonNotification("kicool/cancel-compilation")
329 + def void cancelCompilation(boolean success);
330 +
331 + // Not only notifications, but also server client requests should be possible, but currently there is no use case for that.
332 +}
333 +{{/code}}
334 +
335 +These messages can be caught on the client side by defining the message that is caught like this:
336 +
337 +{{code}}
338 +export const snapshotDescriptionMessageType = new NotificationType<CodeContainer, void>('keith/kicool/compile');
339 +{{/code}}
340 +
341 +This message type is bound to a method that should be called whenever the client receives such a message.
342 +
343 +{{code}}
344 +const lClient: ILanguageClient = await this.client.languageClient
345 +lClient.onNotification(snapshotDescriptionMessageType, this.handleNewSnapshotDescriptions.bind(this))
346 +{{/code}}
347 +
348 +The method should receive all parameters specific in the KeithLanguageClient interface on the serevr side.
349 +
350 +Such a notification from server to client is send like this:
351 +
352 +{{code}}
353 +future.thenAccept([
354 + // client is the KeithLanguageClient registered in a LanguageServerExtension that implements a ILanguageClientProvider
355 + // compile is the command defined in the KeithLanguageClientInterface
356 + client.compile(new CompilationResults(this.snapshotMap.get(uri)), uri, finished)
357 +])
358 +{{/code}}
359 +
360 +\\
361 +
313 313  == Register and calling an extension (on client side) ==
314 314  
315 315  Language server extension do not have to be registered on the client side. It is just called.
Confluence.Code.ConfluencePageClass[0]
Id
... ... @@ -1,1 +1,1 @@
1 -57802996
1 +57802999
URL
... ... @@ -1,1 +1,1 @@
1 -https://rtsys.informatik.uni-kiel.de/confluence//wiki/spaces/KIELER/pages/57802996/Running KEITH
1 +https://rtsys.informatik.uni-kiel.de/confluence//wiki/spaces/KIELER/pages/57802999/Running KEITH