| // Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file | |
| // for details. All rights reserved. Use of this source code is governed by a | |
| // BSD-style license that can be found in the LICENSE file. | |
| import 'dart:async'; | |
| import 'dart:convert'; | |
| import 'package:dtd/dtd.dart'; | |
| /// To run this example pass the DTD uri as a parameter: | |
| /// | |
| /// Example: | |
| /// ```sh | |
| /// dart run dtd_service_example.dart ws://127.0.0.1:62925/cKB5QFiAUNMzSzlb | |
| /// ``` | |
| void main(List<String> args) async { | |
| final dtdUrl = args[0]; // pass the url as a param to the example | |
| final clientA = await DartToolingDaemon.connect(Uri.parse(dtdUrl)); | |
| final clientB = await DartToolingDaemon.connect(Uri.parse(dtdUrl)); | |
| final aCompleter = Completer<void>(); | |
| final bCompleter = Completer<void>(); | |
| // Set up handlers for stream events. It is important that you do this before | |
| // calling [streamListen] to ensure you don't miss any events. | |
| clientA.onEvent('Foo').listen((event) { | |
| print( | |
| jsonEncode( | |
| { | |
| 'step': 'Event A received', | |
| 'event': event.data, | |
| }, | |
| ), | |
| ); | |
| aCompleter.complete(); | |
| }); | |
| // Client B is used in this example to show that all clients listening to the | |
| // stream will receive events that are sent to the stream. | |
| clientB.onEvent('Foo').listen((event) { | |
| print( | |
| jsonEncode( | |
| { | |
| 'step': 'Event B received', | |
| 'event': event.data, | |
| }, | |
| ), | |
| ); | |
| bCompleter.complete(); | |
| }); | |
| // Subscribe the clients to the Foo stream. | |
| await clientA.streamListen('Foo'); | |
| await clientB.streamListen('Foo'); | |
| // Post an event to the Foo stream. | |
| await clientA.postEvent('Foo', 'kind1', {'event': 1}); | |
| // Both clients will receive the events | |
| await aCompleter.future; | |
| await bCompleter.future; | |
| await clientA.close(); | |
| await clientB.close(); | |
| } |