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

Side by Side Diff: pkg/analysis_server/lib/src/protocol.dart

Issue 182903005: split client and server channels (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: address comments Created 6 years, 9 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « pkg/analysis_server/lib/src/channel.dart ('k') | pkg/analysis_server/test/channel_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 protocol; 5 library protocol;
6 6
7 import 'dart:convert' show JsonDecoder; 7 import 'dart:convert' show JsonDecoder;
8 8
9 /** 9 /**
10 * Instances of the class [Request] represent a request that was received. 10 * Instances of the class [Request] represent a request that was received.
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 * pairs. 68 * pairs.
69 */ 69 */
70 factory Request.fromString(String data) { 70 factory Request.fromString(String data) {
71 try { 71 try {
72 var result = DECODER.convert(data); 72 var result = DECODER.convert(data);
73 if (result is! Map) { 73 if (result is! Map) {
74 return null; 74 return null;
75 } 75 }
76 String id = result[Request.ID]; 76 String id = result[Request.ID];
77 String method = result[Request.METHOD]; 77 String method = result[Request.METHOD];
78 Map<String, Object> params = result[Request.PARAMS]; 78 var params = result[Request.PARAMS];
79 Request request = new Request(id, method); 79 Request request = new Request(id, method);
80 if (params != null) { 80 if (params is Map) {
81 params.forEach((String key, Object value) { 81 params.forEach((String key, Object value) {
82 request.setParameter(key, value); 82 request.setParameter(key, value);
83 }); 83 });
84 } 84 }
85 return request; 85 return request;
86 } catch (exception) { 86 } catch (exception) {
87 return null; 87 return null;
88 } 88 }
89 } 89 }
90 90
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 }); 146 });
147 } 147 }
148 throw new RequestFailure(new Response.expectedInteger(this, value)); 148 throw new RequestFailure(new Response.expectedInteger(this, value));
149 } 149 }
150 150
151 /** 151 /**
152 * Return a table representing the structure of the Json object that will be 152 * Return a table representing the structure of the Json object that will be
153 * sent to the client to represent this response. 153 * sent to the client to represent this response.
154 */ 154 */
155 Map<String, Object> toJson() { 155 Map<String, Object> toJson() {
156 Map jsonObject = new Map(); 156 Map<String, Object> jsonObject = new Map<String, Object>();
157 jsonObject[ID] = id; 157 jsonObject[ID] = id;
158 jsonObject[METHOD] = method; 158 jsonObject[METHOD] = method;
159 params.forEach((String key, Object value) { 159 if (params.isNotEmpty) {
160 jsonObject[key] = value; 160 jsonObject[PARAMS] = params;
161 }); 161 }
162 return jsonObject; 162 return jsonObject;
163 } 163 }
164 } 164 }
165 165
166 /** 166 /**
167 * Instances of the class [Response] represent a response to a request. 167 * Instances of the class [Response] represent a response to a request.
168 */ 168 */
169 class Response { 169 class Response {
170 /** 170 /**
171 * The name of the JSON attribute containing the id of the request for which 171 * The name of the JSON attribute containing the id of the request for which
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
254 : this(request.id, new RequestError(-6, 'Unknown analysis option: "$optionNa me"')); 254 : this(request.id, new RequestError(-6, 'Unknown analysis option: "$optionNa me"'));
255 255
256 /** 256 /**
257 * Initialize a newly created instance to represent an error condition caused 257 * Initialize a newly created instance to represent an error condition caused
258 * by a [request] that cannot be handled by any known handlers. 258 * by a [request] that cannot be handled by any known handlers.
259 */ 259 */
260 Response.unknownRequest(Request request) 260 Response.unknownRequest(Request request)
261 : this(request.id, new RequestError(-7, 'Unknown request')); 261 : this(request.id, new RequestError(-7, 'Unknown request'));
262 262
263 /** 263 /**
264 * Initialize a newly created instance based upon the given JSON data
265 */
266 factory Response.fromJson(Map<String, Object> json) {
267 try {
268 // TODO process result
269 String id = json[Response.ID];
270 var error = json[Response.ERROR];
271 var result = json[Response.RESULT];
272 Response response;
273 if (error is Map) {
274 response = new Response(id, new RequestError.fromJson(error));
275 } else {
276 response = new Response(id);
277 }
278 if (result is Map) {
279 result.forEach((String key, Object value) {
280 response.setResult(key, value);
281 });
282 }
283 return response;
284 } catch (exception) {
285 return null;
286 }
287 }
288
289 /**
264 * Return the value of the result field with the given [name]. 290 * Return the value of the result field with the given [name].
265 */ 291 */
266 Object getResult(String name) { 292 Object getResult(String name) {
267 return result[name]; 293 return result[name];
268 } 294 }
269 295
270 /** 296 /**
271 * Set the value of the result field with the given [name] to the given [value ]. 297 * Set the value of the result field with the given [name] to the given [value ].
272 */ 298 */
273 void setResult(String name, Object value) { 299 void setResult(String name, Object value) {
274 result[name] = value; 300 result[name] = value;
275 } 301 }
276 302
277 /** 303 /**
278 * Return a table representing the structure of the Json object that will be 304 * Return a table representing the structure of the Json object that will be
279 * sent to the client to represent this response. 305 * sent to the client to represent this response.
280 */ 306 */
281 Map<String, Object> toJson() { 307 Map<String, Object> toJson() {
282 Map jsonObject = new Map(); 308 Map<String, Object> jsonObject = new Map<String, Object>();
283 jsonObject[ID] = id; 309 jsonObject[ID] = id;
284 if (error == null) { 310 if (error == null) {
285 jsonObject[ERROR] = null; 311 jsonObject[ERROR] = null;
286 } else { 312 } else {
287 jsonObject[ERROR] = error.toJson(); 313 jsonObject[ERROR] = error.toJson();
288 } 314 }
289 if (!result.isEmpty) { 315 if (!result.isEmpty) {
290 jsonObject[RESULT] = result; 316 jsonObject[RESULT] = result;
291 } 317 }
292 return jsonObject; 318 return jsonObject;
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
392 * parameters. 418 * parameters.
393 */ 419 */
394 RequestError.invalidParameters() : this(CODE_INVALID_PARAMS, "Invalid paramete rs"); 420 RequestError.invalidParameters() : this(CODE_INVALID_PARAMS, "Invalid paramete rs");
395 421
396 /** 422 /**
397 * Initialize a newly created [Error] to indicate an internal error. 423 * Initialize a newly created [Error] to indicate an internal error.
398 */ 424 */
399 RequestError.internalError() : this(CODE_INTERNAL_ERROR, "Internal error"); 425 RequestError.internalError() : this(CODE_INTERNAL_ERROR, "Internal error");
400 426
401 /** 427 /**
428 * Initialize a newly created [Error] from the given JSON.
429 */
430 factory RequestError.fromJson(Map<String, Object> json) {
431 try {
432 int code = json[RequestError.CODE];
433 String message = json[RequestError.MESSAGE];
434 Map<String, Object> data = json[RequestError.DATA];
435 RequestError requestError = new RequestError(code, message);
436 if (data != null) {
437 data.forEach((String key, Object value) {
438 requestError.setData(key, value);
439 });
440 }
441 return requestError;
442 } catch (exception) {
443 return null;
444 }
445 }
446
447 /**
402 * Return the value of the data with the given [name], or `null` if there is 448 * Return the value of the data with the given [name], or `null` if there is
403 * no such data associated with this error. 449 * no such data associated with this error.
404 */ 450 */
405 Object getData(String name) => data[name]; 451 Object getData(String name) => data[name];
406 452
407 /** 453 /**
408 * Set the value of the data with the given [name] to the given [value]. 454 * Set the value of the data with the given [name] to the given [value].
409 */ 455 */
410 void setData(String name, Object value) { 456 void setData(String name, Object value) {
411 data[name] = value; 457 data[name] = value;
412 } 458 }
413 459
414 /** 460 /**
415 * Return a table representing the structure of the Json object that will be 461 * Return a table representing the structure of the Json object that will be
416 * sent to the client to represent this response. 462 * sent to the client to represent this response.
417 */ 463 */
418 Map<String, Object> toJson() { 464 Map<String, Object> toJson() {
419 Map jsonObject = new Map(); 465 Map<String, Object> jsonObject = new Map<String, Object>();
420 jsonObject[CODE] = code; 466 jsonObject[CODE] = code;
421 jsonObject[MESSAGE] = message; 467 jsonObject[MESSAGE] = message;
422 if (!data.isEmpty) { 468 if (!data.isEmpty) {
423 jsonObject[DATA] = data; 469 jsonObject[DATA] = data;
424 } 470 }
425 return jsonObject; 471 return jsonObject;
426 } 472 }
427 } 473 }
428 474
429 /** 475 /**
(...skipping 21 matching lines...) Expand all
451 * A table mapping the names of notification parameters to their values. 497 * A table mapping the names of notification parameters to their values.
452 */ 498 */
453 final Map<String, Object> params = new Map<String, Object>(); 499 final Map<String, Object> params = new Map<String, Object>();
454 500
455 /** 501 /**
456 * Initialize a newly created [Notification] to have the given [event] name. 502 * Initialize a newly created [Notification] to have the given [event] name.
457 */ 503 */
458 Notification(this.event); 504 Notification(this.event);
459 505
460 /** 506 /**
507 * Initialize a newly created instance based upon the given JSON data
508 */
509 factory Notification.fromJson(Map<String, Object> json) {
510 try {
511 String event = json[Notification.EVENT];
512 var params = json[Notification.PARAMS];
513 Notification notification = new Notification(event);
514 if (params is Map) {
515 params.forEach((String key, Object value) {
516 notification.setParameter(key, value);
517 });
518 }
519 return notification;
520 } catch (exception) {
521 return null;
522 }
523 }
524
525 /**
461 * Return the value of the parameter with the given [name], or `null` if there 526 * Return the value of the parameter with the given [name], or `null` if there
462 * is no such parameter associated with this notification. 527 * is no such parameter associated with this notification.
463 */ 528 */
464 Object getParameter(String name) => params[name]; 529 Object getParameter(String name) => params[name];
465 530
466 /** 531 /**
467 * Set the value of the parameter with the given [name] to the given [value]. 532 * Set the value of the parameter with the given [name] to the given [value].
468 */ 533 */
469 void setParameter(String name, Object value) { 534 void setParameter(String name, Object value) {
470 params[name] = value; 535 params[name] = value;
471 } 536 }
472 537
473 /** 538 /**
474 * Return a table representing the structure of the Json object that will be 539 * Return a table representing the structure of the Json object that will be
475 * sent to the client to represent this response. 540 * sent to the client to represent this response.
476 */ 541 */
477 Map<String, Object> toJson() { 542 Map<String, Object> toJson() {
478 Map jsonObject = new Map(); 543 Map<String, Object> jsonObject = new Map<String, Object>();
479 jsonObject[EVENT] = event; 544 jsonObject[EVENT] = event;
480 if (!params.isEmpty) { 545 if (!params.isEmpty) {
481 jsonObject[PARAMS] = params; 546 jsonObject[PARAMS] = params;
482 } 547 }
483 return jsonObject; 548 return jsonObject;
484 } 549 }
485 } 550 }
486 551
487 /** 552 /**
488 * Instances of the class [RequestHandler] implement a handler that can handle 553 * Instances of the class [RequestHandler] implement a handler that can handle
(...skipping 18 matching lines...) Expand all
507 /** 572 /**
508 * The response to be returned as a result of the failure. 573 * The response to be returned as a result of the failure.
509 */ 574 */
510 final Response response; 575 final Response response;
511 576
512 /** 577 /**
513 * Initialize a newly created exception to return the given reponse. 578 * Initialize a newly created exception to return the given reponse.
514 */ 579 */
515 RequestFailure(this.response); 580 RequestFailure(this.response);
516 } 581 }
OLDNEW
« no previous file with comments | « pkg/analysis_server/lib/src/channel.dart ('k') | pkg/analysis_server/test/channel_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698