DDC
This commit is contained in:
parent
6eed138927
commit
75cdcc8853
8 changed files with 33 additions and 10 deletions
|
@ -90,8 +90,8 @@ class AngelWebSocket {
|
||||||
event.eventName = "$path::${event.eventName}";
|
event.eventName = "$path::${event.eventName}";
|
||||||
|
|
||||||
_filter(WebSocketContext socket) {
|
_filter(WebSocketContext socket) {
|
||||||
if (e.service.properties.containsKey('ws:filter'))
|
if (e.service.configuration.containsKey('ws:filter'))
|
||||||
return e.service.properties['ws:filter'](e, socket);
|
return e.service.configuration['ws:filter'](e, socket);
|
||||||
else if (e.params != null && e.params.containsKey('ws:filter'))
|
else if (e.params != null && e.params.containsKey('ws:filter'))
|
||||||
return e.params['ws:filter'](e, socket);
|
return e.params['ws:filter'](e, socket);
|
||||||
else
|
else
|
||||||
|
|
|
@ -9,13 +9,15 @@ class ExposeWs {
|
||||||
|
|
||||||
/// A special controller that also supports WebSockets.
|
/// A special controller that also supports WebSockets.
|
||||||
class WebSocketController extends Controller {
|
class WebSocketController extends Controller {
|
||||||
|
final AngelWebSocket ws;
|
||||||
|
|
||||||
Map<String, MethodMirror> _handlers = {};
|
Map<String, MethodMirror> _handlers = {};
|
||||||
Map<String, Symbol> _handlerSymbols = {};
|
Map<String, Symbol> _handlerSymbols = {};
|
||||||
|
|
||||||
/// The plug-in instance powering this controller.
|
/// The plug-in instance powering this controller.
|
||||||
AngelWebSocket plugin;
|
AngelWebSocket plugin;
|
||||||
|
|
||||||
WebSocketController() : super();
|
WebSocketController(this.ws) : super();
|
||||||
|
|
||||||
/// Sends an event to all clients.
|
/// Sends an event to all clients.
|
||||||
void broadcast(String eventName, data, {filter(WebSocketContext socket)}) {
|
void broadcast(String eventName, data, {filter(WebSocketContext socket)}) {
|
||||||
|
@ -36,8 +38,8 @@ class WebSocketController extends Controller {
|
||||||
onData(data, WebSocketContext socket) {}
|
onData(data, WebSocketContext socket) {}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future call(Angel app) async {
|
Future configureServer(Angel app) async {
|
||||||
if (findExpose() != null) await super.call(app);
|
if (findExpose() != null) await super.configureServer(app);
|
||||||
|
|
||||||
InstanceMirror instanceMirror = reflect(this);
|
InstanceMirror instanceMirror = reflect(this);
|
||||||
ClassMirror classMirror = reflectClass(this.runtimeType);
|
ClassMirror classMirror = reflectClass(this.runtimeType);
|
||||||
|
@ -55,8 +57,6 @@ class WebSocketController extends Controller {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
AngelWebSocket ws = app.container.make(AngelWebSocket);
|
|
||||||
|
|
||||||
ws.onConnection.listen((socket) async {
|
ws.onConnection.listen((socket) async {
|
||||||
socket.request
|
socket.request
|
||||||
..inject('socket', socket)
|
..inject('socket', socket)
|
||||||
|
|
|
@ -2,7 +2,7 @@ name: angel_websocket
|
||||||
description: WebSocket plugin for Angel.
|
description: WebSocket plugin for Angel.
|
||||||
environment:
|
environment:
|
||||||
sdk: ">=1.19.0"
|
sdk: ">=1.19.0"
|
||||||
version: 1.1.0-alpha+1
|
version: 1.1.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:
|
||||||
|
|
|
@ -20,6 +20,8 @@ const Game JOHN_VS_BOB = const Game(playerOne: 'John', playerTwo: 'Bob');
|
||||||
|
|
||||||
@Expose('/game')
|
@Expose('/game')
|
||||||
class GameController extends WebSocketController {
|
class GameController extends WebSocketController {
|
||||||
|
GameController(AngelWebSocket ws) : super(ws);
|
||||||
|
|
||||||
@ExposeWs('search')
|
@ExposeWs('search')
|
||||||
search(WebSocketContext socket) async {
|
search(WebSocketContext socket) async {
|
||||||
print('User is searching for a game...');
|
print('User is searching for a game...');
|
||||||
|
|
|
@ -23,7 +23,7 @@ main() {
|
||||||
|
|
||||||
await app.configure(websockets.configureServer);
|
await app.configure(websockets.configureServer);
|
||||||
app.all('/ws', websockets.handleRequest);
|
app.all('/ws', websockets.handleRequest);
|
||||||
await app.configure(new GameController());
|
await app.configure(new GameController(websockets).configureServer);
|
||||||
app.logger = new Logger('angel_auth')..onRecord.listen(print);
|
app.logger = new Logger('angel_auth')..onRecord.listen(print);
|
||||||
|
|
||||||
server = await app.startServer();
|
server = await app.startServer();
|
||||||
|
|
|
@ -13,7 +13,7 @@ class Todo extends Model {
|
||||||
|
|
||||||
class TodoService extends TypedService<Todo> {
|
class TodoService extends TypedService<Todo> {
|
||||||
TodoService() : super(new MapService()) {
|
TodoService() : super(new MapService()) {
|
||||||
properties['ws:filter'] = (HookedServiceEvent e, WebSocketContext socket) {
|
configuration['ws:filter'] = (HookedServiceEvent e, WebSocketContext socket) {
|
||||||
print('Hello, service filter world!');
|
print('Hello, service filter world!');
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
9
web/index.html
Normal file
9
web/index.html
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Client</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script src="main.dart.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
12
web/main.dart
Normal file
12
web/main.dart
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
import 'dart:html';
|
||||||
|
import 'package:angel_websocket/browser.dart';
|
||||||
|
|
||||||
|
/// Dummy app to ensure client works with DDC.
|
||||||
|
main() {
|
||||||
|
var app = new WebSockets(window.location.origin);
|
||||||
|
window.alert(app.basePath);
|
||||||
|
|
||||||
|
app.connect().catchError((_) {
|
||||||
|
window.alert('no websocket');
|
||||||
|
});
|
||||||
|
}
|
Loading…
Reference in a new issue