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.