1.0.8
This commit is contained in:
parent
ff5c2a50a3
commit
1108997817
8 changed files with 69 additions and 17 deletions
|
@ -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**
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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
46
lib/flutter.dart
Normal 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);
|
||||
}
|
||||
}
|
10
lib/io.dart
10
lib/io.dart
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in a new issue