Package com.anzsoft.client.XMPP.mandioca.rooms

Source Code of com.anzsoft.client.XMPP.mandioca.rooms.XmppRoom

/*
    iJab , The Ajax web jabber client
    Copyright (c) 2006-2008 by AnzSoft
  
    Author:Fanglin Zhong <zhongfanglin@anzsoft.com>

    Started at 2008-08-20, Beijing of China

    iJab    (c) 2006-2008 by the ijab developers
   
    Some code copied form gwtjsjac

    *************************************************************************
    *                                                                       *
    * This program is free software; you can redistribute it and/or modify  *
    * it under the terms of the GNU General Public License as published by  *
    * the Free Software Foundation; either version 2 of the License, or     *
    * (at your option) any later version.                                   *
    *                                                                       *
    *************************************************************************
*/

package com.anzsoft.client.XMPP.mandioca.rooms;

import com.anzsoft.client.XMPP.XmppID;
import com.anzsoft.client.XMPP.XmppMessage;
import com.anzsoft.client.XMPP.XmppPresence;
import com.anzsoft.client.XMPP.XmppPresenceListener;
import com.anzsoft.client.XMPP.mandioca.XmppChat;
import com.anzsoft.client.XMPP.mandioca.XmppIdPacketListener;
import com.anzsoft.client.XMPP.mandioca.XmppSession;
import com.anzsoft.client.XMPP.mandioca.XmppUser;
import com.anzsoft.client.XMPP.mandioca.rooms.MUCItem.Affiliation;
import com.anzsoft.client.XMPP.mandioca.rooms.MUCItem.Role;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.Node;

public class XmppRoom extends XmppChat {
  private final String roomId;
  private String userId;
  private final String sessionRoomId;
  private final RoomPresenceListenerCollection presenceListeners;

  public XmppRoom(final XmppSession session, final String roomName, final String host, final String nick)
  {
    this(session, XmppID.render(roomName, host, nick), XmppID.render(roomName, host, null));
  }

  XmppRoom(final XmppSession session, final String userInRoomId, final String roomId)
  {
    super(session, userInRoomId, new XmppIdPacketListener(roomId));
    this.roomId = roomId;
    this.sessionRoomId = userInRoomId;
    this.presenceListeners = new RoomPresenceListenerCollection();

    addPresenceListener(new XmppPresenceListener()
    {
      public void onPresenceReceived(final XmppPresence presence)
      {
        String alias = presence.getFromID().getResource();
        String type = presence.getType();
        if (type != null && type.equals(XmppPresence.TYPE_UNAVAILABLE))
        {
          presenceListeners.fireUserLeaves(alias);
        }
        else
        {
          Element pNode = (Element) presence.getNode();
          Element item = pNode.getElementsByTagName("item").getItem(0);
          MUCItem mucItem = new MUCItem(Role.NoRole,Affiliation.NoAffiliation);
          if(item!=null)
            mucItem.fromXml(item);         
          presenceListeners.fireUserEntered(alias,mucItem);
        }
      }

      public void onPresenceSent(final XmppPresence presence)
      {
      }
    });
    }


    public boolean isRoom()
    {
      return true;
    }

    private XmppPresence createRoomPresence()
    {
      XmppPresence presence = session.getFactory().createRoomPresence();
      presence.setFrom(userId);
      presence.setTo(sessionRoomId);
      return presence;
    }

    /**
     * @param user
     * @see http://www.xmpp.org/extensions/xep-0045.html#enter
     */
    public void join(final XmppUser user)
    {
      userId = user.getID();
      XmppPresence presence = createRoomPresence();
      session.send(presence);
    }


    /**
     *
     * @see http://www.xmpp.org/extensions/xep-0045.html#exit
     */
    public void logout()
    {
      XmppPresence presence = createRoomPresence();
      presence.setType(XmppPresence.TYPE_UNAVAILABLE);
      session.send(presence);
    }

    public void addRoomPresenceListener(final RoomPresenceListener listener)
    {
      presenceListeners.add(listener);
    }

    protected XmppMessage createMessage(final String body)
    {
      XmppMessage message = session.getFactory().createMessage();
      message.setFrom(session.getUser().getID());
      message.setTo(roomId);
      message.setBody(body);
      message.setType(XmppMessage.TYPE_MULTI);
      return message;
    }


}
TOP

Related Classes of com.anzsoft.client.XMPP.mandioca.rooms.XmppRoom

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.