public void RegService <ArgDataType, ArgBridgeType, ResDataType, ResBridgeType>(IBridgePlugin plugin, Func <ArgBridgeType, ArgDataType> argConverter, Func <ResDataType, ResBridgeType> resConverter) { plugin.AddServiceCreator <ArgDataType, ResDataType>( (instance, topic, service) => { // this callback is called every time sensor registers service on different topic (instance as RosBridgeInstance).AddService <ArgBridgeType>(topic, (rawArg, resultCb) => { // this callback is called every time websocket receives message from rosbridge var arg = RosSerialization.Unserialize <ArgBridgeType>(rawArg); var argData = argConverter(arg); service(argData, resData => { // this callback is called from sensor service callback to return result data back to rosbridge var res = resConverter(resData); resultCb(res); }); } ); } ); }
public void RegSubscriber <DataType, BridgeType>(IBridgePlugin plugin, Func <BridgeType, DataType> converter) { plugin.AddType <DataType>(RosUtils.GetMessageType <BridgeType>()); plugin.AddSubscriberCreator <DataType>( (instance, topic, callback) => (instance as RosBridgeInstance).AddSubscriber <BridgeType>(topic, rawData => callback(converter(RosSerialization.Unserialize <BridgeType>(rawData))) ) ); }