Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1917)

Unified Diff: pkg/fletchc/lib/src/hub/session_manager.dart

Issue 1659163007: Rename fletch -> dartino (Closed) Base URL: https://github.com/dartino/sdk.git@master
Patch Set: address comments Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: pkg/fletchc/lib/src/hub/session_manager.dart
diff --git a/pkg/fletchc/lib/src/hub/session_manager.dart b/pkg/fletchc/lib/src/hub/session_manager.dart
deleted file mode 100644
index b7c2eb75d69cdd0e59516bbf896aa03976227c30..0000000000000000000000000000000000000000
--- a/pkg/fletchc/lib/src/hub/session_manager.dart
+++ /dev/null
@@ -1,256 +0,0 @@
-// Copyright (c) 2015, the Dartino project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE.md file.
-
-library fletchc.hub.session_manager;
-
-import 'dart:async' show
- Future,
- Timer;
-
-import 'client_commands.dart' show
- CommandSender;
-
-import 'hub_main.dart' show
- WorkerConnection;
-
-export 'hub_main.dart' show
- WorkerConnection;
-
-import '../worker/developer.dart' show
- Settings;
-
-import '../diagnostic.dart' show
- DiagnosticKind,
- DiagnosticParameter,
- InputError,
- throwFatalError,
- throwInternalError;
-
-import '../../fletch_system.dart' show
- FletchDelta;
-
-export '../../fletch_system.dart' show
- FletchDelta;
-
-import '../../vm_session.dart' show
- Session;
-
-export '../../vm_session.dart' show
- Session;
-
-import '../../fletch_compiler.dart' show
- FletchCompiler;
-
-export '../../fletch_compiler.dart' show
- FletchCompiler;
-
-import '../../incremental/fletchc_incremental.dart' show
- IncrementalCompiler;
-
-export '../../incremental/fletchc_incremental.dart' show
- IncrementalCompiler;
-
-import '../../fletch_vm.dart' show
- FletchVm;
-
-export '../../fletch_vm.dart' show
- FletchVm;
-
-// TODO(karlklose): we need a better API for session management.
-class Sessions {
- static Iterable<String> get names {
- return internalSessions.keys;
- }
-}
-
-final Map<String, UserSession> internalSessions = <String, UserSession>{};
-
-// TODO(ahe): We need a command to switch to another session.
-String internalCurrentSession = "local";
-
-String get currentSession => internalCurrentSession;
-
-Future<UserSession> createSession(
- String name,
- Future<WorkerConnection> allocateWorker()) async {
- if (name == null) {
- throw new ArgumentError("session name must not be `null`.");
- }
-
- UserSession session = lookupSession(name);
- if (session != null) {
- throwFatalError(DiagnosticKind.sessionAlreadyExists, sessionName: name);
- }
- session = new UserSession(name, await allocateWorker());
- internalSessions[name] = session;
- return session;
-}
-
-UserSession lookupSession(String name) => internalSessions[name];
-
-// Remove the session named [name] from [internalSessions], but caller must
-// ensure that [worker] has its static state cleaned up and returned to the
-// isolate pool.
-UserSession endSession(String name) {
- UserSession session = internalSessions.remove(name);
- if (session == null) {
- throwFatalError(DiagnosticKind.noSuchSession, sessionName: name);
- }
- return session;
-}
-
-void endAllSessions() {
- internalSessions.forEach((String name, UserSession session) {
- print("Ending session: $name");
- session.worker.endSession();
- });
- internalSessions.clear();
-}
-
-/// A session in the hub (main isolate).
-class UserSession {
- final String name;
-
- final WorkerConnection worker;
-
- bool hasActiveWorkerTask = false;
-
- UserSession(this.name, this.worker);
-
- void kill(void printLineOnStderr(String line)) {
- worker.isolate.kill();
- internalSessions.remove(name);
- InputError error = new InputError(
- DiagnosticKind.terminatedSession,
- <DiagnosticParameter, dynamic>{DiagnosticParameter.sessionName: name});
- printLineOnStderr(error.asDiagnostic().formatMessage());
- }
-}
-
-typedef void SendBytesFunction(List<int> bytes);
-
-class BufferingOutputSink implements Sink<List<int>> {
- SendBytesFunction sendBytes;
-
- List<List<int>> buffer = new List();
-
- void attachCommandSender(SendBytesFunction sendBytes) {
- for (List<int> data in buffer) {
- sendBytes(data);
- }
- buffer = new List();
- this.sendBytes = sendBytes;
- }
-
- void detachCommandSender() {
- assert(sendBytes != null);
- sendBytes = null;
- }
-
- void add(List<int> bytes) {
- if (sendBytes != null) {
- sendBytes(bytes);
- } else {
- buffer.add(bytes);
- }
- }
-
- void close() {
- throwInternalError("Unimplemented");
- }
-}
-
-/// The state stored in a worker isolate of a [UserSession].
-/// TODO(wibling): This should be moved into a worker specific file.
-class SessionState {
- final String name;
-
- final BufferingOutputSink stdoutSink = new BufferingOutputSink();
-
- final BufferingOutputSink stderrSink = new BufferingOutputSink();
-
- final FletchCompiler compilerHelper;
-
- final IncrementalCompiler compiler;
-
- final List<FletchDelta> compilationResults = <FletchDelta>[];
-
- final List<String> loggedMessages = <String>[];
-
- Uri script;
-
- Session session;
-
- FletchVm fletchVm;
-
- int fletchAgentVmId;
-
- Settings settings;
-
- bool explicitAttach = false;
-
- SessionState(this.name, this.compilerHelper, this.compiler, this.settings);
-
- bool get hasRemoteVm => fletchAgentVmId != null;
-
- bool get colorsDisabled => session == null ? false : session.colorsDisabled;
-
- void addCompilationResult(FletchDelta delta) {
- compilationResults.add(delta);
- }
-
- void resetCompiler() {
- compilationResults.clear();
- }
-
- Future terminateSession() async {
- if (session != null) {
- if (!session.terminated) {
- bool done = false;
- Timer timer = new Timer(const Duration(seconds: 5), () {
- if (!done) {
- print("Timed out waiting for Fletch VM to shutdown; killing "
- "session");
- session.kill();
- }
- });
- await session.terminateSession();
- done = true;
- timer.cancel();
- }
- explicitAttach = false;
- }
- session = null;
- }
-
- void attachCommandSender(CommandSender sender) {
- stdoutSink.attachCommandSender((d) => sender.sendStdoutBytes(d));
- stderrSink.attachCommandSender((d) => sender.sendStderrBytes(d));
- }
-
- void detachCommandSender() {
- stdoutSink.detachCommandSender();
- stderrSink.detachCommandSender();
- }
-
- void log(message) {
- loggedMessages.add("[$name: ${new DateTime.now()} $message]");
- }
-
- String getLog() => loggedMessages.join("\n");
-
- static SessionState internalCurrent;
-
- /// Don't use this as a shortcut to get a [SessionState] object. Generally, a
- /// [SessionState] object should be passed as a parameter to any user of it,
- /// otherwise API that takes a [SessionState] object doesn't work correctly
- /// and testing becomes hard.
- ///
- /// TODO(ahe): Perhaps we can remove this getter, and [internalCurrent] by
- /// storing this object in ../worker/worker_main.dart. For example,
- /// [workerMain] holds a reference to an instance of [SessionState] and
- /// passes this reference to [WorkerSideTask] which can in turn pass it on to
- /// the verb/task in [WorkerSideTask.performTask].
- static SessionState get current => internalCurrent;
-}
« no previous file with comments | « pkg/fletchc/lib/src/hub/sentence_parser.dart ('k') | pkg/fletchc/lib/src/lazy_field_initializer_codegen.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698