
uk.org.retep.xmpp.muc.room.RoomLeaveBroadcast Maven / Gradle / Ivy
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package uk.org.retep.xmpp.muc.room;
import javax.xml.bind.JAXBElement;
import org.jabber.protocol.muc_user.Item;
import org.jabber.protocol.muc_user.Status;
import org.jabber.protocol.muc_user.X;
import uk.org.retep.util.messaging.MessageException;
import uk.org.retep.xmpp.JID;
import uk.org.retep.xmpp.XMPPServer;
import uk.org.retep.xmpp.logic.AbstractXMPPLogic;
import uk.org.retep.xmpp.logic.XMPPLogic;
import uk.org.retep.xmpp.util.MessageFactory;
import uk.org.retep.xmpp.message.Presence;
import uk.org.retep.xmpp.muc.MucRoom;
import uk.org.retep.xmpp.muc.MucRoomMember;
import uk.org.retep.xmpp.muc.MucService;
import uk.org.retep.xmpp.util.Role;
import static uk.org.retep.xmpp.XMPPConstants.*;
/**
*
* @author peter
*/
public class RoomLeaveBroadcast
extends AbstractXMPPLogic
{
private final JID jidInRoom;
private final MucRoomMember leavingMember;
public RoomLeaveBroadcast( final JID jidInRoom,
final MucRoomMember leavingMember )
{
this.jidInRoom = jidInRoom;
this.leavingMember = leavingMember;
}
@Override
public XMPPLogic process( final XMPPServer server,
final MucService service,
final MucRoom room,
final Presence presence )
throws MessageException
{
// Send response to the user leaving
Presence response = createResponse( jidInRoom, presence, leavingMember );
response.setTo( presence.getFrom() );
X x = createX( response, leavingMember );
Status s = new Status();
s.setCode( PRESENCE_OWN_PRESENCE );
x.getContent().add( s );
server.send( response );
// send to all remaining users
for( JID to : room.getMemberJids() )
{
response = createResponse( jidInRoom,
presence,
leavingMember );
response.setTo( to );
createX( response, leavingMember );
server.send( response );
}
return null;
}
protected Presence createResponse( final JID jidInRoom,
final Presence presence,
final MucRoomMember leavingMember )
throws MessageException
{
final Presence response = MessageFactory.newInstance( presence );
response.setFrom( jidInRoom );
response.setType( UNAVAILABLE );
// This actually enables custom exit messages as per ex40
response.getContent().addAll( presence.getContent() );
// XEP-0172 Persistent Nickname support
// FIXME: What to do if the user provides a nick in the leave and we
// then add the existing one, there will be 2 here
// XEP-0172 persistent Nickname support
final String persistentNickname = leavingMember.getPersistentNickname();
if( persistentNickname != null )
{
// FIXME
response.getContent().add( persistentNickname );
}
return response;
}
protected X createX( final Presence response, final MucRoomMember member )
{
final Item item = new Item();
item.setAffiliation( member.getAffiliation() );
item.setRole( Role.NONE );
final X x = new X();
x.getContent().add( item );
response.getContent().add( x );
return x;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy