Changes for page Running KEITH
Last modified by Richard Kreissig on 2023/09/14 08:48
Change comment:
There is no comment for this version
Summary
-
Page properties (1 modified, 0 added, 0 removed)
-
Objects (1 modified, 0 added, 0 removed)
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 -5780299 61 +57802999 - URL
-
... ... @@ -1,1 +1,1 @@ 1 -https://rtsys.informatik.uni-kiel.de/confluence//wiki/spaces/KIELER/pages/5780299 6/Running KEITH1 +https://rtsys.informatik.uni-kiel.de/confluence//wiki/spaces/KIELER/pages/57802999/Running KEITH