in frontend_server_client/example/web_client.dart [17:100]
void main(List<String> args) async {
watch.start();
if (args.isNotEmpty) {
throw ArgumentError('No command line args are supported');
}
var client = await DartDevcFrontendServerClient.start(
'org-dartlang-root:///$app', outputDill,
fileSystemRoots: [p.current],
fileSystemScheme: 'org-dartlang-root',
verbose: true);
_print('compiling $app');
await client.compile([]);
client.accept();
_print('done compiling $app');
_print('starting shelf server');
var cascade = Cascade()
.add(_clientHandler(client))
.add(createStaticHandler(p.current))
.add(createFileHandler(
p.join(sdkDir, 'lib', 'dev_compiler', 'kernel', 'amd', 'dart_sdk.js'),
url: 'example/app/dart_sdk.js'))
.add(createFileHandler(
p.join(sdkDir, 'lib', 'dev_compiler', 'web',
'dart_stack_trace_mapper.js'),
url: 'example/app/dart_stack_trace_mapper.js'))
.add(createFileHandler(
p.join(sdkDir, 'lib', 'dev_compiler', 'kernel', 'amd', 'require.js'),
url: 'example/app/require.js'))
.add(packagesDirHandler());
final server = await shelf_io.serve(cascade.handler, 'localhost', 8080);
_print('server ready');
// The file we will be editing in the repl
var appFile = File(app);
var originalContent = await appFile.readAsString();
var appLines = const LineSplitter().convert(originalContent);
var getterText = 'String get message =>';
var messageLine = appLines.indexWhere((line) => line.startsWith(getterText));
var stdinQueue = StreamQueue(
stdin.transform(utf8.decoder).transform(const LineSplitter()));
_prompt();
while (await stdinQueue.hasNext) {
var newMessage = await stdinQueue.next;
if (newMessage == 'quit') {
await server.close();
await stdinQueue.cancel();
break;
} else if (newMessage == 'reset') {
print('resetting');
client.reset();
_print('restoring $app');
await appFile.writeAsString(originalContent);
} else {
_print('editing $app');
appLines[messageLine] = '$getterText "$newMessage";';
var newContent = appLines.join('\n');
await appFile.writeAsString(newContent);
_print('recompiling $app with edits');
var result =
await client.compile([Uri.parse('org-dartlang-root:///$app')]);
if (result.errorCount > 0) {
print('Compile errors: \n${result.compilerOutputLines.join('\n')}');
await client.reject();
} else {
_print('Recompile succeeded for $app');
client.accept();
// TODO: support hot restart
print('reload app to see the new message');
}
}
_prompt();
}
_print('restoring $app');
await appFile.writeAsString(originalContent);
_print('exiting');
await client.shutdown();
}