Sending request messages to a session filter
A client session can send a request message containing typed data directly to each client session in the set of connected client sessions that match a specified session properties filter. The receiving client sessions can then send a response message containing typed data. The request and response messages are addressed through the same message path.
For more information about session properties and how to filter connected client sessions using their properties, see Session properties and Session filtering.
- A control client session sends a request message, specifying the filter that selects the client sessions to receive the request and specifying the message path to send the message through.
- The Diffusion server evaluates the query and sends the message on to connected client sessions whose session properties match the filter
- The client sessions in the filtered set each receive the request message through a request stream.
- Each client session uses a responder to send a response to the request message.
- The control client session receives responses from each of the clients sessions specified by the filter.
The request messages and the response messages contain typed values. The messages can contain data of one of the following types: JSON, binary, string, 64-bit integer, or double. The response messages are not required to be the same data type as the request or as the response messages from other client sessions.
Sending a request message to a filter
Required permissions:
permission for the specified message path and permissionUsually, it is a control client session in your organization's backend that sends messages to a filter. For more information about defining a session filter, see Session filtering.
- The query to use to filter which client sessions to send the requests to
- The message path to send the request and receive the responses through
- The request message
- The datatype of the request message
- The datatype of the response message
var handler = { onResponse : function(sessionID, response) {}, onResponseError : function(sessionID, error) {}, onError : function(error) {} } control.messages.sendRequestToFilter(filter, 'foo', 'Hello clients', handler, diffusion.datatypes.json(), diffusion.datatypes.json());
//Establish control sesssion final Session control = Diffusion.sessions().principal("control").password("password").open("ws://localhost:8080"); //Obtain the MessagingControl feature final MessagingControl messagingControl = control.feature(MessagingControl.class); //Create a JSON object to send as a request final JSON request = Diffusion.dataTypes().json().fromJsonString("\"hello\""); //Send the request to a message path "foo", to all sessions which do not have a 'control' principal and wait for (at most) 5 seconds until the response (number of responses) is received. final int numberOfResponses = messagingControl.sendRequestToFilter("$Principal NE 'control'", "foo", request, JSON.class, JSON.class).get(5, TimeUnit.SECONDS);
Responding to messages sent to a filter
Required permissions:
for the specified message pathTo the receiving client session, a request message sent to a filter is the same as a request message sent directly to the session. The receiving client session responds in the same way.
See Responding to messages sent to a session for details.