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

Side by Side Diff: pkg/analysis_server/lib/src/channel/byte_stream_channel.dart

Issue 801543002: Rework instrumentation API (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Clean-up Created 6 years 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library channel.byte_stream; 5 library channel.byte_stream;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 import 'dart:convert'; 8 import 'dart:convert';
9 import 'dart:io'; 9 import 'dart:io';
10 10
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 * wait for it to complete before sending more data. There may or may not be 81 * wait for it to complete before sending more data. There may or may not be
82 * outstanding data in [_pendingOutput]. 82 * outstanding data in [_pendingOutput].
83 */ 83 */
84 static const int _STATE_FLUSH_PENDING = 2; 84 static const int _STATE_FLUSH_PENDING = 2;
85 85
86 final Stream input; 86 final Stream input;
87 87
88 final IOSink _output; 88 final IOSink _output;
89 89
90 /** 90 /**
91 * The instrumentation server that is to be used by this analysis server. 91 * The instrumentation service that is to be used by this analysis server.
92 */ 92 */
93 final InstrumentationServer instrumentationServer; 93 final InstrumentationService instrumentationService;
94 94
95 /** 95 /**
96 * Completer that will be signalled when the input stream is closed. 96 * Completer that will be signalled when the input stream is closed.
97 */ 97 */
98 final Completer _closed = new Completer(); 98 final Completer _closed = new Completer();
99 99
100 /** 100 /**
101 * State of the output stream (see constants above). 101 * State of the output stream (see constants above).
102 */ 102 */
103 int _outputState = _STATE_IDLE; 103 int _outputState = _STATE_IDLE;
104 104
105 /** 105 /**
106 * List of strings that need to be sent to [_output] at the next available 106 * List of strings that need to be sent to [_output] at the next available
107 * opportunity. 107 * opportunity.
108 */ 108 */
109 List<String> _pendingOutput = <String>[]; 109 List<String> _pendingOutput = <String>[];
110 110
111 /** 111 /**
112 * True if [close] has been called. 112 * True if [close] has been called.
113 */ 113 */
114 bool _closeRequested = false; 114 bool _closeRequested = false;
115 115
116 ByteStreamServerChannel(this.input, this._output, this.instrumentationServer); 116 ByteStreamServerChannel(this.input, this._output,
117 this.instrumentationService);
117 118
118 /** 119 /**
119 * Future that will be completed when the input stream is closed. 120 * Future that will be completed when the input stream is closed.
120 */ 121 */
121 Future get closed { 122 Future get closed {
122 return _closed.future; 123 return _closed.future;
123 } 124 }
124 125
125 @override 126 @override
126 void close() { 127 void close() {
(...skipping 27 matching lines...) Expand all
154 void sendNotification(Notification notification) { 155 void sendNotification(Notification notification) {
155 // Don't send any further notifications after the communication channel is 156 // Don't send any further notifications after the communication channel is
156 // closed. 157 // closed.
157 if (_closeRequested) { 158 if (_closeRequested) {
158 return; 159 return;
159 } 160 }
160 ServerCommunicationChannel.ToJson.start(); 161 ServerCommunicationChannel.ToJson.start();
161 String jsonEncoding = JSON.encode(notification.toJson()); 162 String jsonEncoding = JSON.encode(notification.toJson());
162 ServerCommunicationChannel.ToJson.stop(); 163 ServerCommunicationChannel.ToJson.stop();
163 _outputLine(jsonEncoding); 164 _outputLine(jsonEncoding);
164 instrumentationServer.log(jsonEncoding); 165 instrumentationService.logNotification(jsonEncoding);
165 } 166 }
166 167
167 @override 168 @override
168 void sendResponse(Response response) { 169 void sendResponse(Response response) {
169 // Don't send any further responses after the communication channel is 170 // Don't send any further responses after the communication channel is
170 // closed. 171 // closed.
171 if (_closeRequested) { 172 if (_closeRequested) {
172 return; 173 return;
173 } 174 }
174 ServerCommunicationChannel.ToJson.start(); 175 ServerCommunicationChannel.ToJson.start();
175 String jsonEncoding = JSON.encode(response.toJson()); 176 String jsonEncoding = JSON.encode(response.toJson());
176 ServerCommunicationChannel.ToJson.stop(); 177 ServerCommunicationChannel.ToJson.stop();
177 _outputLine(jsonEncoding); 178 _outputLine(jsonEncoding);
178 instrumentationServer.log(jsonEncoding); 179 instrumentationService.logResponse(jsonEncoding);
179 } 180 }
180 181
181 /** 182 /**
182 * Callback invoked after a flush of [_output] completes. Closes the stream 183 * Callback invoked after a flush of [_output] completes. Closes the stream
183 * if necessary. Otherwise schedules additional pending output. 184 * if necessary. Otherwise schedules additional pending output.
184 */ 185 */
185 void _flushCompleted(_) { 186 void _flushCompleted(_) {
186 assert(_outputState == _STATE_FLUSH_PENDING); 187 assert(_outputState == _STATE_FLUSH_PENDING);
187 if (_pendingOutput.isNotEmpty) { 188 if (_pendingOutput.isNotEmpty) {
188 _output.write(_pendingOutput.join()); 189 _output.write(_pendingOutput.join());
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 227
227 /** 228 /**
228 * Read a request from the given [data] and use the given function to handle 229 * Read a request from the given [data] and use the given function to handle
229 * the request. 230 * the request.
230 */ 231 */
231 void _readRequest(Object data, void onRequest(Request request)) { 232 void _readRequest(Object data, void onRequest(Request request)) {
232 // Ignore any further requests after the communication channel is closed. 233 // Ignore any further requests after the communication channel is closed.
233 if (_closed.isCompleted) { 234 if (_closed.isCompleted) {
234 return; 235 return;
235 } 236 }
236 instrumentationServer.log(data); 237 instrumentationService.logRequest(data);
237 // Parse the string as a JSON descriptor and process the resulting 238 // Parse the string as a JSON descriptor and process the resulting
238 // structure as a request. 239 // structure as a request.
239 ServerCommunicationChannel.FromJson.start(); 240 ServerCommunicationChannel.FromJson.start();
240 Request request = new Request.fromString(data); 241 Request request = new Request.fromString(data);
241 ServerCommunicationChannel.FromJson.stop(); 242 ServerCommunicationChannel.FromJson.stop();
242 if (request == null) { 243 if (request == null) {
243 sendResponse(new Response.invalidRequestFormat()); 244 sendResponse(new Response.invalidRequestFormat());
244 return; 245 return;
245 } 246 }
246 onRequest(request); 247 onRequest(request);
247 } 248 }
248 } 249 }
OLDNEW
« no previous file with comments | « pkg/analysis_server/lib/src/analysis_server.dart ('k') | pkg/analysis_server/lib/src/channel/web_socket_channel.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698