Hi,

I made an example application for this feature:

https://github.com/martin-g/blogs/pull/3

The latest version of the feature is here: https://github.com/apache/wicket/pull/24

--
Juha Syrjälä


On 10/24/2012 11:28 AM, Martin Grigorov wrote:
Hi,

Thanks for your patch!
I'll take a look at it soon.
In the meantime do you want to provide a Pull Request with a demo of
the new functionality for
https://github.com/martin-g/blogs/tree/master/wicket6-native-websockets
?

On Mon, Oct 22, 2012 at 10:37 PM, Mikko Tiihonen
<[email protected]> wrote:
Hi,

Few weeks ago I created a patch that provides a way to push convert external
events into wicket events that allow components to update themselves and
push the results back to all browsers that have open websocket connection to
the wicket application.

I put the first version of the patch here
https://issues.apache.org/jira/browse/WICKET-4832

The API is pretty simple:

Pass reference to wicket application to any non-wicket thread:
   WebSocketPushBroadcaster pusher = new WebSocketPushBroadcaster();
   pusher.broadcastAll(applicationRef, new ExternalSourcePush("pass relevant
data to components"));
where
   static class ExternalSourcePush implements IWebSocketPushMessage { ... }

The wicket components that have active websocket connections will then
receive a normal wicket websocket event:

   public void onEvent(IEvent<?> event) {
     if (event.getPayload() instanceof WebSocketPushPayload) {
       WebSocketPushPayload wsEvent = (WebSocketPushPayload)
event.getPayload();
       ExternalSourcePush data = (ExternalSourcePush) wsEvent.getMessage()

       label.setDefaultModelObject(data.message);
       wsEvent.getHandler().add(label);
     }
   }

Alternatively you can just pass a specific wicket websocket
ConnectionMessage and use that as a context to send the events to.

---
TODO items:

1) I was trying to add a Class<? extends Page> filter to the broadcastAll
first so that I could get only the relevant websocket connections from the
registry and not all pages need to be touched. In that case websocket
registry would need to be updated to keep track of also page classes, not
just their pageId, or is there a easy way to map from pageId to page class?
Or do you think the broadcastAll that loops through all active websocket
connections is not too heavy?

2) testing framework

-Mikko




Reply via email to