On Thu, Apr 21, 2016 at 8:41 AM, Francesco Chicchiriccò <ilgro...@apache.org
> wrote:

> On 20/04/2016 17:58, Martin Grigorov wrote:
>
>> 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.
>>
>
> Thanks for clarifying: this means I need to refactor our code so that a
> single WebSocketBehavior is added to every page, and then moving the logic
> for distinguishing what is actually to be performed inside its onConnect()
> method.
>
> 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!
>>
>
> Sorry, it is not clear to me what kind of improvement can be filed:
> allowing multiple WebSocketBehaviors to a page?
> I will anyway change our logic as outlined above, since I need to have it
> working with Wicket 7.20.
>

The problem I see is that you will have code like:

if (getBehaviors(WebSocketBehavior.class).isEmpty()) {
    add(new WebSocketBehavior() {
      @Override protected void onTextMessage(...) {...}
    });
}

But the condition will pass for just one of the calls.
All other calls won't execute the body of the 'if' and thus
#onTextMessage() won't be called when there is a new message from the
client. To be notified when a message comes you will have to override
Component#onEvent().
I'll think on a solution to add the WSBehavior to the component tree but
not create a client side WebSocket. I.e. it will be just a server side
publisher/subscriber.


> Regards.
>
>
> On Wed, Apr 20, 2016 at 9:16 AM, Francesco Chicchiriccò <
>> ilgro...@apache.org> 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ò <
>>>> ilgro...@apache.org> 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: users-unsubscr...@wicket.apache.org
> For additional commands, e-mail: users-h...@wicket.apache.org
>
>

Reply via email to