Skip to content

Commit

Permalink
Reformat code as per Dart guides
Browse files Browse the repository at this point in the history
  • Loading branch information
lvivski committed May 11, 2021
1 parent bb94a9c commit d897e32
Show file tree
Hide file tree
Showing 11 changed files with 102 additions and 115 deletions.
12 changes: 6 additions & 6 deletions lib/socket.dart
Expand Up @@ -10,23 +10,23 @@ class Socket implements SocketBase {
final WebSocket _ws;
Stream _messages;

Socket(String url) :
this._ws = new WebSocket(url) {
Socket(String url) : this._ws = new WebSocket(url) {
_messages = _messageController.stream.asBroadcastStream();
_ws.onMessage.listen((e) {
var msg = new Message.fromPacket(e.data);
_messageController.add(msg);
});
}

void send(String messageName, [ data ]) {
void send(String messageName, [data]) {
var message = new Message(messageName, data);
_ws.send(message.toPacket());
}

Stream on(String messageName) {
return _messages.where((msg) => msg.name == messageName).map((msg) =>
msg.data);
return _messages
.where((msg) => msg.name == messageName)
.map((msg) => msg.data);
}

Stream get onOpen => _ws.onOpen;
Expand All @@ -36,4 +36,4 @@ class Socket implements SocketBase {
void close([int status, String reason]) {
_ws.close(status, reason);
}
}
}
2 changes: 1 addition & 1 deletion lib/src/message.dart
Expand Up @@ -32,4 +32,4 @@ class Message {
}
return '$name:${jsonEncode(data)}';
}
}
}
64 changes: 31 additions & 33 deletions lib/src/request.dart
Expand Up @@ -11,7 +11,8 @@ class Request {
bool accepts(String type) =>
_request.headers[HttpHeaders.acceptHeader]
.where((name) => name.split(',').indexOf(type) > 0)
.length > 0;
.length >
0;

bool isMime(String type, {loose: false}) =>
_request.headers[HttpHeaders.contentTypeHeader]
Expand All @@ -25,8 +26,7 @@ class Request {
Map<String, String> get query => _request.uri.queryParameters;
Map<String, String> params;

List<Cookie> get cookies =>
_request.cookies.map((Cookie cookie) {
List<Cookie> get cookies => _request.cookies.map((Cookie cookie) {
cookie.name = Uri.decodeQueryComponent(cookie.name);
cookie.value = Uri.decodeQueryComponent(cookie.value);
return cookie;
Expand All @@ -51,45 +51,43 @@ class Request {
return null;
}

Future<Map> payload({ Encoding enc: utf8 }) {
Future<Map> payload({Encoding enc: utf8}) {
var completer = new Completer<Map>();

if (isMime('application/x-www-form-urlencoded')) {
const AsciiDecoder().bind(_request)
.listen((content) {
final payload = new Map.fromIterable(
content.split('&').map((kvs) => kvs.split('=')),
key: (kv) => Uri.decodeQueryComponent(kv[0], encoding: enc),
value: (kv) => Uri.decodeQueryComponent(kv[1], encoding: enc)
);
completer.complete(payload);
});
const AsciiDecoder().bind(_request).listen((content) {
final payload = new Map.fromIterable(
content.split('&').map((kvs) => kvs.split('=')),
key: (kv) => Uri.decodeQueryComponent(kv[0], encoding: enc),
value: (kv) => Uri.decodeQueryComponent(kv[1], encoding: enc));
completer.complete(payload);
});
} else if (isMime('multipart/form-data', loose: true)) {
var boundary = _request.headers.contentType.parameters['boundary'];
final payload = new Map();
new MimeMultipartTransformer(boundary).bind(_request)
new MimeMultipartTransformer(boundary)
.bind(_request)
.map(HttpMultipartFormData.parse)
.listen((HttpMultipartFormData formData) {
var parameters = formData.contentDisposition.parameters;
formData.listen((data) {
if (formData.contentType != null) {
data = new Upload(
parameters['filename'],
formData.contentType.mimeType,
formData.contentTransferEncoding.value,
data);
}
payload[parameters['name']] = data;
});
}, onDone: () {
completer.complete(payload);
});
var parameters = formData.contentDisposition.parameters;
formData.listen((data) {
if (formData.contentType != null) {
data = new Upload(
parameters['filename'],
formData.contentType.mimeType,
formData.contentTransferEncoding.value,
data);
}
payload[parameters['name']] = data;
});
}, onDone: () {
completer.complete(payload);
});
} else if (isMime('application/json')) {
const Utf8Decoder().bind(_request)
.listen((content) {
final payload = jsonDecode(content);
completer.complete(payload);
});
const Utf8Decoder().bind(_request).listen((content) {
final payload = jsonDecode(content);
completer.complete(payload);
});
}
return completer.future;
}
Expand Down
19 changes: 9 additions & 10 deletions lib/src/response.dart
Expand Up @@ -19,8 +19,8 @@ class Response {

Response type(String contentType) => set('Content-Type', contentType);

Response cache(String cacheType, [Map<String,String> options]) {
if(options == null) {
Response cache(String cacheType, [Map<String, String> options]) {
if (options == null) {
options = {};
}
StringBuffer value = new StringBuffer(cacheType);
Expand All @@ -37,9 +37,7 @@ class Response {

Response cookie(String name, String val, [Map options]) {
var cookie = new Cookie(
Uri.encodeQueryComponent(name),
Uri.encodeQueryComponent(val)
),
Uri.encodeQueryComponent(name), Uri.encodeQueryComponent(val)),
cookieMirror = reflect(cookie);

if (options != null) {
Expand All @@ -53,7 +51,7 @@ class Response {
}

Response deleteCookie(String name) {
Map options = { 'expires': 'Thu, 01-Jan-70 00:00:01 GMT', 'path': '/' };
Map options = {'expires': 'Thu, 01-Jan-70 00:00:01 GMT', 'path': '/'};
return cookie(name, '', options);
}

Expand Down Expand Up @@ -85,17 +83,18 @@ class Response {
Future sendFile(String path) {
var file = new File(path);

return file.exists()
return file
.exists()
.then((found) => found ? found : throw 404)
.then((_) => file.length())
.then((length) => header('Content-Length', length))
.then((_) => mime(file.path))
.then((_) => file.openRead().pipe(_response))
.then((_) => _response.close())
.catchError((_) {
_response.statusCode = HttpStatus.notFound;
return _response.close();
}, test: (e) => e == 404);
_response.statusCode = HttpStatus.notFound;
return _response.close();
}, test: (e) => e == 404);
}

Future close() {
Expand Down
65 changes: 28 additions & 37 deletions lib/src/route.dart
Expand Up @@ -4,53 +4,48 @@ class Route {
final String _method;
final Map _path;
final StreamController<Request> _requestController = new StreamController();
final StreamController<HttpRequest> _socketController = new StreamController();
final StreamController<HttpRequest> _socketController =
new StreamController();
Stream<Request> requestStream;
Stream<Socket> socketStream;

Route(String method, path, { List<String> keys })
:
_method = method.toUpperCase(),
Route(String method, path, {List<String> keys})
: _method = method.toUpperCase(),
_path = _normalize(path, keys: keys) {
requestStream = _requestController.stream;
}

Route.ws(dynamic path, { List<String> keys })
:
_method = 'WS',
_path = _normalize(path, keys: keys) {
socketStream = _socketController.stream
Route.ws(dynamic path, {List<String> keys})
: _method = 'WS',
_path = _normalize(path, keys: keys) {
socketStream = _socketController.stream
.transform(new WebSocketTransformer())
.map((WebSocket ws) => new Socket(ws));
}
}

bool match(HttpRequest req) {
return ((_method == req.method || _method == 'WS')
&& _path['regexp'].hasMatch(req.uri.path));
return ((_method == req.method || _method == 'WS') &&
_path['regexp'].hasMatch(req.uri.path));
}

void handle(HttpRequest req) {
if (_method == 'WS') {
_socketController.add(req);
} else {
var request = new Request(req);
var request = new Request(req);
request.params = _parseParams(req.uri.path, _path);
request.response = new Response(req.response);
_requestController.add(request);
}
}

static Map _normalize(dynamic path,
{ List<String> keys, bool strict: false }) {
static Map _normalize(dynamic path, {List<String> keys, bool strict: false}) {
if (keys == null) {
keys = [];
}

if (path is RegExp) {
return {
'regexp': path,
'keys': keys
};
return {'regexp': path, 'keys': keys};
}
if (path is List) {
path = '(${path.join('|')})';
Expand All @@ -60,30 +55,26 @@ class Route {
path += '/?';
}

path = path.replaceAllMapped(
new RegExp(r'(\.)?:(\w+)(\?)?'), (Match placeholder) {
var replace = new StringBuffer('(?:');
path = path.replaceAllMapped(new RegExp(r'(\.)?:(\w+)(\?)?'),
(Match placeholder) {
var replace = new StringBuffer('(?:');

if (placeholder[1] != null) {
replace.write('\.');
}
if (placeholder[1] != null) {
replace.write('\.');
}

replace.write('([\\w%+-._~!\$&\'()*,;=:@]+))');
replace.write('([\\w%+-._~!\$&\'()*,;=:@]+))');

if (placeholder[3] != null) {
replace.write('?');
}
if (placeholder[3] != null) {
replace.write('?');
}

keys.add(placeholder[2]);
keys.add(placeholder[2]);

return replace.toString();
})
.replaceAll('//', '/');
return replace.toString();
}).replaceAll('//', '/');

return {
'regexp': new RegExp('^$path\$'),
'keys': keys
};
return {'regexp': new RegExp('^$path\$'), 'keys': keys};
}

Map<String, String> _parseParams(String path, Map routePath) {
Expand Down
2 changes: 1 addition & 1 deletion lib/src/server.dart
Expand Up @@ -5,7 +5,7 @@ typedef void WsHandler(Socket s);

class Server {
final Logger log = new Logger('start.server');
final List<Route> _routes = new List<Route>();
final List<Route> _routes = [];
HttpServer _server;
VirtualDirectory _staticServer;

Expand Down
18 changes: 9 additions & 9 deletions lib/src/socket.dart
Expand Up @@ -13,22 +13,22 @@ class Socket implements SocketBase {

_openController.add(_ws);
_ws.listen((data) {
var msg = new Message.fromPacket(data);
_messageController.add(msg);
},
onDone: () {
_closeController.add(_ws);
});
var msg = new Message.fromPacket(data);
_messageController.add(msg);
}, onDone: () {
_closeController.add(_ws);
});
}

void send(String messageName, [ data ]) {
void send(String messageName, [data]) {
var message = new Message(messageName, data);
_ws.add(message.toPacket());
}

Stream on(String messageName) {
return _messages.where((msg) => msg.name == messageName).map((msg) =>
msg.data);
return _messages
.where((msg) => msg.name == messageName)
.map((msg) => msg.data);
}

Stream get onOpen => _openController.stream;
Expand Down
2 changes: 1 addition & 1 deletion lib/src/socket_base.dart
Expand Up @@ -5,7 +5,7 @@ import 'dart:async';
export 'message.dart' show Message;

abstract class SocketBase {
void send(String msg_name, [ data ]);
void send(String msg_name, [data]);

Stream on(String message_name);

Expand Down
12 changes: 10 additions & 2 deletions lib/start.dart
Expand Up @@ -20,6 +20,14 @@ part 'src/server.dart';

part 'src/socket.dart';

Future<Server> start({ String host: '127.0.0.1', int port: 80, String certificateChain, String privateKey, String password}) {
return new Server().listen(host, port, certificateChain: certificateChain, privateKey: privateKey, password: password);
Future<Server> start(
{String host: '127.0.0.1',
int port: 80,
String certificateChain,
String privateKey,
String password}) {
return new Server().listen(host, port,
certificateChain: certificateChain,
privateKey: privateKey,
password: password);
}

0 comments on commit d897e32

Please sign in to comment.