blob: efe33c070be74c19fbdc77e75d9c0a659f4c533b [file] [log] [blame]
// Copyright (c) 2013, 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 dart._vmservice;
typedef void ClientServiceHandle(Message response);
// A service client.
abstract class Client {
final VMService service;
final bool sendEvents;
/// A set streamIds which describes the streams the client is connected to
final Set<String> streams = new Set<String>();
/// Services registered and their aliases
/// key: service
/// value: alias
final Map<String, String> services = new Map<String, String>();
/// Callbacks registered for service invocations set to the client
/// key: RPC id used for the request
/// value: callback that should be invoked
final Map<String, ClientServiceHandle> serviceHandles =
new Map<String, ClientServiceHandle>();
Client(this.service, {bool sendEvents: true}) : this.sendEvents = sendEvents {
service._addClient(this);
}
// Disconnects the client.
disconnect();
/// When implementing, call [close] when the network connection closes.
void close() {
service._removeClient(this);
}
/// Call to process a request. Response will be posted with 'seq'.
void onRequest(Message message) {
// In JSON-RPC 2.0 messages with and id are Request and must be answered
// http://www.jsonrpc.org/specification#notification
service.routeRequest(service, message).then(post);
}
void onResponse(Message message) {
service.routeResponse(message);
}
/// Call to process a notification. Response will not be posted.
void onNotification(Message message) {
// In JSON-RPC 2.0 messages without an id are Notification
// and should not be answered
// http://www.jsonrpc.org/specification#notification
service.routeRequest(service, message);
}
// Sends a result to the client. Implemented in subclasses.
void post(Response result);
dynamic toJson() {
return {};
}
}