From 6674353a53451da9fea192354bbf15f7fdf7169d Mon Sep 17 00:00:00 2001 From: Tobe O Date: Sun, 21 Oct 2018 04:15:51 -0400 Subject: [PATCH] 2.0.0-alpha.2 --- CHANGELOG.md | 3 +++ lib/angel_websocket.dart | 16 ++++++++++---- lib/base_websocket_client.dart | 39 +++++++++++++++++----------------- lib/browser.dart | 10 ++++----- lib/io.dart | 10 ++++----- lib/websocket_controller.dart | 5 +++-- pubspec.yaml | 2 +- 7 files changed, 49 insertions(+), 36 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dddbe931..00ef5cc7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +# 2.0.0-alpha.2 +* Updated for the next version of `angel_client`. + # 2.0.0-alpha.1 * Refactorings for updated Angel 2 versions. * Remove `package:dart2_constant`. diff --git a/lib/angel_websocket.dart b/lib/angel_websocket.dart index 0a3a652b..b7dfc04c 100644 --- a/lib/angel_websocket.dart +++ b/lib/angel_websocket.dart @@ -39,16 +39,24 @@ const List EVENTS = const [ ]; /// A notification from the server that something has occurred. -class WebSocketEvent { +class WebSocketEvent { String eventName; - var data; + Data data; WebSocketEvent({String this.eventName, this.data}); factory WebSocketEvent.fromJson(Map data) => new WebSocketEvent( - eventName: data['eventName'].toString(), data: data['data']); + eventName: data['eventName'].toString(), data: data['data'] as Data); - Map toJson() { + WebSocketEvent cast() { + if (T == Data) { + return this as WebSocketEvent; + } else { + return new WebSocketEvent(eventName: eventName, data: data as T); + } + } + + Map toJson() { return {'eventName': eventName, 'data': data}; } } diff --git a/lib/base_websocket_client.dart b/lib/base_websocket_client.dart index 1f200b31..fd4d4997 100644 --- a/lib/base_websocket_client.dart +++ b/lib/base_websocket_client.dart @@ -133,10 +133,11 @@ abstract class BaseWebSocketClient extends BaseAngelClient { Future getConnectedWebSocket(); @override - WebSocketsService service(String path, - {Type type, AngelDeserializer deserializer}) { + WebSocketsService service(String path, + {Type type, AngelDeserializer deserializer}) { String uri = path.toString().replaceAll(_straySlashes, ''); - return new WebSocketsService(socket, this, uri, deserializer: deserializer); + return new WebSocketsService(socket, this, uri, + deserializer: deserializer); } /// Starts listening for data. @@ -225,13 +226,13 @@ abstract class BaseWebSocketClient extends BaseAngelClient { } /// A [Service] that asynchronously interacts with the server. -class WebSocketsService extends Service { +class WebSocketsService extends Service { /// The [BaseWebSocketClient] that spawned this service. @override final BaseWebSocketClient app; /// Used to deserialize JSON into typed data. - final AngelDeserializer deserializer; + final AngelDeserializer deserializer; /// The [WebSocketChannel] to listen to, and send data across. final WebSocketChannel socket; @@ -242,11 +243,11 @@ class WebSocketsService extends Service { final StreamController _onAllEvents = new StreamController(); final StreamController _onIndexed = new StreamController(); - final StreamController _onRead = new StreamController(); - final StreamController _onCreated = new StreamController(); - final StreamController _onModified = new StreamController(); - final StreamController _onUpdated = new StreamController(); - final StreamController _onRemoved = new StreamController(); + final StreamController _onRead = new StreamController(); + final StreamController _onCreated = new StreamController(); + final StreamController _onModified = new StreamController(); + final StreamController _onUpdated = new StreamController(); + final StreamController _onRemoved = new StreamController(); /// Fired on all events. Stream get onAllEvents => _onAllEvents.stream; @@ -255,19 +256,19 @@ class WebSocketsService extends Service { Stream get onIndexed => _onIndexed.stream; /// Fired on `read` events. - Stream get onRead => _onRead.stream; + Stream get onRead => _onRead.stream; /// Fired on `created` events. - Stream get onCreated => _onCreated.stream; + Stream get onCreated => _onCreated.stream; /// Fired on `modified` events. - Stream get onModified => _onModified.stream; + Stream get onModified => _onModified.stream; /// Fired on `updated` events. - Stream get onUpdated => _onUpdated.stream; + Stream get onUpdated => _onUpdated.stream; /// Fired on `removed` events. - Stream get onRemoved => _onRemoved.stream; + Stream get onRemoved => _onRemoved.stream; WebSocketsService(this.socket, this.app, this.path, {this.deserializer}) { listen(); @@ -287,12 +288,12 @@ class WebSocketsService extends Service { serialize(WebSocketAction action) => json.encode(action); /// Deserializes data from a [WebSocketEvent]. - deserialize(x) { - return deserializer != null ? deserializer(x) : x; + Data deserialize(x) { + return deserializer != null ? deserializer(x) : x as Data; } /// Deserializes the contents of an [event]. - WebSocketEvent transformEvent(WebSocketEvent event) { + WebSocketEvent transformEvent(WebSocketEvent event) { return event..data = deserialize(event.data); } @@ -300,7 +301,7 @@ class WebSocketsService extends Service { void listen() { app.onServiceEvent.listen((map) { if (map.containsKey(path)) { - var event = map[path]; + var event = map[path].cast(); var transformed = transformEvent(event).data; _onAllEvents.add(event); diff --git a/lib/browser.dart b/lib/browser.dart index 3e64fca2..a04f8be1 100644 --- a/lib/browser.dart +++ b/lib/browser.dart @@ -83,18 +83,18 @@ class WebSockets extends BaseWebSocketClient { } @override - BrowserWebSocketsService service(String path, - {Type type, AngelDeserializer deserializer}) { + BrowserWebSocketsService service(String path, + {Type type, AngelDeserializer deserializer}) { String uri = path.replaceAll(_straySlashes, ''); - return new BrowserWebSocketsService(socket, this, uri, + return new BrowserWebSocketsService(socket, this, uri, deserializer: deserializer); } } -class BrowserWebSocketsService extends WebSocketsService { +class BrowserWebSocketsService extends WebSocketsService { final Type type; BrowserWebSocketsService(WebSocketChannel socket, WebSockets app, String uri, - {this.type, AngelDeserializer deserializer}) + {this.type, AngelDeserializer deserializer}) : super(socket, app, uri, deserializer: deserializer); } diff --git a/lib/io.dart b/lib/io.dart index 02baef5d..4c5a7c9c 100644 --- a/lib/io.dart +++ b/lib/io.dart @@ -46,17 +46,17 @@ class WebSockets extends BaseWebSocketClient { } @override - IoWebSocketsService service(String path, - {Type type, AngelDeserializer deserializer}) { + IoWebSocketsService service(String path, + {Type type, AngelDeserializer deserializer}) { String uri = path.replaceAll(_straySlashes, ''); - return new IoWebSocketsService(socket, this, uri, type); + return new IoWebSocketsService(socket, this, uri, type); } @override serialize(x) => god.serialize(x); } -class IoWebSocketsService extends WebSocketsService { +class IoWebSocketsService extends WebSocketsService { final Type type; IoWebSocketsService( @@ -69,7 +69,7 @@ class IoWebSocketsService extends WebSocketsService { @override deserialize(x) { if (type != null && type != dynamic) { - return god.deserializeDatum(x, outputType: type); + return god.deserializeDatum(x, outputType: type) as Data; } else return super.deserialize(x); } diff --git a/lib/websocket_controller.dart b/lib/websocket_controller.dart index 7d911fbc..b214acbd 100644 --- a/lib/websocket_controller.dart +++ b/lib/websocket_controller.dart @@ -68,7 +68,8 @@ class WebSocketController extends Controller { socket.onData.listen((data) => onData(data, socket)); socket.onAction.listen((WebSocketAction action) async { - socket.request.container.registerSingleton(action); + var container = socket.request.container.createChild(); + container.registerSingleton(action); try { await onAction(action, socket); @@ -77,7 +78,7 @@ class WebSocketController extends Controller { var methodMirror = _handlers[action.eventName]; var fn = instanceMirror.getField(methodMirror.simpleName).reflectee; return app.runContained( - fn as Function, socket.request, socket.response); + fn as Function, socket.request, socket.response, container); } } catch (e, st) { ws.catchError(e, st, socket); diff --git a/pubspec.yaml b/pubspec.yaml index 1952d638..4c1670f4 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -2,7 +2,7 @@ name: angel_websocket description: WebSocket plugin for Angel. environment: sdk: ">=2.0.0-dev <3.0.0" -version: 2.0.0-alpha.1 +version: 2.0.0-alpha.2 author: Tobe O homepage: https://github.com/angel-dart/angel_websocket dependencies: