diff --git a/vortex-web-client/vortex-web-client-tests.ts b/vortex-web-client/vortex-web-client-tests.ts new file mode 100644 index 000000000..216e268c5 --- /dev/null +++ b/vortex-web-client/vortex-web-client-tests.ts @@ -0,0 +1,23 @@ +/// + +var runtime = new dds.runtime.Runtime(); +runtime.connect("ws://localhost:9000", "user:pass"); + +var tqos = new dds.TopicQos(); +var chatTopic = new dds.Topic(0, 'ChatMessage', tqos); +runtime.registerTopic(chatTopic); + +var writerQos = new dds.DataWriterQos(); +var writer = new dds.DataWriter(runtime, chatTopic, writerQos); + +writer.write({ + user: "John Smith", + msg : "Hello World!" +}); + +var readerQos = new dds.DataReaderQos(); +var reader = new dds.DataReader(runtime, chatTopic, readerQos); + +reader.addListener(function(msg) { + console.log(JSON.stringify(msg)); +}); diff --git a/vortex-web-client/vortex-web-client.d.ts b/vortex-web-client/vortex-web-client.d.ts new file mode 100644 index 000000000..de665c780 --- /dev/null +++ b/vortex-web-client/vortex-web-client.d.ts @@ -0,0 +1,488 @@ +// Type definitions for Vortex Web 1.2.0p1 +// Project: http://www.prismtech.com/vortex/vortex-web +// Definitions by: Stefan Profanter +// Definitions: https://github.com/borisyankov/DefinitelyTyped + +/* + Vortex Web + + This software and documentation are Copyright 2010 to 2015 PrismTech + Limited and its licensees. All rights reserved. See file: + + docs/LICENSE.html + + for full copyright notice and license terms. + */ + +declare module DDS { + + + /** + * Base class for all policies + */ + interface Policy { + + } + + /** + * History policy + */ + export enum HistoryKind { + KeepAll = 0, + KeepLast = 1 + } + + /** + * History policy + */ + export class History implements Policy { + /** + * KeepAll - KEEP_ALL qos policy + */ + KeepAll:any; + /** + * KeepLast - KEEP_LAST qos policy + */ + KeepLast:any; + } + + /** + * Reliability Policy + * @example var qos = Reliability.Reliable + */ + export enum ReliabilityKind { + Reliable = 0, + BestEffort = 1 + } + + /** + * History policy + */ + export class Reliability implements Policy { + /** + * Reliable - 'Reliable' reliability policy + */ + Reliable:any; + /** + * BestEffort - 'BestEffort' reliability policy + */ + BestEffort:any; + } + + /** + * Partition policy + */ + export class Partition implements Policy { + /** + * Create new partition policy + * + * @param policies - partition names + * @example var qos = Partition('p1', 'p2') + */ + constructor(...policies:string[]); + } + + /** + * Content Filter policy + */ + export class ContentFilter implements Policy { + /** + * Create new content filter policy + * + * @param expr - filter expression + * @example var filter = ContentFilter("x>10 AND y<50") + */ + constructor(expr:string); + } + + /** + * Time Filter policy + */ + export class TimeFilter implements Policy { + /** + * Create new content filter policy + * + * @param period - time duration (unit ?) + * @example var filter = TimeFilter(100) + */ + constructor(period:number); + } + + /** + * Durability Policy + */ + export enum DurabilityKind { + Volatile = 0, + TransientLocal = 1, + Transient = 2, + Persistent = 3 + } + + /** + * Durability Qos Policy + */ + export class Durability implements Policy { + /** + * Volatile - Volatile durability policy + */ + Volatile:any; + /** + * TransientLocal - TransientLocal durability policy + */ + TransientLocal:any; + /** + * Transient - Transient durability policy + */ + Transient:any; + /** + * Persistent - Persistent durability policy + */ + Persistent:any; + } + + + interface EntityQos { + /** + * Creates any of the DDS entities quality of service, including DataReaderQos and DataWriterQos. + * + * @param policies - list of policies for the Qos entity + */ + new (...policies:Policy[]): EntityQos; + + /** + * Adds the given policy to this instance. + * @param policy - the policy to add + * @return A new copy of this instance with the combined policies + */ + add (policy:Policy): EntityQos; + } + + + /** + * Topic quality of service object + */ + export var TopicQos:EntityQos; + /** + * DataReader quality of service object + */ + export var DataReaderQos:EntityQos; + + /** + * DataWriter quality of service object + */ + export var DataWriterQos:EntityQos; + + export class Topic { + /** + * Creates a `Topic` in the domain `did`, named `tname`, having `qos` Qos, + * for the type `ttype` whose registered name is `tregtype` + * @param {number} did - DDS domain ID + * @param {string} tname - topic name + * @param {TopicQos} qos - topic Qos + * @param {string} ttype - topic type. If not specified, a generic type is used. + * @param {string} tregtype - topic registered type name. If not specified, 'ttype' is used. + */ + constructor(did:number, tname:string, qos:EntityQos, ttype?:string, tregtype?:string); + + /** + * Called when topic gets registered in the runtime + */ + onregistered():void; + + /** + * Called when topic gets unregistered in the runtime + */ + onunregistered():void; + } + + export class DataReader { + /** + * Creates a `DataReader` for a given topic and a specific in a specific DDS runtime. + * + * A `DataReader` allows to read data for a given topic with a specific QoS. A `DataReader` + * * goes through different states, it is intially disconnected and changes to the connected state + * when the underlying transport connection is successfully established with the server. At this point + * a `DataReader` can be explicitely closed or disconnected. A disconnection can happen as the result + * of a network failure or server failure. Disconnection and reconnections are managed by the runtime. + * + * @param runtime - DDS Runtime + * @param topic - DDS Topic + * @param qos - DataReader quality of service + */ + constructor(runtime:Runtime, topic:Topic, qos:EntityQos); + + resetStats():void; + + /** + * Attaches the listener `l` to this data reader and returns + * the id associated to the listener. + * @param l - listener code + * @returns listener handle + */ + addListener(l:(msg:any) => void):number; + + /** + * removes a listener from this data reader. + * @param idx - listener id + */ + removeListener(idx:number):void; + + /** + * closes the DataReader + */ + close():void; + } + + export class DataWriter { + /** + * Creates a `DataWriter` for a given topic and a specific in a specific DDS runtime + * + * defines a DDS data writer. This type + * is used to write data for a specific topic with a given QoS. + * A `DataWriter` goes through different states, it is intially disconnected and changes to the connected + * state when the underlying transport connection is successfully established with the server. + * At this point a `DataWriter` can be explicitely closed or disconnected. A disconnection can happen + * as the result of a network failure or server failure. Disconnection and reconnections are managed by the + * runtime. + * + * @param runtime - DDS Runtime + * @param topic - DDS Topic + * @param qos - DataWriter quality of service + */ + constructor(runtime:Runtime, topic:Topic, qos:EntityQos); + + /** + * Writes one or more samples. + * @param ds - data sample + */ + write(...ds:any[]):void; + + /** + * Closes the DataWriter + */ + close():void; + } + + + export class DataCache { + /** + * Constructs a `DataCache` with a given `depth`. If the `cache` parameter + * is present, then the current cache is initialized with this parameter. + * + * Provides a way of storing and flexibly accessing the + * data received through a `DataReader`. A `DataCache` is organized as + * a map of queues. The depth of the queues is specified at construction + * time. + * + * @param depth - cache size + * @param cache - cache data structure + */ + constructor(depth:number, cache:any); + + /** + * Register a listener to be notified whenever data which matches a predicate is written into the cache. + * If no predicate is provided then the listeners is always notified upon data inserion. + * + * @param l - listener function + * @param p - predicate + */ + addListener(l:(data:any) => void, p?:(data:any) => boolean):void; + + /** + * Write the element `data` with key `k` into the cache. + * + * @param k - data key + * @param data - data value + * @returns the written data value + */ + write(k:any, data:any):any; + + /** + * Same as forEach but applied, for each key, only to the first `n` samples of the cache + * + * @param f - the function to be applied + * @param n - samples set size + */ + forEachN(f:(data:any) => any, n:number):any[]; + + /** + * Execute the function `f` for each element of the cache. + * + * @memberof! dds.DataCache# + * @param f - the function to be applied + * @returns results of the function execution + */ + forEach(f:(data:any) => any):any[]; + + /** + * Returns a cache that is the result of applying `f` to each element of the cache. + * + * @param f - the function to be applied + * @returns A cache holding the results of the function execution + */ + map(f:(data:any) => any):DataCache; + + /** + * Returns the list of elements in the cache that satisfy the predicate `f`. + * + * @param f - the predicate to be applied to filter the cache values + * @returns An array holding the filtered values + */ + filter(f:(data:any) => boolean):any[]; + + /** + * Returns the list of elements in the cache that doesn't satisfy the predicate `f`. + * + * @returns An array holding the filtered values + * @see DataCache#filter + */ + filterNot(f:(data:any) => boolean):any[]; + + /** + * Returns the values included in the cache as an array. + * + * @return All the cache values + */ + read():any[]; + + /** + * Returns the last value of the cache in an array. + * + * @return the last value of the cache + */ + readLast():any; + + /** + * Returns all the values included in the cache as an array and empties the cache. + * + * @return All the cache values + */ + takeAll():any[]; + + /** + * Returns the `K`ith value of the cache as Monad, ie: `coffez.Some` if it exists, `coffez.None` if not. + * + * @return the 'k'th value + */ + take():any; + + /** + * Takes elements from the cache up to when the predicate `f` is satisfied + * + * @param f - the predicate + * @return taken cache values + */ + takeWithFilter(f:(data:any) => boolean):any[]; + + /** + * Return `coffez.Some(v)` if there is an element in the cache corresponding to the + * key `k` otherwise it returns `coffez.None`. + * + * @param k - key + */ + get(k:any):any; + + /** + * Return `coffez.Some(v)` if there is an element in the cache corresponding to the + * key `k` otherwise executes `f` and returns its result. + * + * @param k - key + * @param f - the function to apply + */ + getOrElse(k:any, f:(data:any)=> any):any; + + /** + * folds the element of the cache using `z` as the `zero` element and + * `f` as the binary operator. + * + * @param z - initial value + * @param {function} f - reduce function + */ + fold(z:any, f:(data:any) => any):void; + + /** + * clears the data cache + */ + clear():void; + + } + + interface Runtime { + /** + * Constructs a DDS Runtime object + * + * maintains the connection with the server, re-establish the connection + * if dropped and mediates the `DataReader` and `DataWriter` communication. + */ + new (): Runtime; + + /** + * Connect the runtime to the server. If the runtime is already connected an exception is thrown + * + * @param srv - Vortex Web server WebSocket URL + * @param authToken - Authorization token + */ + connect(server:string, authToken?:string): void; + + /** + * Disconnects, withouth closing, a `Runtime`. Notice that upon re-connection all existing + * subscriptions and publications will be re-restablished. + */ + disconnect(): void; + + /** + * Registers the provided Topic. + * + * @param t - Topic to be registered + */ + registerTopic(t:Topic): void; + + /** + * Function called when runtime is connected. + * + * @param e + */ + onconnect(e:any): void; + + + /** + * Function called when runtime is disconnected. + * + * @param e + */ + ondisconnect(e:any): void; + + /** + * Closes the DDS runtime and as a consequence all the `DataReaders` and `DataWriters` that belong to this runtime. + * + */ + close(): void; + + /** + * Checks whether the Runtime is connected. + * @return `true` if connected, `false` if not + */ + isConnected() : boolean; + + /** + * Checks whether the Runtime is closed. + * @return `true` if connected, `false` if not + */ + isClosed() : boolean; + } + + export var runtime:{ + Runtime : Runtime; + } + + export var VERSION:string; +} + +/** + * Defines the core Vortex-Web-Client javascript library. It includes the JavaScript API for DDS. This API allows + * web applications to share data among them as well as with native DDS applications. + */ +declare +var dds:typeof DDS; + +