/* * Copyright 2006-2010 Daniel Henninger. All rights reserved. * * This software is published under the terms of the GNU Public License (GPL), * a copy of which is included in this distribution. */ package net.sf.kraken.protocols.myspaceim; import java.lang.ref.WeakReference; import java.util.List; import net.sf.jmyspaceiml.MessageListener; import net.sf.jmyspaceiml.contact.Contact; import net.sf.jmyspaceiml.contact.ContactListener; import net.sf.jmyspaceiml.packet.ActionMessage; import net.sf.jmyspaceiml.packet.ErrorMessage; import net.sf.jmyspaceiml.packet.InstantMessage; import net.sf.jmyspaceiml.packet.MediaMessage; import net.sf.jmyspaceiml.packet.ProfileMessage; import net.sf.jmyspaceiml.packet.StatusMessage; import net.sf.kraken.type.ConnectionFailureReason; import net.sf.kraken.util.chatstate.ChatStateEventSource; import org.apache.log4j.Logger; import org.jivesoftware.openfire.user.UserNotFoundException; import org.jivesoftware.util.NotFoundException; import org.xmpp.packet.JID; import org.xmpp.packet.Message; /** * @author Daniel Henninger */ public class MySpaceIMListener implements MessageListener, ContactListener { static Logger Log = Logger.getLogger(MySpaceIMListener.class); MySpaceIMListener(MySpaceIMSession session) { this.myspaceimSessionRef = new WeakReference<MySpaceIMSession>(session); } WeakReference<MySpaceIMSession> myspaceimSessionRef; public MySpaceIMSession getSession() { return myspaceimSessionRef.get(); } public void processIncomingMessage(InstantMessage msgPacket) { Log.debug("MySpaceIM: Received instant message packet: "+msgPacket); getSession().getTransport().sendMessage( getSession().getJID(), getSession().getTransport().convertIDToJID(msgPacket.getFrom()), msgPacket.getBody() ); } public void processIncomingMessage(ActionMessage msgPacket) { Log.debug("MySpaceIM: Received action message packet: "+msgPacket); final ChatStateEventSource chatStateEventSource = getSession().getTransport().getChatStateEventSource(); final JID receiver = getSession().getJID(); final JID sender = getSession().getTransport().convertIDToJID(msgPacket.getFrom()); if (msgPacket.getAction().equals(ActionMessage.ACTION_TYPING)) { chatStateEventSource.isComposing(sender, receiver); } else if (msgPacket.getAction().equals(ActionMessage.ACTION_STOPTYPING)) { chatStateEventSource.isPaused(sender, receiver); } } public void processIncomingMessage(StatusMessage msgPacket) { Log.debug("MySpaceIM: Received status message packet: "+msgPacket); if (getSession().getBuddyManager().isActivated()) { try { MySpaceIMBuddy buddy = getSession().getBuddyManager().getBuddy(getSession().getTransport().convertIDToJID(msgPacket.getFrom())); buddy.setPresenceAndStatus( ((MySpaceIMTransport)getSession().getTransport()).convertMySpaceIMStatusToXMPP(msgPacket.getStatusCode()), msgPacket.getStatusMessage() ); } catch (NotFoundException e) { // Not in our contact list. Ignore. Log.debug("MySpaceIM: Received presense notification for contact we don't care about: "+msgPacket.getFrom()); } } else { getSession().getBuddyManager().storePendingStatus(getSession().getTransport().convertIDToJID(msgPacket.getFrom()), ((MySpaceIMTransport)getSession().getTransport()).convertMySpaceIMStatusToXMPP(msgPacket.getStatusCode()), msgPacket.getStatusMessage()); } } public void processIncomingMessage(MediaMessage msgPacket) { Log.debug("MySpaceIM: Received media message packet: "+msgPacket); } public void processIncomingMessage(ProfileMessage msgPacket) { Log.debug("MySpaceIM: Received profile message packet: "+msgPacket); } public void processIncomingMessage(ErrorMessage msgPacket) { Log.debug("MySpaceIM: Received error message packet: "+msgPacket); getSession().getTransport().sendMessage( getSession().getJID(), getSession().getTransport().getJID(), msgPacket.getErrorMessage(), Message.Type.error ); if (msgPacket.isFatal()) { getSession().setFailureStatus(ConnectionFailureReason.UNKNOWN); getSession().sessionDisconnected(msgPacket.getErrorMessage()); } } public void contactListUpdateReceived() { Log.debug("MySpaceIM: Got contact list."); List<Contact> contacts = getSession().getConnection().getContactManager().getContacts(); for (Contact contact : contacts) { MySpaceIMBuddy buddy; try { buddy = getSession().getBuddyManager().getBuddy(getSession().getTransport().convertIDToJID(String.valueOf(contact.getContactID()))); } catch (NotFoundException e) { buddy = new MySpaceIMBuddy(getSession().getBuddyManager(), contact.getContactID()); getSession().getBuddyManager().storeBuddy(buddy); } } try { getSession().getTransport().syncLegacyRoster(getSession().getJID(), getSession().getBuddyManager().getBuddies()); } catch (UserNotFoundException e) { Log.debug("Unable to sync MySpaceIM contact list for " + getSession().getJID(), e); } getSession().getBuddyManager().activate(); } }