Skip to content

Commit

Permalink
add generic client wrapper
Browse files Browse the repository at this point in the history
  • Loading branch information
clintpurser committed Jul 3, 2023
1 parent 697a8fb commit 7f7e69f
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 0 deletions.
26 changes: 26 additions & 0 deletions lib/src/components/generic/client.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import 'package:grpc/grpc_connection_interface.dart';

import '../../gen/common/v1/common.pb.dart';
import '../../gen/component/generic/v1/generic.pbgrpc.dart';
import '../../resource/base.dart';
import '../../utils.dart';
import 'generic.dart';

class GenericClient extends Generic implements ResourceRPCClient {
@override
ClientChannelBase channel;

@override
String name;

@override
GenericServiceClient get client => GenericServiceClient(channel);

GenericClient(this.name, this.channel);

@override
Future<Map<String, dynamic>> doCommand(Map<String, dynamic> command) async {
final response = await client.doCommand(DoCommandRequest(name: name, command: command.toStruct()));
return response.result.toMap();
}
}
22 changes: 22 additions & 0 deletions lib/src/components/generic/generic.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import '../../gen/common/v1/common.pb.dart';
import '../../resource/base.dart';
import '../../robot/client.dart';

/// Generic component, which represents any type of component that can executes arbitrary commands
abstract class Generic extends Resource {
static const Subtype subtype = Subtype(resourceNamespaceRDK, resourceTypeComponent, 'generic');

/// Convenience method to allow component clients to execute ``do_command`` functions
@override
Future<Map<String, dynamic>> doCommand(Map<String, dynamic> command);

/// Get the [ResourceName] for this [Generic] with the given [name]
static ResourceName getResourceName(String name) {
return Generic.subtype.getResourceName(name);
}

/// Get the [Generic] named [name] from the provided robot.
static Generic fromRobot(RobotClient robot, String name) {
return robot.getResource(Generic.getResourceName(name));
}
}
3 changes: 3 additions & 0 deletions lib/src/resource/registry.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ import '../components/camera/camera.dart';
import '../components/camera/client.dart';
import '../components/gantry/client.dart';
import '../components/gantry/gantry.dart';
import '../components/generic/client.dart';
import '../components/generic/generic.dart';
import '../components/motor/client.dart';
import '../components/motor/motor.dart';
import '../components/movement_sensor/client.dart';
Expand All @@ -36,6 +38,7 @@ class Registry {
registerSubtype(ResourceRegistration(Base.subtype, (name, channel) => BaseClient(name, channel)));
registerSubtype(ResourceRegistration(Camera.subtype, (name, channel) => CameraClient(name, channel)));
registerSubtype(ResourceRegistration(Gantry.subtype, (name, channel) => GantryClient(name, channel)));
registerSubtype(ResourceRegistration(Generic.subtype, (name, channel) => GenericClient(name, channel)));
registerSubtype(ResourceRegistration(Motor.subtype, (name, channel) => MotorClient(name, channel)));
registerSubtype(ResourceRegistration(MovementSensor.subtype, (name, channel) => MovementSensorClient(name, channel)));
registerSubtype(ResourceRegistration(Sensor.subtype, (name, channel) => SensorClient(name, channel)));
Expand Down

0 comments on commit 7f7e69f

Please sign in to comment.