This commit is contained in:
thosakwe 2017-06-30 19:09:03 -04:00
parent ff5c2a50a3
commit 1108997817
8 changed files with 69 additions and 17 deletions

View file

@ -1,5 +1,5 @@
# angel_websocket
[![1.0.7](https://img.shields.io/badge/pub-1.0.7-brightgreen.svg)](https://pub.dartlang.org/packages/angel_websocket)
[![Pub](https://img.shields.io/pub/v/angel_websocket.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.
@ -36,6 +36,10 @@ synchronously or asynchronously.
myService.properties['ws:filter'] = (HookedServiceEvent e, WebSocketContext socket) async {
return true;
}
myService.index({
'ws:filter': (e, socket) => ...;
});
```
**Adding Handlers within a Controller**

View file

@ -133,10 +133,10 @@ abstract class BaseWebSocketClient extends BaseAngelClient {
Future<WebSocketChannel> getConnectedWebSocket();
@override
BaseWebSocketService service<T>(String path,
WebSocketsService service<T>(String path,
{Type type, AngelDeserializer deserializer}) {
String uri = path.toString().replaceAll(_straySlashes, '');
return new BaseWebSocketService(socket, this, uri,
return new WebSocketsService(socket, this, uri,
deserializer: deserializer);
}
@ -225,7 +225,7 @@ abstract class BaseWebSocketClient extends BaseAngelClient {
}
/// A [Service] that asynchronously interacts with the server.
class BaseWebSocketService extends Service {
class WebSocketsService extends Service {
/// The [BaseWebSocketClient] that spawned this service.
@override
final BaseWebSocketClient app;
@ -275,7 +275,7 @@ class BaseWebSocketService extends Service {
/// Fired on `removed` events.
Stream<WebSocketEvent> get onRemoved => _onRemoved.stream;
BaseWebSocketService(this.socket, this.app, this.path, {this.deserializer}) {
WebSocketsService(this.socket, this.app, this.path, {this.deserializer}) {
listen();
}

View file

@ -15,7 +15,7 @@ final RegExp _straySlashes = new RegExp(r"(^/)|(/+$)");
/// Queries an Angel server via WebSockets.
class WebSockets extends BaseWebSocketClient {
final List<WebSocketsService> _services = [];
final List<BrowserWebSocketsService> _services = [];
WebSockets(String path) : super(new http.BrowserClient(), path);
@ -80,17 +80,17 @@ class WebSockets extends BaseWebSocketClient {
}
@override
WebSocketsService service<T>(String path,
BrowserWebSocketsService service<T>(String path,
{Type type, AngelDeserializer deserializer}) {
String uri = path.replaceAll(_straySlashes, '');
return new WebSocketsService(socket, this, uri, deserializer: deserializer);
return new BrowserWebSocketsService(socket, this, uri, deserializer: deserializer);
}
}
class WebSocketsService extends BaseWebSocketService {
class BrowserWebSocketsService extends WebSocketsService {
final Type type;
WebSocketsService(WebSocketChannel socket, Angel app, String uri,
BrowserWebSocketsService(WebSocketChannel socket, Angel app, String uri,
{this.type, AngelDeserializer deserializer})
: super(socket, app, uri, deserializer: deserializer);
}

46
lib/flutter.dart Normal file
View file

@ -0,0 +1,46 @@
/// Flutter-compatible WebSocket client library for the Angel framework.
library angel_websocket.flutter;
import 'dart:async';
import 'dart:io';
import 'package:angel_client/angel_client.dart';
import 'package:http/http.dart' as http;
import 'package:web_socket_channel/web_socket_channel.dart';
import 'package:web_socket_channel/io.dart';
import 'angel_websocket.dart';
import 'base_websocket_client.dart';
export 'package:angel_client/angel_client.dart';
export 'angel_websocket.dart';
final RegExp _straySlashes = new RegExp(r"(^/)|(/+$)");
/// Queries an Angel server via WebSockets.
class WebSockets extends BaseWebSocketClient {
final List<WebSocketsService> _services = [];
WebSockets(String path) : super(new http.Client(), path);
@override
Stream<String> authenticateViaPopup(String url, {String eventName: 'token'}) {
throw new UnimplementedError(
'Opening popup windows is not supported in the `dart:io` client.');
}
@override
Future close() {
for (var service in _services) {
service.close();
}
return super.close();
}
@override
Future<WebSocketChannel> getConnectedWebSocket() async {
var socket = await WebSocket.connect(basePath,
headers: authToken?.isNotEmpty == true
? {'Authorization': 'Bearer $authToken'}
: {});
return new IOWebSocketChannel(socket);
}
}

View file

@ -17,7 +17,7 @@ final RegExp _straySlashes = new RegExp(r"(^/)|(/+$)");
/// Queries an Angel server via WebSockets.
class WebSockets extends BaseWebSocketClient {
final List<WebSocketsService> _services = [];
final List<IoWebSocketsService> _services = [];
WebSockets(String path) : super(new http.Client(), path);
@ -46,20 +46,20 @@ class WebSockets extends BaseWebSocketClient {
}
@override
WebSocketsService service<T>(String path,
IoWebSocketsService service<T>(String path,
{Type type, AngelDeserializer deserializer}) {
String uri = path.replaceAll(_straySlashes, '');
return new WebSocketsService(socket, this, uri, T != dynamic ? T : type);
return new IoWebSocketsService(socket, this, uri, T != dynamic ? T : type);
}
@override
serialize(x) => god.serialize(x);
}
class WebSocketsService extends BaseWebSocketService {
class IoWebSocketsService extends WebSocketsService {
final Type type;
WebSocketsService(WebSocketChannel socket, Angel app, String uri, this.type)
IoWebSocketsService(WebSocketChannel socket, Angel app, String uri, this.type)
: super(socket, app, uri);
@override

View file

@ -107,6 +107,8 @@ class AngelWebSocket extends AngelPlugin {
_filter(WebSocketContext socket) {
if (e.service.properties.containsKey('ws:filter'))
return e.service.properties['ws:filter'](e, socket);
else if (e.params != null && e.params.containsKey('ws:filter'))
return e.params['ws:filter'](e, socket);
else
return true;
}

View file

@ -37,7 +37,7 @@ class WebSocketController extends Controller {
@override
Future call(Angel app) async {
await super.call(app);
if (findExpose() != null) await super.call(app);
InstanceMirror instanceMirror = reflect(this);
ClassMirror classMirror = reflectClass(this.runtimeType);

View file

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