Skip to content

Commit 9533410

Browse files
authored
docs: add web_socket_counter example (#450)
1 parent a47816d commit 9533410

File tree

16 files changed

+362
-0
lines changed

16 files changed

+362
-0
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
name: examples/web_socket_counter
2+
3+
concurrency:
4+
group: ${{ github.workflow }}-${{ github.ref }}
5+
cancel-in-progress: true
6+
7+
on:
8+
pull_request:
9+
paths:
10+
- "examples/web_socket_counter/routes/**"
11+
- "examples/web_socket_counter/lib/**"
12+
- "examples/web_socket_counter/test/**"
13+
- "examples/web_socket_counter/e2e/**"
14+
- ".github/workflows/examples_counter.yaml"
15+
- "packages/dart_frog/lib/**"
16+
- "packages/dart_frog/pubspec.yaml"
17+
- "packages/dart_frog_cli/lib/**"
18+
- "packages/dart_frog_cli/pubspec.yaml"
19+
branches:
20+
- main
21+
22+
jobs:
23+
build:
24+
uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/dart_package.yml@v1
25+
with:
26+
working_directory: examples/web_socket_counter
27+
analyze_directories: "routes test"
28+
report_on: "routes"
29+
30+
docker:
31+
uses: ./.github/workflows/.docker_tests.yaml
32+
with:
33+
setup: rm pubspec_overrides.yaml && dart pub global activate --source path ../../packages/dart_frog_cli
34+
working_directory: examples/web_socket_counter
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# See https://www.dartlang.org/guides/libraries/private-files
2+
3+
# Files and directories created by pub
4+
.dart_tool/
5+
.packages
6+
pubspec.lock
7+
8+
# Files and directories created by dart_frog
9+
build/
10+
.dart_frog
11+
12+
# Test related files
13+
coverage/

examples/web_socket_counter/README.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# WebSocket Counter
2+
3+
[![style: very good analysis][very_good_analysis_badge]][very_good_analysis_link]
4+
[![License: MIT][license_badge]][license_link]
5+
[![Powered by Dart Frog](https://img.shields.io/endpoint?url=https://tinyurl.com/dartfrog-badge)](https://dartfrog.vgv.dev)
6+
7+
An example counter app built with `dart_frog` using WebSockets.
8+
9+
[license_badge]: https://img.shields.io/badge/license-MIT-blue.svg
10+
[license_link]: https://opensource.org/licenses/MIT
11+
[very_good_analysis_badge]: https://img.shields.io/badge/style-very_good_analysis-B22C89.svg
12+
[very_good_analysis_link]: https://pub.dev/packages/very_good_analysis
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
include: package:very_good_analysis/analysis_options.3.1.0.yaml
2+
analyzer:
3+
exclude:
4+
- build/**
5+
linter:
6+
rules:
7+
file_names: false
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import 'package:test/test.dart';
2+
import 'package:web_socket_client/web_socket_client.dart';
3+
import 'package:web_socket_counter/counter/models/message.dart';
4+
5+
void main() {
6+
group('E2E', () {
7+
test('establishes connection and receives the initial count.', () async {
8+
final socket = WebSocket(Uri.parse('ws://localhost:8080/ws'));
9+
await expectLater(socket.messages, emits('0'));
10+
socket.close();
11+
});
12+
13+
test('sending an increment message increases the count by 1', () async {
14+
final socket = WebSocket(Uri.parse('ws://localhost:8080/ws'));
15+
await expectLater(socket.messages, emits('0'));
16+
socket.send(Message.increment.value);
17+
await expectLater(socket.messages, emits('1'));
18+
socket.close();
19+
});
20+
21+
test('sending a decrement message decreases the count by 1', () async {
22+
final socket = WebSocket(Uri.parse('ws://localhost:8080/ws'));
23+
await expectLater(socket.messages, emits('1'));
24+
socket.send(Message.decrement.value);
25+
await expectLater(socket.messages, emits('0'));
26+
socket.close();
27+
});
28+
});
29+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export 'cubit/counter_cubit.dart';
2+
export 'middleware/counter_provider.dart';
3+
export 'models/message.dart';
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import 'package:broadcast_bloc/broadcast_bloc.dart';
2+
3+
/// {@template counter_cubit}
4+
/// A cubit which manages the value of a count.
5+
/// {@endtemplate}
6+
class CounterCubit extends BroadcastCubit<int> {
7+
/// {@macro counter_cubit}
8+
CounterCubit() : super(0);
9+
10+
/// Increment the current state.
11+
void increment() => emit(state + 1);
12+
13+
/// Decrement the current state.
14+
void decrement() => emit(state - 1);
15+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import 'package:dart_frog/dart_frog.dart';
2+
import 'package:web_socket_counter/counter/counter.dart';
3+
4+
final _counter = CounterCubit();
5+
6+
/// Provides an instance of a [CounterCubit].
7+
final counterProvider = provider<CounterCubit>((_) => _counter);
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/// {@template message}
2+
/// WebSocket counter messages.
3+
/// {@endtemplate}
4+
enum Message {
5+
/// An increment message.
6+
increment('__increment__'),
7+
8+
/// A decrement message.
9+
decrement('__decrement__');
10+
11+
/// {@macro message}
12+
const Message(this.value);
13+
14+
/// The value of the message.
15+
final String value;
16+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
name: web_socket_counter
2+
description: An example counter app built with Dart Frog using WebSockets.
3+
version: 1.0.0+1
4+
publish_to: none
5+
6+
environment:
7+
sdk: ">=2.18.0 <3.0.0"
8+
9+
dependencies:
10+
broadcast_bloc: ^0.1.0-dev.1
11+
dart_frog: ^0.3.0
12+
dart_frog_web_socket: ^0.1.0-dev.1
13+
14+
dev_dependencies:
15+
bloc_test: ^9.1.0
16+
http: ^0.13.5
17+
mocktail: ^0.3.0
18+
test: ^1.19.2
19+
very_good_analysis: ^3.1.0
20+
web_socket_client: ^0.1.0-dev.1

0 commit comments

Comments
 (0)