Hi,

There is no point in having more than one WebSocket connections per page.
And actually, Wicket Native WebSockets do not support it out of the box.
The registry with the websocket connections at the server side uses a key
<applicationName, sessionId, pageId> so there could be just one connection
per page.

Now the next problem is how to be notified when a message comes from the
client, because the behavior is registered somewhere else and not in the
current component...
You could override component's #onEvent() and do something when the payload
is TextMessage but this is not very user friendly :-/
Please create a ticket for improvement!


Martin Grigorov
Wicket Training and Consulting
https://twitter.com/mtgrigorov

On Wed, Apr 20, 2016 at 9:16 AM, Francesco Chicchiriccò <[email protected]
> wrote:

> Hi Martin,
> thanks for your prompt reply.
>
> Are you suggesting that the best practice is to add WebSocketBehavior at
> most once per page - and possibly to the page itself?
>
> My current situation is that I have defined three different anonymous
> WebSocketBehavior instances, added to three different panels [1][2][3]:
> panel [1] is added to BasePage,  panel [2] and [3] are added to Dashboard,
> extending BasePage.
>
> With this configuration, only the onConnect() method from [1] is invoked.
>
> If instead I disable [1] (via the if reported below), both [2] and [3]
> onConnect() methods are invoked.
>
> So my actual issue it not really how to asses when to add [1] or not, but
> to have [1][2][3] all added to Dashboard, and [1] to the remaining pages.
>
> Regards.
>
> [1]
> https://github.com/apache/syncope/blob/master/client/console/src/main/java/org/apache/syncope/client/console/widgets/ApprovalsWidget.java#L179-L189
> [2]
> https://github.com/apache/syncope/blob/master/client/console/src/main/java/org/apache/syncope/client/console/widgets/JobWidget.java#L119-L128
> [3]
> https://github.com/apache/syncope/blob/master/client/console/src/main/java/org/apache/syncope/client/console/widgets/ReconciliationWidget.java#L144-L155
>
>
> On 19/04/2016 18:07, Martin Grigorov wrote:
>
>> Hi,
>>
>> You could use something like:
>>
>> if (getBehaviors(WebSocketBehavior.class).isEmpty()) {
>>    add(new WebSocketBehavior() {...});
>> }
>>
>> This way only one instance will be added to one page instance.
>>
>> Martin Grigorov
>> Wicket Training and Consulting
>> https://twitter.com/mtgrigorov
>>
>> On Tue, Apr 19, 2016 at 5:50 PM, Francesco Chicchiriccò <
>> [email protected]> wrote:
>>
>>> Hi all,
>>> in the upcoming Syncope 2.0 we are enjoying WebSocketBehavior for making
>>> our admin console UI more reactive.
>>>
>>> It mostly works - thanks for this! - but we are experiencing some
>>> troubles
>>> lately.
>>>
>>> There is a class BasePage which is extended by all other pages, and
>>> contains a panel which adds WebSocketBehavior.
>>> One of such pages (Dashboard) also contains two panels, each of which
>>> adds
>>> in turn WebSocketBehavior.
>>>
>>> I observe that when the first WebSocketBehavior (in BasePage) is added,
>>> the other two WebSocketBehavior instances' onConnect() method is not
>>> invoked at all.
>>>
>>> If instead, I do something like as following, in BasePage:
>>>
>>> if (!(pageRef.getPage() instanceof Dashboard)) {
>>>    add(new WebSocketBehavior() {...});
>>> }
>>>
>>> everything works as expected (naturally BasePages's WebSocketBehavior
>>> does
>>> not come into play): both on Dashboard and other pages.
>>>
>>> Any hint?
>>> TIA
>>>
>>> Regards.
>>>
>>
> --
> Francesco Chicchiriccò
>
> Tirasa - Open Source Excellence
> http://www.tirasa.net/
>
> Involved at The Apache Software Foundation:
> member, Syncope PMC chair, Cocoon PMC, Olingo PMC, CXF committer
> http://home.apache.org/~ilgrosso/
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>

Reply via email to