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 > >