+7
This commit is contained in:
parent
f69c7869c8
commit
64cf7a6534
5 changed files with 28 additions and 14 deletions
|
@ -1,5 +1,5 @@
|
|||
# angel_websocket
|
||||
[![1.0.0-dev+6](https://img.shields.io/badge/version-1.0.0--dev+6-red.svg)](https://pub.dartlang.org/packages/angel_websocket)
|
||||
[![1.0.0-dev+7](https://img.shields.io/badge/version-1.0.0--dev+7-red.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.
|
||||
|
|
|
@ -14,6 +14,9 @@ export 'angel_websocket.dart';
|
|||
part 'websocket_context.dart';
|
||||
part 'websocket_controller.dart';
|
||||
|
||||
/// Used to assign routes to a given handler.
|
||||
typedef AngelWebSocketRegisterer(Angel app, RequestHandler handler);
|
||||
|
||||
/// Broadcasts events from [HookedService]s, and handles incoming [WebSocketAction]s.
|
||||
class AngelWebSocket extends AngelPlugin {
|
||||
Angel _app;
|
||||
|
@ -31,6 +34,9 @@ class AngelWebSocket extends AngelPlugin {
|
|||
/// Include debug information, and send error information across WebSockets.
|
||||
final bool debug;
|
||||
|
||||
/// Registers this instance as a route on the server.
|
||||
final AngelWebSocketRegisterer register;
|
||||
|
||||
/// A list of clients currently connected to this server via WebSockets.
|
||||
List<WebSocket> get clients => new List.unmodifiable(_clients);
|
||||
|
||||
|
@ -53,7 +59,7 @@ class AngelWebSocket extends AngelPlugin {
|
|||
/// Fired when a user disconnects.
|
||||
Stream<WebSocketContext> get onDisconnection => _onDisconnect.stream;
|
||||
|
||||
AngelWebSocket({this.endpoint: '/ws', this.debug: false});
|
||||
AngelWebSocket({this.endpoint: '/ws', this.debug: false, this.register});
|
||||
|
||||
_batchEvent(String path) {
|
||||
return (HookedServiceEvent e) async {
|
||||
|
@ -79,12 +85,12 @@ class AngelWebSocket extends AngelPlugin {
|
|||
var split = action.eventName.split("::");
|
||||
|
||||
if (split.length < 2)
|
||||
return socket.sendError(new AngelHttpException.BadRequest());
|
||||
return socket.sendError(new AngelHttpException.badRequest());
|
||||
|
||||
var service = _app.service(split[0]);
|
||||
|
||||
if (service == null)
|
||||
return socket.sendError(new AngelHttpException.NotFound(
|
||||
return socket.sendError(new AngelHttpException.notFound(
|
||||
message: "No service \"${split[0]}\" exists."));
|
||||
|
||||
var actionName = split[1];
|
||||
|
@ -118,7 +124,7 @@ class AngelWebSocket extends AngelPlugin {
|
|||
eventName: "${split[0]}::" + EVENT_REMOVED,
|
||||
data: await service.remove(action.id, params));
|
||||
} else {
|
||||
return socket.sendError(new AngelHttpException.MethodNotAllowed(
|
||||
return socket.sendError(new AngelHttpException.methodNotAllowed(
|
||||
message: "Method Not Allowed: \"$actionName\""));
|
||||
}
|
||||
} catch (e, st) {
|
||||
|
@ -160,7 +166,7 @@ class AngelWebSocket extends AngelPlugin {
|
|||
if (action.eventName == null ||
|
||||
action.eventName is! String ||
|
||||
action.eventName.isEmpty) {
|
||||
throw new AngelHttpException.BadRequest();
|
||||
throw new AngelHttpException.badRequest();
|
||||
}
|
||||
|
||||
if (fromJson is Map && fromJson.containsKey("eventName")) {
|
||||
|
@ -225,9 +231,9 @@ class AngelWebSocket extends AngelPlugin {
|
|||
wireAllServices(app);
|
||||
});
|
||||
|
||||
app.get(endpoint, (RequestContext req, ResponseContext res) async {
|
||||
handler(RequestContext req, ResponseContext res) async {
|
||||
if (!WebSocketTransformer.isUpgradeRequest(req.io))
|
||||
throw new AngelHttpException.BadRequest();
|
||||
throw new AngelHttpException.badRequest();
|
||||
|
||||
res
|
||||
..willCloseItself = true
|
||||
|
@ -252,6 +258,15 @@ class AngelWebSocket extends AngelPlugin {
|
|||
_onDisconnect.add(socket);
|
||||
_clients.remove(ws);
|
||||
}, cancelOnError: true);
|
||||
});
|
||||
}
|
||||
|
||||
_register() {
|
||||
if (register != null)
|
||||
return register(app, handler);
|
||||
else
|
||||
app.get(endpoint, handler);
|
||||
}
|
||||
|
||||
await _register();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -63,7 +63,6 @@ class WebSocketController extends Controller {
|
|||
try {
|
||||
var methodMirror = _handlers[action.eventName];
|
||||
var fn = instanceMirror.getField(methodMirror.simpleName).reflectee;
|
||||
|
||||
return app.runContained(fn, socket.request, socket.response);
|
||||
} catch (e, st) {
|
||||
// Send an error
|
||||
|
|
|
@ -2,7 +2,7 @@ name: angel_websocket
|
|||
description: WebSocket plugin for Angel
|
||||
environment:
|
||||
sdk: ">=1.19.0"
|
||||
version: 1.0.0-dev+6
|
||||
version: 1.0.0-dev+7
|
||||
author: Tobe O <thosakwe@gmail.com>
|
||||
homepage: https://github.com/angel-dart/angel_websocket
|
||||
dependencies:
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import 'dart:io';
|
||||
import 'package:angel_diagnostics/angel_diagnostics.dart' as srv;
|
||||
import 'package:angel_diagnostics/angel_diagnostics.dart';
|
||||
import 'package:angel_framework/angel_framework.dart' as srv;
|
||||
import 'package:angel_websocket/io.dart' as ws;
|
||||
import 'package:angel_websocket/server.dart' as srv;
|
||||
|
@ -22,8 +22,8 @@ main() {
|
|||
});
|
||||
|
||||
await app.configure(websockets);
|
||||
server =
|
||||
await new srv.DiagnosticsServer(app, new File('log.txt')).startServer();
|
||||
await app.configure(logRequests(new File('log.txt')));
|
||||
server = await app.startServer();
|
||||
url = 'ws://${server.address.address}:${server.port}/ws';
|
||||
|
||||
client = new ws.WebSockets(url);
|
||||
|
|
Loading…
Reference in a new issue