xockets.io (pronounced Zockets IO, for XPages websockets) plugin adds support for browser based websockets in the XPages runtime. It leverages Netty.io websocket libraries to easily scale to a large number of users. This plugin replaces the websocket implementation found in the webshell-xpages-ext-lib. Below is a list of the latest features available in xockets.io: xockets.io as of 3.0.4-leak-fix -New Features: Upgraded to netty 4.1.9 -Fixes Fixed leak on user collection. UserCleanup process wasn't working properly WARNING: This build has not been tested on releases prior to FP8 xockets.io as of 3.0.3 (FP8 Compatibility) New Features: Upgraded netty to 4.1.12, upgraded apache commons jars where possible without breaking backward compatibility (some later releases do not run on java 6) -Fixes: Split the update site into two for server and designer as there is a compatibility problem with FP8 and locally installing DAS plugin Added class references instead of instances for static utility classes (nashorn does not support accessing static methods from instances) Removed hard coded path references in chat.nsf sample application. -Breaking Changes: For any variables that are put into scope by the plugin alter your code to access correctly from nashorn script engine (e.g. bundleUtils.load changes to bundleUtils.static.load) Be sure to refactor any existing java scripts that attempt to access these classes in a non-static way See the bundled chat application for examples NOTE: reference to the "static" keyword will render as an error in DDE. You can safely ignore that error message WARNING: This build has not been tested on releases prior to FP8 xockets.io as of 3.0.2 -New Features include: textOnly (e.g. msg.onlyText = true;) flag sends only the text portion of the message to the target recipient(s) dataOnly (e.g. msg.onlyData = true;) flag sends just the data portion of the message to the target recipient(s) both of the above flags help to limit the payload size to the targets by removing message meta data DSAPI plugin project for Visual Studio for a very specific use case handling certificate based authentication (windows only for now) -Fixes: fix reload scripts to included intervaled scripts fixed null pointer in XocketsPhaseListener xockets.io as of 3.0.1 -New Features include: A new event method to script against called onBeforeMessage (fires just before a message will be sent, used for filters, other validations) A new SocketMessage attribute called shortCircuit. If set to true halts sending of message (for use with onBeforeMessage) Support for includes / use across multiple script libraries using for example: JavaScript external library refernces would be ///use lib1.ssjs, lib2.ssjs, lib3.ssjs Ruby's external references would be #///use lib1.rb, lib2.rb, lib3.rb Support for sharing application and session managed beans (note, only good for sharing state, do not try to perform notes operations) Additional utility objects are now available in script scope as well (e.b. b64Utils, strUtils, ioUtils, fileUtils etc) Group chat application will be available soon on OpenNTF that will demonstrate these new features. -Fix: A new parameter to override the default character set when pulling in scripts (see WEBSOCKET_CHARSET=xxxx). xockets.io as of 3.0.0 -New Features include: URI Listeners (replaced Rhino SocketEventListeners) "Intervaled" Scripts to fire on a specific interval Support for the following scripting runtimes (Groovy, JRuby, Jython, BeanShell, Agents(LS and Java), and Rhino's JavaScript) -Fix: Routing a message to a user on a specific page has been restored. Was broken in prior release (e.g. /chat.nsf/chat.xsp/CN=admin admin/OU=...) -Breaking Changes Introduced: Refactor any scripts that registered via addSocketEventListener methods to use the new methods for URI Listeners (see chat.nsf sample) A file extension must be used with the ssjs or file design elements (e.g. logger.ssjs, or logger.py) xockets.io as of 2.0.8 -New feature added to allow event observer scripts for all connected clients xockets.io as of 2.0.7 -New feature added to allow a collection of messages to be sent in one call xockets.io as of 2.0.6 -Fix applied for multiple targets in a message targeting URIs xockets.io as of 2.0.5 -Updated the underlying Netty server to 4.1.1 due to security vulnerability in 4.1.0 xockets.io as of 2.0.4 -Fixed issue with IE11 disconnecting after 30 seconds of inactivity -Updated underlying Netty server to the final release of 4.1.0 -Fixed issue with remove-script command not working from console xockets.io as of 2.0.3 -Fixed embedded client's max message size. It now uses the WEBSOCKET_MAX_MSG_SIZE value from the server -Fixed reload-scripts and show-scripts command line call from the console (last release I had disabled / removed accidentally) -Added enhancement to allow multiple targets in a SocketMessage. New attribute introduced "targets". Use instead of "to" field when sending to multiple -Added enhancement to allow multiple websocket connections per user based on URI. xockets.io as of 2.0.2 -Enhanced to accomodate a simple proxy to allow the websocket server and Domino http server to run off of one port -Setup xockets.io to use Netty's tc-native SSL feature. It uses OpenSSL to handle network encryption. I had to back-port the java code to 1.6 since and create a custom build. Currently the OpenSSL feature is windows only, Linux is supported, I just haven't had time to create the build. -Code cleanup / refactoring xockets.io as of 2.0.1 -Fixed a problem with the plugin importing to the designer client (indirect reference to unneeded plugin removed) -Updated the logic for message durability to save an inbound message during the onMessage method instead of during the send. -(NOT TESTED YET) Added native transport settings WEBSOCKET_NATIVE_TRANSPORT for Linux based systems only (reduces memory consumption and GC overhead) -Refactored NettyTestClient to use main method invocation so the loaded websocket clients stay loaded throughout the entire test. -Refactored some of the notes api java operations for performance (e.g. use unid instead of view lookup where possible) -Updated Config object to be based off an interface for easier substitutions during testing. -Updated some netty calls to reduce memory overhead and GC -(NOT TESTED) Removed the XPage 9.0.1 plugin references. This might allow the websocket plugin to function in 8.5.3 xockets.io as of 2.0.0 -Use of Netty as the websocket/networking engine -Increased scale (tested locally with 15k websocket connections / users) -Granular control of threading, send / receive buffers to tweak performance of the server -Configuration can be stored in a profile document, or notes.ini (both use name/value pairs) -You will no longer be restricted to using the server's Id. Any Id can be configured to integrate with the Domino server -Server.id password no longer has to be empty (websocket server initializes with trusted session, then reverts to configured userId) -Rhino embedded JavaScript clients can be registered and run under their own Ids as well (e.g. chatapp user) -Added Origin based security patch to prohibit Cross-Site Websocket Hijacking (CSWSH) (you must configure allowed Origins e.g. mysite.com, yoursite.com, oursite.com) -Added security patch to make sure the logged in user has at least reader access to the nsf if the websocket url contains the nsf as part of its path. -Added LRU SystemCache reference available to your Rhino JavaScript libraries to share and persist data between SSJS library invocations (scoped to class, so be careful with your keys). Please see xockets.io.setup.pdf for more detailed information