Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
.project
.DS_Store
.DS_Store
packages
14 changes: 14 additions & 0 deletions example/simple_server.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import '../lib/synth.dart';

void main() {
synthInit(webRoot: 'example/webapp/');
route('GET', '/myroute', (req, res) => myRouteHandler(req, res));

start(port: 7000);
print('Listening on port 7000');
}

void myRouteHandler(req, res) {
res.write('REST path ${req.path}');
}

21 changes: 21 additions & 0 deletions example/webapp/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<!DOCTYPE html>

<html>
<head>
<meta charset="utf-8">
<title>index</title>
<link rel="stylesheet" href="index.css">
</head>
<body>
<h1>index</h1>

<p>Hello world from Dart!</p>

<div id="container">
<p id="text"></p>
</div>

<script type="application/dart" src="index"></script>
<script src="https://dart.googlecode.com/svn/branches/bleeding_edge/dart/client/dart.js"></script>
</body>
</html>
26 changes: 24 additions & 2 deletions lib/src/ehttp.dart
Original file line number Diff line number Diff line change
Expand Up @@ -79,13 +79,27 @@ class Response implements HttpResponse {
/** Enhanced Server object. Provides middleware server. */
class Server implements HttpServer {
HttpServer _server;
String _webRoot;
final List<Middleware> _middlewares = new List<Middleware>();

Server(this._server) {
Server(this._server, this._webRoot) {
_server.defaultRequestHandler = _defaultReqHandler;
}

void _defaultReqHandler(final HttpRequest req, final HttpResponse res) {
final String path = req.path == '/' ? '/index.html' : req.path;
final File file = new File('${_webRoot}${path}');
file.exists().then((bool found) {
if (found) {
file.openInputStream().pipe(res.outputStream);
} else {
print('"Requested file ${_webRoot}${path} not found');
_send404(res);
}
});
}

void _send404(HttpResponse res) {
res.statusCode = HttpStatus.NOT_FOUND;
res.headers.set(HttpHeaders.CONTENT_TYPE, "text/plain; charset=UTF-8");
res.outputStream.write('${res.statusCode} Page not found.'.charCodes);
Expand Down Expand Up @@ -146,7 +160,15 @@ class Server implements HttpServer {
_middlewares.add(middleware);
}

void listen(String host, int port, {int backlog: 128}) => _server.listen(host, port);
void listen(String host,
int port,
{int backlog: 128,
String certificate_name,
bool requestClientCertificate: false}) {
listenPort(host, port, backlog: backlog);
}

void listenPort(String host, int port, {int backlog: 128}) => _server.listen(host, port, backlog: backlog);
void listenOn(ServerSocket serverSocket) => _server.listenOn(serverSocket);
addRequestHandler(bool matcher(HttpRequest request),
void handler(HttpRequest request, HttpResponse response))
Expand Down
15 changes: 14 additions & 1 deletion lib/synth.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,18 @@ part 'src/ehttp.dart';
part 'src/render.dart';

// Private variables
final Server _server = new Server(new HttpServer());
Server _server;
final Router _router = new Router();

void synthInit({String webRoot: 'webapp/'}) {
_server = new Server(new HttpServer(), webRoot);
}

void route(final String method, final String path, middleware,
[Handler handler]) {
if (_server == null) {
throw new StateError('Synth not initialized. Please call synthInit first');
}
if (handler == null) {
handler = middleware;
middleware = null;
Expand All @@ -23,9 +30,15 @@ void route(final String method, final String path, middleware,
}

void start({int port: 7000, String host: '127.0.0.1'}) {
if (_server == null) {
throw new StateError('Synth not initialized. Please call synthInit first');
}
_server.listen(host, port);
}

void use(final Middleware middleware) {
if (_server == null) {
throw new StateError('Synth not initialized. Please call synthInit first');
}
_server.addMiddleware(middleware);
}