HI Bernd, I have some fight with sending the unavailable stanza.
in AbstractSessionContext there is sessionStateHolder.setState(SessionState.CLOSED); // no more traffic // going through getServerRuntimeContext().getResourceRegistry().unbindSession(this); Is there A chance that I can wait for the Protocolworker the send the unavailable before I do the close and unbind ? By now theres some chance that it works but most of the times it fails because session is closed or resource not available anymore. Do you have any idea how I can solve this ? Regards Thomas 2010/3/4 Bernd Fondermann <[email protected]>: > Hi Thomas, > > I think you are on the right track with creating a presence > unavailable and injecting this into stanza processing the way you do. > (But I did not look into details.) > Thanks very much, looks very promising. :-) > > I'd expect that building the stanza can be drastically simplified > using the given builder infrastructure. > Basically, you only need to create the stanza > <presence type='unavailable'/> > according to > http://xmpp.org/internet-drafts/draft-ietf-xmpp-3921bis-04.html#presence-unavailable-gen > You could use something along the lines of > StanzaBuilder.createPresenceStanza(null, null... UNAVAILABLE); > > For incorporating your contribution, I have to ask you to create a > JIRA issue for this here > http://issues.apache.org/jira/browse/VYSPER > Please attach a patch file (pls ask if you run into problems with > that) to the JIRA after creating it > *and don't forget to tick the ASL license box so we can legally use the > patch*. > > Thanks again, > > Bernd > > On Thu, Mar 4, 2010 at 14:12, Thomas Kratz <[email protected]> wrote: >> As promised I started to do some investigations on this. >> I don't know if I get things right by today, and I don't have a >> running envoriment at hand ( will have to wait for the weekend= but I >> kindly ask if I'm going in the right direction. >> >> I guess I try the following in AbstactSessionContext >> >> public void endSession() { >> StanzaWriter stanzaWriter = getResponseWriter(); >> stanzaWriter.close(); >> sessionStateHolder.setState(SessionState.CLOSED); // no more >> traffic going through >> getServerRuntimeContext().getResourceRegistry().unbindSession(this); >> >> // send unavailable to all contacts and other resources >> >> PresenceStanza lastPresence = >> serverRuntimeContext.getPresenceCache().get(initiatingEntity); >> List<Attribute> presenceReplacements = new ArrayList<Attribute>(1); >> presenceReplacements.add(new Attribute("type", >> PresenceStanzaType.UNAVAILABLE.name())); >> Stanza unavailableStanza = >> StanzaBuilder.createClone(lastPresence, true, >> presenceReplacements).build(); >> >> serverRuntimeContext.getStanzaProcessor().processStanza(serverRuntimeContext, >> this, unavailableStanza, sessionStateHolder); >> >> // remove latest availability from LatestPresenceCache >> serverRuntimeContext.getPresenceCache().remove(initiatingEntity); >> >> // TODO close underlying transport (TCP socket) >> // ?? how to get hold of the socket ? >> } >> >> Are these the right ideas to do that ? >> >> Regards Thomas >> >> -- >> http://www.buchmanager.com >> http://thomaskratz.blogspot.com >> > -- http://www.buchmanager.com http://thomaskratz.blogspot.com
