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

Unified Diff: runtime/observatory/lib/src/repositories/target.dart

Issue 2180803002: Converted Observatory vm-connect element (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Renamed DumpRepository to CrashDumpRepository Created 4 years, 5 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: runtime/observatory/lib/src/repositories/target.dart
diff --git a/runtime/observatory/lib/src/repositories/target.dart b/runtime/observatory/lib/src/repositories/target.dart
new file mode 100644
index 0000000000000000000000000000000000000000..69ba8c8ffeae6743f250f354b44a136694dddbe6
--- /dev/null
+++ b/runtime/observatory/lib/src/repositories/target.dart
@@ -0,0 +1,102 @@
+// Copyright (c) 2016, the Dart 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 file
+
+part of repositories;
+
+class TargetChangeEvent implements M.TargetChangeEvent {
+ final TargetRepository repository;
+ TargetChangeEvent(this.repository);
+}
+
+class TargetRepository implements M.TargetRepository {
+
+ static const _historyKey = 'history';
+
+ final StreamController<TargetChangeEvent> _onChange;
+ final Stream<TargetChangeEvent> onChange;
+ final SettingsRepository _settings = new SettingsRepository('targetManager');
+
+ final List<SC.WebSocketVMTarget> _list = <SC.WebSocketVMTarget>[];
+ SC.WebSocketVMTarget current;
+
+ factory TargetRepository() {
+ var controller = new StreamController<TargetChangeEvent>();
+ var stream = controller.stream.asBroadcastStream();
+ return new TargetRepository._(controller, stream);
+ }
+
+ TargetRepository._(this._onChange, this.onChange) {
+ _restore();
+ if (_list.isEmpty) {
+ _list.add(new SC.WebSocketVMTarget(_networkAddressOfDefaultTarget()));
+ }
+ current = _list.first;
+ }
+
+ void add(String address) {
+ if (_find(address) != null) return;
+ _list.insert(0, new SC.WebSocketVMTarget(address));
+ _onChange.add(new TargetChangeEvent(this));
+ _store();
+ }
+
+ Iterable<SC.WebSocketVMTarget> list() => _list;
+
+ void setCurrent(M.Target t) {
+ SC.WebSocketVMTarget target = t as SC.WebSocketVMTarget;
+ if (!_list.contains(target)) return;
+ current = target;
+ _onChange.add(new TargetChangeEvent(this));
+ }
+
+ void delete(o) {
+ if (_list.remove(o)) {
+ if (o == current) {
+ current = null;
+ }
+ _onChange.add(new TargetChangeEvent(this));
+ _store();
+ }
+ }
+
+ /// Read settings from data store.
+ void _restore() {
+ _list.clear();
+ var loaded = _settings.get(_historyKey);
+ if (loaded == null) {
+ return;
+ }
+ _list.addAll(loaded.map((i) => new SC.WebSocketVMTarget.fromMap(i)));
+ _list.sort((SC.WebSocketVMTarget a, SC.WebSocketVMTarget b) {
+ return b.lastConnectionTime.compareTo(a.lastConnectionTime);
+ });
+ }
+
+ /// After making a change, update settings.
+ void _store() {
+ _settings.set(_historyKey, _list);
+ }
+
+ /// Find by networkAddress.
+ SC.WebSocketVMTarget _find(String networkAddress) {
+ for (SC.WebSocketVMTarget item in _list) {
+ if (item.networkAddress == networkAddress) {
+ return item;
+ }
+ }
+ return null;
+ }
+
+ static String _networkAddressOfDefaultTarget() {
+ if (Utils.runningInJavaScript()) {
+ // We are running as JavaScript, use the same host that Observatory has
+ // been loaded from.
+ return 'ws://${window.location.host}/ws';
+ } else {
+ // Otherwise, assume we are running from Dart Editor and want to connect
+ // to the default host.
+ return 'ws://localhost:8181/ws';
+ }
+ }
+}
« no previous file with comments | « runtime/observatory/lib/src/repositories/settings.dart ('k') | runtime/observatory/observatory_sources.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698