-
Ok, thank you for quick response.
I haven't tried the new event yet but I noticed that now, there is no event fired for individual roster items when they are being added. I think this old call is still useful and worth having it. So I do not want to remove the ItemAdded event. It's good to have both event called.
-
I checked Halcyon logs and it looks like actually, the event for individual roster items
added
is called beforeRosterLoadedEvent
and this is what I wanted and what expected. For some reasons, however, the event is not calling my handler. I will be investigating it further tomorrow.However, the
RosterLoadedEvent
is called 2 times at the app startup time and looking into Halcyon logs, it seems that the library requests roster twice, hence receives roster twice and then callsRosterLoadedEvent
2 times. It seems like the double roster requesting is redundant here and should be avoided.The logs shows 2 distinct roster get requests with different stanza IDs and then the app receives 2 roster responses.
here is log excerpt:
[EDT] 0:0:9,247 - Wed Oct 07 16:45:32 PDT 2020 [FINEST] tigase.halcyon.core.eventbus.EventBus: Firing event HalcyonStateChangeEvent(oldState=Connecting, newState=Connected) with 3 handlers [EDT] 0:0:9,250 - Wed Oct 07 16:45:32 PDT 2020 [FINEST] tigase.halcyon.core.connector.WebSocketConnector: Sending: <iq to="tigase.org" id="NLw6qLx16LZbaoJXBTBvnmpH" type="get"><query xmlns="http://jabber.org/protocol/disco#info" node="https://tigase.net/tigase-xmpp-server#CEd/IMWsFdH+nTfMKQuYdogsumU="/></iq> [EDT] 0:0:9,250 - Wed Oct 07 16:45:32 PDT 2020 [FINEST] tigase.halcyon.core.eventbus.EventBus: Firing event SentXMLElementEvent(element=IQ[type=get id=NLw6qLx16LZbaoJXBTBvnmpH to=tigase.org ], request=Request[to=tigase.org, id=NLw6qLx16LZbaoJXBTBvnmpH: <iq to="tigase.org" id="NLw6qLx16LZbaoJXBTBvnmpH" type="get"><query xmlns="http://jabber.org/protocol/disco#info" node="https://tigase.net/tigase-xmpp-server#CEd/IMWsFdH+nTfMKQuYdogsumU="/></iq>]) with 2 handlers user@domain.org is now Connected Doing nothing [Timer-1] 0:0:9,281 - Wed Oct 07 16:45:32 PDT 2020 [FINEST] tigase.halcyon.core.eventbus.EventBus: Firing event TickEvent(counter=1) with 5 handlers [Timer-1] 0:0:9,281 - Wed Oct 07 16:45:32 PDT 2020 [FINE] tigase.halcyon.core.connector.WebSocketConnector: Whitespace ping [EDT] 0:0:9,283 - Wed Oct 07 16:45:32 PDT 2020 [FINEST] tigase.halcyon.core.connector.WebSocketConnector: Sending: <presence id="fUsyDtr7qDTYMkfC1F9QeXJ3"><c xmlns="http://jabber.org/protocol/caps" node="http://tigase.org/TigaseHalcyon" ver="LsHf0qzy39OO71UEo2UM53iYKJk=" hash="sha-1"/></presence> [EDT] 0:0:9,284 - Wed Oct 07 16:45:32 PDT 2020 [FINEST] tigase.halcyon.core.eventbus.EventBus: Firing event SentXMLElementEvent(element=PRESENCE[id=fUsyDtr7qDTYMkfC1F9QeXJ3 ], request=null) with 2 handlers [EDT] 0:0:9,294 - Wed Oct 07 16:45:32 PDT 2020 [FINEST] tigase.halcyon.core.connector.WebSocketConnector: Sending: <iq id="xhIdoXGHGqYOG84hJf6fxz8m" type="get"><query xmlns="jabber:iq:roster"><annotate xmlns="urn:xmpp:mix:roster:0"/></query></iq> [EDT] 0:0:9,294 - Wed Oct 07 16:45:32 PDT 2020 [FINEST] tigase.halcyon.core.eventbus.EventBus: Firing event SentXMLElementEvent(element=IQ[type=get id=xhIdoXGHGqYOG84hJf6fxz8m ], request=Request[to=null, id=xhIdoXGHGqYOG84hJf6fxz8m: <iq id="xhIdoXGHGqYOG84hJf6fxz8m" type="get"><query xmlns="jabber:iq:roster"><annotate xmlns="urn:xmpp:mix:roster:0"/></query></iq>]) with 2 handlers [EDT] 0:0:9,294 - Wed Oct 07 16:45:32 PDT 2020 [FINEST] tigase.halcyon.core.connector.WebSocketConnector: Sending: <iq to="tigase.org" id="F86U0Wr1OxjjGsnOJcYVEjqI" type="get"><query xmlns="http://jabber.org/protocol/disco#info"/></iq> [EDT] 0:0:9,294 - Wed Oct 07 16:45:32 PDT 2020 [FINEST] tigase.halcyon.core.eventbus.EventBus: Firing event SentXMLElementEvent(element=IQ[type=get id=F86U0Wr1OxjjGsnOJcYVEjqI to=tigase.org ], request=Request[to=tigase.org, id=F86U0Wr1OxjjGsnOJcYVEjqI: <iq to="tigase.org" id="F86U0Wr1OxjjGsnOJcYVEjqI" type="get"><query xmlns="http://jabber.org/protocol/disco#info"/></iq>]) with 2 handlers [EDT] 0:0:9,295 - Wed Oct 07 16:45:32 PDT 2020 [FINEST] tigase.halcyon.core.connector.WebSocketConnector: Sending: <iq to="user@domain.org" id="YtMjVwbFr3sjXLQxmgZPYx9X" type="get"><query xmlns="http://jabber.org/protocol/disco#info"/></iq> [EDT] 0:0:9,295 - Wed Oct 07 16:45:32 PDT 2020 [FINEST] tigase.halcyon.core.eventbus.EventBus: Firing event SentXMLElementEvent(element=IQ[type=get id=YtMjVwbFr3sjXLQxmgZPYx9X to=user@domain.org ], request=Request[to=user@domain.org, id=YtMjVwbFr3sjXLQxmgZPYx9X: <iq to="user@domain.org" id="YtMjVwbFr3sjXLQxmgZPYx9X" type="get"><query xmlns="http://jabber.org/protocol/disco#info"/></iq>]) with 2 handlers [EDT] 0:0:9,295 - Wed Oct 07 16:45:32 PDT 2020 [FINEST] tigase.halcyon.core.eventbus.EventBus: Firing event tigase.halcyon.core.xmpp.SessionController$SessionControllerEvents$Successful@525f74a7 with 2 handlers [EDT] 0:0:9,295 - Wed Oct 07 16:45:32 PDT 2020 [FINEST] tigase.halcyon.core.connector.WebSocketConnector: Sending: <presence id="qElOc2jkeLpTCxpPpkkKsFG2"><c xmlns="http://jabber.org/protocol/caps" node="http://tigase.org/TigaseHalcyon" ver="LsHf0qzy39OO71UEo2UM53iYKJk=" hash="sha-1"/></presence> [EDT] 0:0:9,295 - Wed Oct 07 16:45:32 PDT 2020 [FINEST] tigase.halcyon.core.eventbus.EventBus: Firing event SentXMLElementEvent(element=PRESENCE[id=qElOc2jkeLpTCxpPpkkKsFG2 ], request=null) with 2 handlers [EDT] 0:0:9,295 - Wed Oct 07 16:45:32 PDT 2020 [FINEST] tigase.halcyon.core.connector.WebSocketConnector: Sending: <iq id="86P7x2VvusPI4RfVQZukhxVS" type="get"><query xmlns="jabber:iq:roster"><annotate xmlns="urn:xmpp:mix:roster:0"/></query></iq> [EDT] 0:0:9,296 - Wed Oct 07 16:45:32 PDT 2020 [FINEST] tigase.halcyon.core.eventbus.EventBus: Firing event SentXMLElementEvent(element=IQ[type=get id=86P7x2VvusPI4RfVQZukhxVS ], request=Request[to=null, id=86P7x2VvusPI4RfVQZukhxVS: <iq id="86P7x2VvusPI4RfVQZukhxVS" type="get"><query xmlns="jabber:iq:roster"><annotate xmlns="urn:xmpp:mix:roster:0"/></query></iq>]) with 2 handlers
Right now, we have a few events in the
RosterModule
for item change (Added, Updated, Removed). However, at the startup time, in GUI it is inefficient to deal individual roster items and updated GUI for each element.It would be very useful to have a single event handler called once, the entire roster is loaded. Then, in the GUI I can load all roster items and display up to date list.