Services
classDiagram class CalibrationService~T~{ #node +calibrate()* #start() #stop() #suspend() } DataObjectService~T~<|--CalibrationService~T~ class DataFrameService~T~{ +insertFrame() +findBefore() +findAfter() +findByDataObject() -_findTimestamp() } DataService~I,T~<|--DataFrameService~T~ class DataObjectService~T~{ +insertObject() +insert() +findByDisplayName() +findByPosition() +findByParentUID() +findBefore() +findAfter() -_findTimestamp() } DataService~I,T~<|--DataObjectService~T~ class DataService~I,T~{ #driver +priority -_buildDriver() -_destroyDriver() +setPriority() +findByUID() +findOne() +findAll() +insert() +count() +delete() +deleteAll() } Service<|--DataService~I,T~ class DataServiceDriver~I,T~{ +dataType #options +findByUID()* +findOne()* +findAll()* +count()* +insert()* +delete()* +deleteAll()* } class DataServiceOptions~T~ { <<interface>> +serialize +deserialize +keepChangelog } Service<|--DataServiceDriver~I,T~ ServiceOptions<|..DataServiceOptions~T~ class QuerySelector~T~ { <<interface>> +$eq +$gt +$gte +$lt +$lte +$in +$nin +$elemMatch } class RootQuerySelector~T~ { <<interface>> +$and +$or } class FindOptions { <<interface>> +dataType +limit +sort } class MemoryDataService~I,T~{ #_data +findByUID() +findOne() +findAll() +insert() +delete() +count() +deleteAll() } DataServiceDriver~I,T~<|--MemoryDataService~I,T~ class MemoryQueryEvaluator{ -isRegexQuery()$ +evaluateComponent()$ +evaluate()$ +getValueFromPath()$ #evaluatePath()$ #evaluateSelector()$ #evaluateComparisonSelector()$ #evaluateArraySelector()$ #evaluateOp()$ } class RemoteService{ #nodes #localServices #remoteServices #promises +model -_registerServices() #registerPromise() #getPromise() +localPush() +localPull() +localEvent() +localServiceCall() +remotePush()* +remotePull()* +remoteEvent()* +remoteServiceCall()* +registerNode() +registerService() } class RemoteServiceProxy~T,S~{ #options #service +get() +set() +createHandler() } class RemoteServiceOptions { <<interface>> +uid +service } class RemotePullOptions { <<interface>> +clientId } class RemotePushOptions { <<interface>> +clientId +broadcast } Service<|--RemoteService Service<|--RemoteServiceProxy~T,S~ ProxyHandler~T~<|..RemoteServiceProxy~T,S~ PullOptions<|..RemotePullOptions PushOptions<|..RemotePushOptions RemoteServiceProxy~T,S~ -- RemoteServiceOptions class Service{ +uid -_ready +model +dependencies +addDependency() #generateUUID() +setUID() +isReady() +emit() +once() +logger() } class ServiceOptions { <<interface>> +uid } AsyncEventEmitter<|--Service class TrajectoryService~T~{ +model #options -_bindService() +findCurrentTrajectory() +findTrajectoryByRange() +findTrajectories() +appendPosition() } class TrajectoryServiceOptions { <<interface>> +dataService +autoBind +defaultUID } DataService~I,T~<|--TrajectoryService~T~ DataServiceOptions~T~<|..TrajectoryServiceOptions TrajectoryService~T~ -- TrajectoryServiceOptions class WorkerServiceProxy{ #options -_promises -_onOutput() +get() +createHandler() } class WorkerServiceCall { <<interface>> +id +serviceUID +method +parameters } class WorkerServiceResponse { <<interface>> +id +success +result } ServiceProxy~S~<|--WorkerServiceProxy
Types of services
DataServiceDriver
: A data service driver is storage interface for any data service.DataService
: A data service is meant to store serializable data. It can be accessed by any node in the model and takes a DataServiceDriver.DataObjectService
: A data service for handling data objects. Every positioning model includes an in-memory data object service.DataFrameService
: A data service for handling data frames.NodeDataService
: A data service that stores temporary node data such as intermediate processing results.TrajectoryService
: A data service that appends the processed position of a data object to a trajectory.
RemoteNodeService
: The remote node service allows the registration of remote nodes.TimeService
: A time service can be accessed by every node to retrieve the current time. It can be used to synchronize the time with multiple systems.LocationBasedService
: A developer friendly service for pulling or watching for position changes.
DataServiceDriver
A data service driver is a database storage interface for storing any serializable object (that is any object using the @SerializableObject()
decorator) with any type of identifier.
The driver should implement the following methods:
findByUID(id: I): Promise<T>
: Find the data by a UID.findOne(query?: FilterQuery<T>, options?: FindOptions): Promise<T>
: Find one item based on an optional query.findAll(query?: FilterQuery<T>, options?: FindOptions): Promise<T[]>
: Find all items based on an optional query.count(query?: FilterQuery<T>): Promise<number>
: Count all items.insert(id: I, object: T): Promise<T>
: Insert a new item.delete(id: I): Promise<void>
: Delete an item.deleteAll(query?: FilterQuery<T>): Promise<void>
: Delete all items. The methods are similar to the Node.js MongoDB API but with more limited features that would still allow other drivers other than MongoDB.
LocationBasedService
A location-based service is a developer friendly service for retrieving a location of an object.