From 019989e3b1d597f99edc33f04a710cf19ad89e3a Mon Sep 17 00:00:00 2001 From: thosakwe Date: Sun, 9 Apr 2017 21:45:45 -0400 Subject: [PATCH] 1.0.4 --- README.md | 6 +++--- lib/browser.dart | 2 +- lib/hooks.dart | 8 ++++++++ lib/io.dart | 5 ++++- lib/server.dart | 11 ++--------- pubspec.yaml | 2 +- test/service/common.dart | 8 +++++++- 7 files changed, 26 insertions(+), 16 deletions(-) create mode 100644 lib/hooks.dart diff --git a/README.md b/README.md index 5280a65e..0f28fc14 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # angel_websocket -[![1.0.3](https://img.shields.io/badge/pub-1.0.3-brightgreen.svg)](https://pub.dartlang.org/packages/angel_websocket) +[![1.0.4](https://img.shields.io/badge/pub-1.0.4-brightgreen.svg)](https://pub.dartlang.org/packages/angel_websocket) [![build status](https://travis-ci.org/angel-dart/websocket.svg)](https://travis-ci.org/angel-dart/websocket) WebSocket plugin for Angel. @@ -29,11 +29,11 @@ main() async { ``` -Filtering events is easy with services. Just return a `bool`, whether +Filtering events is easy with hooked services. Just return a `bool`, whether synchronously or asynchronously. ```dart -myService.properties['ws:filter'] = (WebSocketContext socket) async { +myService.properties['ws:filter'] = (HookedServiceEvent e, WebSocketContext socket) async { return true; } ``` diff --git a/lib/browser.dart b/lib/browser.dart index 2cec58d4..e0527938 100644 --- a/lib/browser.dart +++ b/lib/browser.dart @@ -55,7 +55,7 @@ class WebSockets extends BaseWebSocketClient { @override Future getConnectedWebSocket() { - var socket = new WebSocket(basePath); + var socket = new WebSocket(authToken?.isNotEmpty == true ? basePath : '$basePath?token=$authToken'); var completer = new Completer(); socket diff --git a/lib/hooks.dart b/lib/hooks.dart new file mode 100644 index 00000000..961d547a --- /dev/null +++ b/lib/hooks.dart @@ -0,0 +1,8 @@ +import 'package:angel_framework/angel_framework.dart'; + +/// Prevents a WebSocket event from being broadcasted, to any client. +HookedServiceEventListener doNotBroadcast() { + return (HookedServiceEvent e) { + if (e.params != null) e.params['broadcast'] = false; + }; +} diff --git a/lib/io.dart b/lib/io.dart index 428b204b..254e76fd 100644 --- a/lib/io.dart +++ b/lib/io.dart @@ -38,7 +38,10 @@ class WebSockets extends BaseWebSocketClient { @override Future getConnectedWebSocket() async { - var socket = await WebSocket.connect(basePath); + var socket = await WebSocket.connect(basePath, + headers: authToken?.isNotEmpty == true + ? {'Authorization': 'Bearer $authToken'} + : {}); return new IOWebSocketChannel(socket); } diff --git a/lib/server.dart b/lib/server.dart index 132c8edb..49da7ce4 100644 --- a/lib/server.dart +++ b/lib/server.dart @@ -87,7 +87,7 @@ class AngelWebSocket extends AngelPlugin { _filter(WebSocketContext socket) { if (e.service.properties.containsKey('ws:filter')) - return e.service.properties['ws:filter'](socket); + return e.service.properties['ws:filter'](e, socket); else return true; } @@ -230,14 +230,7 @@ class AngelWebSocket extends AngelPlugin { /// Hooks a service up to have its events broadcasted. hookupService(Pattern _path, HookedService service) { String path = _path.toString(); - var batch = serviceHook(path); - - service - ..afterCreated.listen(batch) - ..afterModified.listen(batch) - ..afterUpdated.listen(batch) - ..afterRemoved.listen(batch); - + service.afterAll(serviceHook(path)); _servicesAlreadyWired.add(path); } diff --git a/pubspec.yaml b/pubspec.yaml index d6b2dd65..34518ce1 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -2,7 +2,7 @@ name: angel_websocket description: WebSocket plugin for Angel. environment: sdk: ">=1.19.0" -version: 1.0.3 +version: 1.0.4 author: Tobe O homepage: https://github.com/angel-dart/angel_websocket dependencies: diff --git a/test/service/common.dart b/test/service/common.dart index 250e94f9..1abca933 100644 --- a/test/service/common.dart +++ b/test/service/common.dart @@ -1,6 +1,7 @@ import 'package:angel_framework/angel_framework.dart'; import 'package:angel_framework/common.dart'; import 'package:angel_websocket/base_websocket_client.dart'; +import 'package:angel_websocket/server.dart'; import 'package:test/test.dart'; class Todo extends Model { @@ -11,7 +12,12 @@ class Todo extends Model { } class TodoService extends TypedService { - TodoService() : super(new MapService()); + TodoService() : super(new MapService()) { + properties['ws:filter'] = (HookedServiceEvent e, WebSocketContext socket) { + print('Hello, service filter world!'); + return true; + }; + } } testIndex(BaseWebSocketClient client) async {