https://issues.apache.org/jira/browse/WICKET-6649
On Thu, Apr 4, 2019 at 1:35 PM Ernesto Reinaldo Barreiro <reier...@gmail.com> wrote: > Hi Martin, > > Many thanks for feedback. I will file a ticket. > > > > Please file a ticket. > > TextMessage and BinaryMessage can be improved. > > I have to see whether IWebSocketConnection can be improved too. > > > > I see AbstractWebSocketConnection contains AbstractWebSocketProcessor and > this one a pageId. Meanwhile I can try to roll my own implementation to > cover use case. > > But due to API changes this could be done only for Wicket 9.x. > > > > I understand. We are still on 7.x... One more argument to push for going > 8.x and then 9.x. > > Maybe one possibility to make this more configurable is allow to register > at "application level" some factory for IWebSocketConnections and/or > TextMessages? So, no need to break this on 7.x, 8.x? I don't know if this > makes sense at all? I see AbstractWebSocketProcessor contains both > Application and pageId. > > > > > > On Wed, Apr 3, 2019 at 4:19 PM Ernesto Reinaldo Barreiro < > > reier...@gmail.com> > > wrote: > > > > > I meant my "question" > > > > > > On Wed, Apr 3, 2019 at 4:18 PM Ernesto Reinaldo Barreiro < > > > reier...@gmail.com> > > > wrote: > > > > > > > Hi, > > > > > > > > Thanks for your answer. Yes my answer was more on the spirit if there > > is > > > > something already available and ready to use.... Or if it makes sense > > to > > > > have this by default at interface level. > > > > > > > > On Wed, Apr 3, 2019 at 3:37 PM Maxim Solodovnik < > solomax...@gmail.com> > > > > wrote: > > > > > > > >> Hello Ernesto, > > > >> > > > >> We also have code to send websocket messages "to others" > > > >> I do store active client list (each page/tab is client) > > > >> Every client stores pageId and sessionId > > > >> > > > >> Then I do filtering on pageId+sessionId > > > >> > > > >> This seems to work as expected > > > >> > > > >> On Wed, 3 Apr 2019 at 18:18, Ernesto Reinaldo Barreiro > > > >> <reier...@gmail.com> wrote: > > > >> > > > > >> > Hi, > > > >> > > > > >> > I have the following use case. > > > >> > > > > >> > 1- One browser tab sends a text message > > > >> > 2- Other browser tabs should receive message (but emitting tab > not). > > > >> > > > > >> > I have done > > > >> > > > > >> > add(*new *WebSocketBehavior() { > > > >> > @Override > > > >> > *protected void *onMessage(WebSocketRequestHandler handler, > > > TextMessage > > > >> > message) { > > > >> > sendNotificationToSession(....) > > > >> > } > > > >> > }); > > > >> > > > > >> > > > > >> > > > > >> > *public void *sendNotificationToSession(String sessionId) { > > > >> > *if *(com.rometools.utils.Strings.*isEmpty*(sessionId)) { > > > >> > *throw new *IllegalArgumentException(*"sessionId cannot be > empty"*); > > > >> > } > > > >> > Application application = > Application.*get*(KmsContext.*APP_NAME*); > > > >> > > > > >> > > > > > > privateSendNotificationTo(getRegistry(application).getConnections(application, > > > >> > sessionId)); > > > >> > } > > > >> > > > > >> > > > > >> > *private void > > > >> *privateSendNotificationTo(Collection<IWebSocketConnection> > > > >> > webSocketConnections) { > > > >> > String message = toJSON(); > > > >> > *for*(IWebSocketConnection connection : webSocketConnections) { > > > >> > *if *(connection.isOpen()) { > > > >> > *try *{ > > > >> > connection.sendMessage(message); > > > >> > } *catch *(IOException e) { > > > >> > *log*.error(*"Could not send notification"*, e); > > > >> > *//$NON-NLS-1$ *} > > > >> > } > > > >> > } > > > >> > } > > > >> > > > > >> > > > > >> > I see some classes like > > > >> > > > > >> > > > > >> > > > > >> > > > > >> > > > > >> > */** * A base message for all messages with information about the > > > >> client > > > >> > */ **public abstract class *AbstractClientMessage *implements * > > > >> > IWebSocketMessage > > > >> > { > > > >> > *private final *String *applicationName*; > > > >> > *private final *String *sessionId*; > > > >> > *private final *IKey *key*; > > > >> > > > > >> > *public *AbstractClientMessage(Application application, String > > > >> sessionId, > > > >> > IKey key) > > > >> > { > > > >> > *this*.*applicationName *= Args.*notNull*(application, > > *"application"* > > > >> > ).getName(); > > > >> > *this*.*sessionId *= Args.*notNull*(sessionId, *"sessionId"*); > > > >> > *this*.*key *= Args.*notNull*(key, *"key"*); > > > >> > } > > > >> > > > > >> > *public *Application getApplication() > > > >> > { > > > >> > *return *Application.*get*(*applicationName*); > > > >> > } > > > >> > > > > >> > *public *String getSessionId() > > > >> > { > > > >> > *return **sessionId*; > > > >> > } > > > >> > > > > >> > *public *IKey getKey() > > > >> > { > > > >> > *return **key*; > > > >> > } > > > >> > > > > >> > } > > > >> > > > > >> > > > > >> > provide IKey as "discriminator" of sending page. But this is > neither > > > >> part > > > >> > of IWebSocketMessage nor it is part of IWebSocketConnection... > So, I > > > >> don't > > > >> > really know to use to exclude the emitting page. This clearly > would > > be > > > >> > possible if both IWebSocketMessage and IWebSocketConnection have a > > > IKey > > > >> > getPageKey(); > > > >> > > > > >> > > > > >> > Is there a way to do this? Am I missing some essential part? > > > >> > > > > >> > > > > >> > -- > > > >> > Regards - Ernesto Reinaldo Barreiro > > > >> > > > >> > > > >> > > > >> -- > > > >> WBR > > > >> Maxim aka solomax > > > >> > > > >> > --------------------------------------------------------------------- > > > >> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > > > >> For additional commands, e-mail: users-h...@wicket.apache.org > > > >> > > > >> > > > > > > > > -- > > > > Regards - Ernesto Reinaldo Barreiro > > > > > > > > > > > > > -- > > > Regards - Ernesto Reinaldo Barreiro > > > > > > > > -- > Regards - Ernesto Reinaldo Barreiro >