2018-09-04 20:04:53 +00:00
|
|
|
import 'dart:async';
|
|
|
|
import 'dart:isolate';
|
|
|
|
import 'package:angel_framework/angel_framework.dart';
|
|
|
|
import 'package:angel_production/angel_production.dart';
|
2018-09-04 22:00:53 +00:00
|
|
|
import 'package:pub_sub/pub_sub.dart' as pub_sub;
|
2018-09-04 20:04:53 +00:00
|
|
|
|
2018-09-04 20:13:22 +00:00
|
|
|
main(List<String> args) => new Runner('example', configureServer).run(args);
|
2018-09-04 20:04:53 +00:00
|
|
|
|
|
|
|
Future configureServer(Angel app) async {
|
2018-09-04 22:00:53 +00:00
|
|
|
// Use the injected `pub_sub.Client` to send messages.
|
|
|
|
var client = app.container.make<pub_sub.Client>();
|
|
|
|
var greeting = 'Hello! This is the default greeting.';
|
|
|
|
|
|
|
|
// We can listen for an event to perform some behavior.
|
|
|
|
//
|
|
|
|
// Here, we use message passing to synchronize some common state.
|
|
|
|
var onGreetingChanged = await client.subscribe('greeting_changed');
|
|
|
|
onGreetingChanged
|
|
|
|
.cast<String>()
|
|
|
|
.listen((newGreeting) => greeting = newGreeting);
|
|
|
|
|
|
|
|
// Add some routes...
|
2018-09-04 20:04:53 +00:00
|
|
|
app.get('/', (req, res) => 'Hello, production world!');
|
|
|
|
|
2018-09-04 22:00:53 +00:00
|
|
|
// Create some routes to demonstrate message passing.
|
|
|
|
app.get('/greeting', (req, res) => greeting);
|
|
|
|
|
|
|
|
// This route will push a new value for `greeting`.
|
|
|
|
app.get('/change_greeting/:newGreeting', (req, res) {
|
|
|
|
greeting = req.params['newGreeting'] as String;
|
|
|
|
client.publish('greeting_changed', greeting);
|
|
|
|
return 'Changed greeting -> $greeting';
|
|
|
|
});
|
|
|
|
|
|
|
|
// The `Runner` helps with fault tolerance.
|
2018-09-04 20:04:53 +00:00
|
|
|
app.get('/crash', (req, res) {
|
|
|
|
// We'll crash this instance deliberately, but the Runner will auto-respawn for us.
|
|
|
|
new Timer(const Duration(seconds: 3), Isolate.current.kill);
|
|
|
|
return 'Crashing in 3s...';
|
|
|
|
});
|
|
|
|
}
|