/Example.WebSocketAPI.Javascript.TRWebSocketController

Created by Platform Services GitHub tool on Sun Oct 01 2017

Primary LanguageJavaScriptMIT LicenseMIT

Elektron WebSocket Controller

Table of Content

Overview

The Elektron WebSocket Controller is a Javascript interface used to manage all communication to the Thomson Reuters Elektron WebSocket server delivering realtime market data to the browser. Designed as a reusable container, this simple Javascript framework can be used in a variety of simple web-based applications and prototypes delivering realtime content within your browser.

For any question related to this component, please use the Developer Community Q&A Forum.

Note: To be able to ask questions and to benefit from the full content available on the TR Developer Community portal we recommend you to register here or login here.

Disclaimer

The source code presented in this project has been written by Thomson Reuters only for the purpose of illustrating the concepts of interfacing with Thomson Reuters Elektron WebSocket service. It has not been tested for a usage in production environments.

Package

Software components used:

  • Elektron WebSocket API - Thomson Reuters interface to access Elektron real-time market data.

  • Pako (v1.0.6) - Nodejs-based ibrary used to decompress Elektron Machine Readable News (MRN) headlines and stories. Applications utilizing the news capabilities offered within this interface must include the 'zlib.js' script within their HTML.

    Note: The 'zlib.js' file was prepared by browserfying the pako library. This is a process to bring the capabilities of the node.js library to the browser. For convenience and interest, I've included the node.js-based file called 'pako.js' which I used to create the 'zlib.js' package. Refer to 'pako.js' file for general instructions as to how I did this.

  • Access to the Thomson Reuters Advanced Distribution Server (ADS) version 3.2 or greater with an enabled WebSocket service.

Browser support:

Usage

The package contains a few examples demonstrating basic usage.

Retrieving realtime quotes:

// Define our quote controller
let quoteController = new TRWebSocketController();

// Connect into the WebSocket server
quoteController.connect("ewa:15000", "user");

// Request for streaming quotes for the company Thomson Reuters
quoteController.requestData("TRI.N");

// Capture market data quotes
quoteController.onMarketData(function(msg) {
    console.log(msg);
}

Retrieving realtime news headlines and stories:

// Define our quote controller
let newsController = new TRWebSocketController();

// Connect into the WebSocket server
newsController.connect("ewa:15000", "user");

// Request for news content from the streaming headlines and stories service (MRN_STORY).  
newsController.requestNews("MRN_STORY");

// Capture streaming news content
newsController.onNews(function(ric, story) {
    console.log(story.headline);
    console.log(story.body);
}

Manage status events from our server:

...

controller.onStatus(function(eventCode, msg) {
    switch (eventCode) {                    
        case this.status.connected:
            console.log("Connection to WebSocket server successfull");
            break;
                    
        case this.status.disconnected:
            console.log("Connection to server is Down/Unavailable");
            break;
                    
        case this.status.loginResponse:
            console.log("Login status: " + msg);
            break;
                    
        case this.status.msgStatus:
            console.log("Item status response: " + msg);               
            break;
    }
});

Interface

  • TRWebSocketController()

    Constructs a new controller managing all communication to an Elektron WebSocket server endpoint.

  • TRWebSocketController.connect(server, user, appId="256", position="127.0.0.1");

    Initiate an asynchronous connection to the specified server endpoint.

    • server

      IP/hostname and port of the Elektron Advanced Data Server (ADS) managing all communication. Required. Parameter syntax:

      <IP/hostname>:<port>.  Eg: ewa:15000
      
    • user / appId / position

      These 3 parameters are used as authentication to the ADS server. Refer to the WebSocket API documentation for specific details of each parameter.

  • TRWebSocketController.requestData(ric, options={})

    Request for data from the WebSocket server based on the specified item.

    • ric

      String or array of names identifying the Reuters Instrument Code(s), i.e. RIC(s). Required.

      Eg: 'TRI.N' (Single)
      Eg: ['TRI.N', 'AAPL.O'] (Batch)

    • options

      Collection of properties defining the different options for the request. Optional.

       Options 
       {
           Service: <String>     // Name of service providing data. 
                                 // Default: service defaulted within ADS.
           Streaming: <Boolean>  // Boolean defining streaming (subscription) or Non-streaming (snapshot).  
                                 // Default: true (streaming).
           Domain: <String>      // Domain model for request.  
                                 // Default: MarketPrice.
           View: <Array>         // Fields to retrieve.  Eg: ["BID", "ASK"]
                                 // Default: All fields.
       }
  • TRWebSocketController.requestNews(ric, serviceName=null)

    Request to open the news stream on the NTA (NewsTextAnalytics) domain. By executing this method, the TRWebSocketController will automatically manage the collection and decompressing of all compressed segments coming from the NTA domain. Once the complete contents arrives from the service, the contents of the NTA envelope will be presented as a JSON object to the onNews() callback.

    • ric

      String or array of names identifying the Reuters Instrument Code(s), i.e. RIC(s) used to represent the news content set of interest. Required.

      Valid news RICs are:

        MRN_STORY:    Real-time News (headlines and stories)
        MRN_TRNA:     News Analytics: Company and C&E assets
        MRN_TRNA_DOC: News Analytics: Macroeconomic News and Events
        MRN_TRSI:     News Sentiment Indices
      
    • serviceName

      The name of the service providing the news data. Optional. Default: service defaulted within ADS.

  • TRWebSocketController.closeRequest(ric, domain="MarketPrice")

    Close the open streaming requests as identified by the ric(s). Required.

    • ric

      String or array of names identifying the open streams. Required.

    • domain

      The domain model associated with the specified items (ric). Refer to the documentation for all valid domain models. Optional. Default: 'MarketPrice'.

  • TRWebSocketController.closeAllRequests()

    Close all outstanding streaming requests.

  • TRWebSocketController.loggedIn()

    Determine if we have successfully connected and logged in to our WebSocket server.
    Returns boolean.

  • TRWebSocketController.onStatus(eventFn)

    Callback to capture status events generated from controller interaction.

    • eventFn

      Callback to capture events using the signature: eventFn(eventCode, msg).

      • eventCode

        Code identifying the event. Values:

        • status.connected

          Successfully connected into the Elektron WebSocket server.
          The 'msg' object is not defined.

        • status.disconnected

          Connection failed to our Elektron WebSocket server.
          The 'msg' object is not defined.

        • status.loginResponse

          After a successfull connection, a login request to the server is submitted. The login response will provide results of the request within the 'msg' object. The 'msg' object contains the Elektron WebSocket loging response. See the WebSocket API documentation for details.

        • status.msgStatus

          Status response based on request for data.
          The 'msg' object contains the Elektron WebSocket status message. See the WebSocket API documentation for details.

        • status.msgError

          Error response related to invalid usage of the request messages.
          The 'msg' object contains a Text field indicating the error.

        • status.processingError

          Generic controller processing error using resulting from issues with environment/browser etc.
          The 'msg' object the error text.

      • msg

        Depending on the event, the 'msg' object will contain the details of the response.

  • TRWebSocketController.onMarketData(eventFn)

    Callback to capture market data message resulting from requestData() requests.

    • eventFn

      Callback signature: eventFn(msg)

      • msg

        Refer to the WebSocket API documentation for the data Messages received.

  • TRWebSocketController.onNews(eventFn)

    Callback to capture news events resulting from requestNews() request.

    • eventFn

      Callback signature: eventFn(ric, msg)

      • ric

        RIC name of the News content set. See requestNews() for details of valid News RICs.

      • msg

        The contents of the NTA envelope containing all related fragments for the news events. The msg object is the uncompressed FRAGMENT portion of the news updates.

Contributing

Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests to us.

Authors

  • Nick Zincone - Release 1.0. Initial version

License

This project and the Pako library are licensed under the MIT License - see the LICENSE.md file for details.