Article
Robert Cemper · Feb 8, 2019 2m read

Client for WebSockets based on CSP

This is a coding example working on Caché 2018.1.3 and IRIS 2020.2 
It will not be kept in sync with new versions 
It is also NOT serviced by InterSystems Support !

WebSockets as a communication technology wins increasing importance.
In the SAMPLES namespace, you find a nice example for running a WebSocket Server.
There is also a useful example for a Browser Client. But it is still in the browser. 

My point is:
How to consume the output of a WebSocket Server in your application?

 

You may take the engineering approach and use the available tools and classes to handle
everything around protocol switching, encoding, encryption, .... 
It is great if you are able to achieve this and if you are willing to invest the required time and find a sponsor to support it.

On the other hand, this is re-inventing the wheel. This works already done in almost every browser.
e. g JavaScript has excellent and verified libraries to support what you need.

There are 2 versions with visible and hidden display during operation.
WSCSP.reverseVerbose.cls and WSCSP.reverseHidden.cls

So I took a closer look of the CSP page included in SAMPLES and modified it to handle the request
and return the result to the Caché server using the good old Hyperevent.

2 issues required more investigation:

  • How to launch the page on the browser without manual intervention?
  • How to terminate the browser / tab after completion.

Launching the browser was solved once I found the location of the browser exe.
Then starting it using CPIPE or $ZF(-1,...) [or the new $ZF??  for newer versions ] worked immediately.

You compose your string from BrowserLocation_CSPpage_ InquiryMessage and of it goes:

 // either
 do $zf(-1,browser_page_msg)

 // or
 open dev:browser_page_msg:0 write $t close dev

You have to be aware that all this an asynchronous environment and you have to check completion more than once.

It is an example and it should help you to adapt it to your individual needs.

 

70
0 0 280 0