55
66import { EventEmitter } from "eventemitter3" ;
77import type {
8- RosbridgeCallServiceMessage ,
8+ RosbridgeMessage ,
99 RosbridgeServiceResponseMessage ,
1010} from "../types/protocol.ts" ;
11- import { isRosbridgeServiceResponseMessage } from "../types/protocol.ts" ;
11+ import {
12+ isRosbridgeCallServiceMessage ,
13+ isRosbridgeServiceResponseMessage ,
14+ } from "../types/protocol.ts" ;
1215import type Ros from "./Ros.js" ;
1316import { v4 as uuidv4 } from "uuid" ;
1417
@@ -19,9 +22,8 @@ export default class Service<TRequest, TResponse> extends EventEmitter {
1922 /**
2023 * Stores a reference to the most recent service callback advertised so it can be removed from the EventEmitter during un-advertisement
2124 */
22- #serviceCallback:
23- | ( ( rosbridgeRequest : RosbridgeCallServiceMessage < TRequest > ) => void )
24- | null = null ;
25+ #serviceCallback: ( ( rosbridgeRequest : RosbridgeMessage ) => void ) | null =
26+ null ;
2527 isAdvertised = false ;
2628 /**
2729 * Queue for serializing advertise/unadvertise operations to prevent race conditions
@@ -118,6 +120,11 @@ export default class Service<TRequest, TResponse> extends EventEmitter {
118120
119121 // Store the new callback for removal during un-advertisement
120122 this . #serviceCallback = ( rosbridgeRequest ) => {
123+ if ( ! isRosbridgeCallServiceMessage < TRequest > ( rosbridgeRequest ) ) {
124+ throw new Error (
125+ `Invalid message received on service channel: ${ JSON . stringify ( rosbridgeRequest ) } ` ,
126+ ) ;
127+ }
121128 const response = { } ;
122129 let success : boolean ;
123130 try {
@@ -227,6 +234,11 @@ export default class Service<TRequest, TResponse> extends EventEmitter {
227234 }
228235
229236 this . #serviceCallback = ( rosbridgeRequest ) => {
237+ if ( ! isRosbridgeCallServiceMessage < TRequest > ( rosbridgeRequest ) ) {
238+ throw new Error (
239+ `Invalid message received on service channel: ${ JSON . stringify ( rosbridgeRequest ) } ` ,
240+ ) ;
241+ }
230242 ( async ( ) => {
231243 try {
232244 this . ros . callOnConnection ( {
0 commit comments