2.0.0-alpha.2

This commit is contained in:
Tobe O 2018-10-21 04:15:51 -04:00
parent 11b7b6159e
commit 6674353a53
7 changed files with 49 additions and 36 deletions

View file

@ -1,3 +1,6 @@
# 2.0.0-alpha.2
* Updated for the next version of `angel_client`.
# 2.0.0-alpha.1 # 2.0.0-alpha.1
* Refactorings for updated Angel 2 versions. * Refactorings for updated Angel 2 versions.
* Remove `package:dart2_constant`. * Remove `package:dart2_constant`.

View file

@ -39,16 +39,24 @@ const List<String> EVENTS = const [
]; ];
/// A notification from the server that something has occurred. /// A notification from the server that something has occurred.
class WebSocketEvent { class WebSocketEvent<Data> {
String eventName; String eventName;
var data; Data data;
WebSocketEvent({String this.eventName, this.data}); WebSocketEvent({String this.eventName, this.data});
factory WebSocketEvent.fromJson(Map data) => new WebSocketEvent( 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<T> cast<T>() {
if (T == Data) {
return this as WebSocketEvent<T>;
} else {
return new WebSocketEvent<T>(eventName: eventName, data: data as T);
}
}
Map<String, dynamic> toJson() {
return {'eventName': eventName, 'data': data}; return {'eventName': eventName, 'data': data};
} }
} }

View file

@ -133,10 +133,11 @@ abstract class BaseWebSocketClient extends BaseAngelClient {
Future<WebSocketChannel> getConnectedWebSocket(); Future<WebSocketChannel> getConnectedWebSocket();
@override @override
WebSocketsService service(String path, WebSocketsService<Id, Data> service<Id, Data>(String path,
{Type type, AngelDeserializer deserializer}) { {Type type, AngelDeserializer<Data> deserializer}) {
String uri = path.toString().replaceAll(_straySlashes, ''); String uri = path.toString().replaceAll(_straySlashes, '');
return new WebSocketsService(socket, this, uri, deserializer: deserializer); return new WebSocketsService<Id, Data>(socket, this, uri,
deserializer: deserializer);
} }
/// Starts listening for data. /// Starts listening for data.
@ -225,13 +226,13 @@ abstract class BaseWebSocketClient extends BaseAngelClient {
} }
/// A [Service] that asynchronously interacts with the server. /// A [Service] that asynchronously interacts with the server.
class WebSocketsService extends Service { class WebSocketsService<Id, Data> extends Service<Id, Data> {
/// The [BaseWebSocketClient] that spawned this service. /// The [BaseWebSocketClient] that spawned this service.
@override @override
final BaseWebSocketClient app; final BaseWebSocketClient app;
/// Used to deserialize JSON into typed data. /// Used to deserialize JSON into typed data.
final AngelDeserializer deserializer; final AngelDeserializer<Data> deserializer;
/// The [WebSocketChannel] to listen to, and send data across. /// The [WebSocketChannel] to listen to, and send data across.
final WebSocketChannel socket; final WebSocketChannel socket;
@ -242,11 +243,11 @@ class WebSocketsService extends Service {
final StreamController<WebSocketEvent> _onAllEvents = final StreamController<WebSocketEvent> _onAllEvents =
new StreamController<WebSocketEvent>(); new StreamController<WebSocketEvent>();
final StreamController _onIndexed = new StreamController(); final StreamController _onIndexed = new StreamController();
final StreamController _onRead = new StreamController(); final StreamController<Data> _onRead = new StreamController<Data>();
final StreamController _onCreated = new StreamController(); final StreamController<Data> _onCreated = new StreamController<Data>();
final StreamController _onModified = new StreamController(); final StreamController<Data> _onModified = new StreamController<Data>();
final StreamController _onUpdated = new StreamController(); final StreamController<Data> _onUpdated = new StreamController<Data>();
final StreamController _onRemoved = new StreamController(); final StreamController<Data> _onRemoved = new StreamController<Data>();
/// Fired on all events. /// Fired on all events.
Stream<WebSocketEvent> get onAllEvents => _onAllEvents.stream; Stream<WebSocketEvent> get onAllEvents => _onAllEvents.stream;
@ -255,19 +256,19 @@ class WebSocketsService extends Service {
Stream get onIndexed => _onIndexed.stream; Stream get onIndexed => _onIndexed.stream;
/// Fired on `read` events. /// Fired on `read` events.
Stream get onRead => _onRead.stream; Stream<Data> get onRead => _onRead.stream;
/// Fired on `created` events. /// Fired on `created` events.
Stream get onCreated => _onCreated.stream; Stream<Data> get onCreated => _onCreated.stream;
/// Fired on `modified` events. /// Fired on `modified` events.
Stream get onModified => _onModified.stream; Stream<Data> get onModified => _onModified.stream;
/// Fired on `updated` events. /// Fired on `updated` events.
Stream get onUpdated => _onUpdated.stream; Stream<Data> get onUpdated => _onUpdated.stream;
/// Fired on `removed` events. /// Fired on `removed` events.
Stream get onRemoved => _onRemoved.stream; Stream<Data> get onRemoved => _onRemoved.stream;
WebSocketsService(this.socket, this.app, this.path, {this.deserializer}) { WebSocketsService(this.socket, this.app, this.path, {this.deserializer}) {
listen(); listen();
@ -287,12 +288,12 @@ class WebSocketsService extends Service {
serialize(WebSocketAction action) => json.encode(action); serialize(WebSocketAction action) => json.encode(action);
/// Deserializes data from a [WebSocketEvent]. /// Deserializes data from a [WebSocketEvent].
deserialize(x) { Data deserialize(x) {
return deserializer != null ? deserializer(x) : x; return deserializer != null ? deserializer(x) : x as Data;
} }
/// Deserializes the contents of an [event]. /// Deserializes the contents of an [event].
WebSocketEvent transformEvent(WebSocketEvent event) { WebSocketEvent<Data> transformEvent(WebSocketEvent<Data> event) {
return event..data = deserialize(event.data); return event..data = deserialize(event.data);
} }
@ -300,7 +301,7 @@ class WebSocketsService extends Service {
void listen() { void listen() {
app.onServiceEvent.listen((map) { app.onServiceEvent.listen((map) {
if (map.containsKey(path)) { if (map.containsKey(path)) {
var event = map[path]; var event = map[path].cast<Data>();
var transformed = transformEvent(event).data; var transformed = transformEvent(event).data;
_onAllEvents.add(event); _onAllEvents.add(event);

View file

@ -83,18 +83,18 @@ class WebSockets extends BaseWebSocketClient {
} }
@override @override
BrowserWebSocketsService service(String path, BrowserWebSocketsService<Id, Data> service<Id, Data>(String path,
{Type type, AngelDeserializer deserializer}) { {Type type, AngelDeserializer<Data> deserializer}) {
String uri = path.replaceAll(_straySlashes, ''); String uri = path.replaceAll(_straySlashes, '');
return new BrowserWebSocketsService(socket, this, uri, return new BrowserWebSocketsService<Id, Data>(socket, this, uri,
deserializer: deserializer); deserializer: deserializer);
} }
} }
class BrowserWebSocketsService extends WebSocketsService { class BrowserWebSocketsService<Id, Data> extends WebSocketsService<Id, Data> {
final Type type; final Type type;
BrowserWebSocketsService(WebSocketChannel socket, WebSockets app, String uri, BrowserWebSocketsService(WebSocketChannel socket, WebSockets app, String uri,
{this.type, AngelDeserializer deserializer}) {this.type, AngelDeserializer<Data> deserializer})
: super(socket, app, uri, deserializer: deserializer); : super(socket, app, uri, deserializer: deserializer);
} }

View file

@ -46,17 +46,17 @@ class WebSockets extends BaseWebSocketClient {
} }
@override @override
IoWebSocketsService service(String path, IoWebSocketsService<Id, Data> service<Id, Data>(String path,
{Type type, AngelDeserializer deserializer}) { {Type type, AngelDeserializer<Data> deserializer}) {
String uri = path.replaceAll(_straySlashes, ''); String uri = path.replaceAll(_straySlashes, '');
return new IoWebSocketsService(socket, this, uri, type); return new IoWebSocketsService<Id, Data>(socket, this, uri, type);
} }
@override @override
serialize(x) => god.serialize(x); serialize(x) => god.serialize(x);
} }
class IoWebSocketsService extends WebSocketsService { class IoWebSocketsService<Id, Data> extends WebSocketsService<Id, Data> {
final Type type; final Type type;
IoWebSocketsService( IoWebSocketsService(
@ -69,7 +69,7 @@ class IoWebSocketsService extends WebSocketsService {
@override @override
deserialize(x) { deserialize(x) {
if (type != null && type != dynamic) { if (type != null && type != dynamic) {
return god.deserializeDatum(x, outputType: type); return god.deserializeDatum(x, outputType: type) as Data;
} else } else
return super.deserialize(x); return super.deserialize(x);
} }

View file

@ -68,7 +68,8 @@ class WebSocketController extends Controller {
socket.onData.listen((data) => onData(data, socket)); socket.onData.listen((data) => onData(data, socket));
socket.onAction.listen((WebSocketAction action) async { socket.onAction.listen((WebSocketAction action) async {
socket.request.container.registerSingleton<WebSocketAction>(action); var container = socket.request.container.createChild();
container.registerSingleton<WebSocketAction>(action);
try { try {
await onAction(action, socket); await onAction(action, socket);
@ -77,7 +78,7 @@ class WebSocketController extends Controller {
var methodMirror = _handlers[action.eventName]; var methodMirror = _handlers[action.eventName];
var fn = instanceMirror.getField(methodMirror.simpleName).reflectee; var fn = instanceMirror.getField(methodMirror.simpleName).reflectee;
return app.runContained( return app.runContained(
fn as Function, socket.request, socket.response); fn as Function, socket.request, socket.response, container);
} }
} catch (e, st) { } catch (e, st) {
ws.catchError(e, st, socket); ws.catchError(e, st, socket);

View file

@ -2,7 +2,7 @@ name: angel_websocket
description: WebSocket plugin for Angel. description: WebSocket plugin for Angel.
environment: environment:
sdk: ">=2.0.0-dev <3.0.0" sdk: ">=2.0.0-dev <3.0.0"
version: 2.0.0-alpha.1 version: 2.0.0-alpha.2
author: Tobe O <thosakwe@gmail.com> author: Tobe O <thosakwe@gmail.com>
homepage: https://github.com/angel-dart/angel_websocket homepage: https://github.com/angel-dart/angel_websocket
dependencies: dependencies: