Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions dart/moq/lib/json.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
/// JSON tracks, mirroring the `moq-json` crate.
///
/// Each type wraps a track: a producer takes over a `TrackProducer` and
/// advertises it in the broadcast's catalog, and a consumer takes over a
/// `TrackConsumer` that has not read a group yet. Values cross as JSON
/// strings. Import it with a prefix, since `dart:convert` has a `json` too:
///
/// ```dart
/// import 'package:moq/json.dart' as moq_json;
///
/// final status = moq_json.SnapshotProducer(
/// broadcast: broadcast,
/// track: broadcast.publishTrack(name: 'status', info: null),
/// config: moq_json.SnapshotConfig(),
/// );
/// ```
library;

import 'package:moq_ffi/moq_ffi.dart';

/// Publishes lossy latest-value JSON snapshots on a track it takes over.
typedef SnapshotProducer = MoqJsonSnapshotProducer;

/// Consumes reconstructed latest-value JSON snapshots from a track it takes over.
typedef SnapshotConsumer = MoqJsonSnapshotConsumer;

/// Configures a lossy latest-value JSON track.
typedef SnapshotConfig = MoqJsonSnapshotConfig;

/// Publishes a lossless stream of JSON records on a track it takes over.
typedef StreamProducer = MoqJsonStreamProducer;

/// Consumes a lossless stream of JSON records from a track it takes over.
typedef StreamConsumer = MoqJsonStreamConsumer;

/// Configures a lossless JSON stream track.
typedef StreamConfig = MoqJsonStreamConfig;
18 changes: 0 additions & 18 deletions dart/moq/lib/src/aliases.dart
Original file line number Diff line number Diff line change
Expand Up @@ -122,24 +122,6 @@ typedef MediaGroupConsumer = MoqMediaGroupConsumer;
/// The read side of a broadcast's catalog: yields updates as the set of tracks changes.
typedef CatalogConsumer = MoqCatalogConsumer;

/// Publishes lossy latest-value JSON snapshots.
typedef JsonSnapshotProducer = MoqJsonSnapshotProducer;

/// Consumes reconstructed latest-value JSON snapshots.
typedef JsonSnapshotConsumer = MoqJsonSnapshotConsumer;

/// Configures a lossy latest-value JSON track.
typedef JsonSnapshotConfig = MoqJsonSnapshotConfig;

/// Publishes a lossless stream of JSON records.
typedef JsonStreamProducer = MoqJsonStreamProducer;

/// Consumes a lossless stream of JSON records.
typedef JsonStreamConsumer = MoqJsonStreamConsumer;

/// Configures a lossless JSON stream track.
typedef JsonStreamConfig = MoqJsonStreamConfig;

/// A broadcast's catalog: its tracks and their properties, plus any application sections.
typedef Catalog = MoqCatalog;

Expand Down
26 changes: 26 additions & 0 deletions dart/moq/test/moq_test.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import 'dart:convert';
import 'dart:typed_data';

import 'package:moq/json.dart' as moq_json;
import 'package:moq/moq.dart';
import 'package:test/test.dart';

Expand Down Expand Up @@ -249,4 +250,29 @@ void main() {
dynamic.dispose();
served.dispose();
});

test('JSON tracks take over a raw track', () async {
final broadcast = MoqBroadcastProducer();
final producer = moq_json.SnapshotProducer(
broadcast: broadcast,
track: broadcast.publishTrack(name: 'status', info: null),
config: moq_json.SnapshotConfig(),
);
final track = await broadcast
.consume()
.subscribeTrack(name: 'status', subscription: null)
.timeout(timeout);
final consumer = moq_json.SnapshotConsumer(
track: track,
config: moq_json.SnapshotConfig(),
);

producer.update(value: jsonEncode({'state': 'live'}));
final value = await consumer.next().timeout(timeout);
expect(jsonDecode(value!), {'state': 'live'});

consumer.cancel();
producer.finish();
broadcast.close();
});
}
Loading
Loading