/* * 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.util.ArrayList; import net.sf.jmyspaceiml.MSIMConnection; import net.sf.jmyspaceiml.MSIMException; import net.sf.jmyspaceiml.packet.ActionMessage; import net.sf.jmyspaceiml.packet.InstantMessage; import net.sf.jmyspaceiml.packet.StatusMessage; import net.sf.kraken.registration.Registration; import net.sf.kraken.session.TransportSession; import net.sf.kraken.type.ChatStateType; import net.sf.kraken.type.ConnectionFailureReason; import net.sf.kraken.type.PresenceType; import net.sf.kraken.type.TransportLoginStatus; import org.apache.log4j.Logger; import org.xmpp.packet.JID; /** * Represents a MySpaceIM session. * * This is the interface with which the base transport functionality will * communicate with MySpaceIM. * * @author Daniel Henninger */ public class MySpaceIMSession extends TransportSession<MySpaceIMBuddy> { static Logger Log = Logger.getLogger(MySpaceIMSession.class); /** * Create a MySpaceIM Session instance. * * @param registration Registration information used for logging in. * @param jid JID associated with this session. * @param transport Transport instance associated with this session. * @param priority Priority of this session. */ public MySpaceIMSession(Registration registration, JID jid, MySpaceIMTransport transport, Integer priority) { super(registration, jid, transport, priority); } // Listener private MySpaceIMListener listener; // Connection instance private MSIMConnection connection; public MSIMConnection getConnection() { return connection; } /** * @see net.sf.kraken.session.TransportSession#logIn(net.sf.kraken.type.PresenceType, String) */ @Override public void logIn(PresenceType presenceType, String verboseStatus) { setPendingPresenceAndStatus(presenceType, verboseStatus); if (!isLoggedIn()) { try { connection = new MSIMConnection(); connection.connect(); connection.login(getRegistration().getUsername(), getRegistration().getPassword()); this.setLoginStatus(TransportLoginStatus.LOGGED_IN); listener = new MySpaceIMListener(this); connection.addMessageListener(listener); connection.getContactManager().addContactListener(listener); connection.getContactManager().requestContacts(); } catch (MSIMException e) { Log.error("MySpace: Failure while logging in:", e); setFailureStatus(ConnectionFailureReason.UNKNOWN); sessionDisconnected("Failure while logging in."); } } } /** * @see net.sf.kraken.session.TransportSession#logOut() */ @Override public void logOut() { if (connection != null) { if (listener != null) { connection.getContactManager().removeContactListener(listener); connection.removeMessageListener(listener); } connection.disconnect(); } cleanUp(); sessionDisconnectedNoReconnect(null); } /** * @see net.sf.kraken.session.TransportSession#cleanUp() */ @Override public void cleanUp() { if (connection != null) { connection = null; } if (listener != null) { listener = null; } } /** * @see net.sf.kraken.session.TransportSession#addContact(org.xmpp.packet.JID, String, java.util.ArrayList) */ @Override public void addContact(JID jid, String nickname, ArrayList<String> groups) { } /** * @see net.sf.kraken.session.TransportSession#removeContact(net.sf.kraken.roster.TransportBuddy) */ @Override public void removeContact(MySpaceIMBuddy contact) { } /** * @see net.sf.kraken.session.TransportSession#updateContact(net.sf.kraken.roster.TransportBuddy) */ @Override public void updateContact(MySpaceIMBuddy contact) { } /** * @see net.sf.kraken.session.TransportSession#acceptAddContact(JID) */ @Override public void acceptAddContact(JID jid) { final String userID = getTransport().convertJIDToID(jid); Log.debug("MySpace: accept-adding is currently not implemented." + " Cannot accept-add: " + userID); // TODO: Currently unimplemented } /** * @see net.sf.kraken.session.TransportSession#sendMessage(org.xmpp.packet.JID, String) */ @Override public void sendMessage(JID jid, String message) { InstantMessage msg = new InstantMessage(); msg.setTo(getTransport().convertJIDToID(jid)); msg.setFrom(String.valueOf(connection.getUserID())); msg.setBody(message); connection.sendPacket(msg); } /** * @see net.sf.kraken.session.TransportSession#sendChatState(org.xmpp.packet.JID,net.sf.kraken.type.ChatStateType) */ @Override public void sendChatState(JID jid, ChatStateType chatState) { ActionMessage msg = new ActionMessage(); msg.setTo(getTransport().convertJIDToID(jid)); msg.setFrom(String.valueOf(connection.getUserID())); msg.setAction(chatState == ChatStateType.composing ? ActionMessage.ACTION_TYPING : ActionMessage.ACTION_STOPTYPING); connection.sendPacket(msg); } /** * @see net.sf.kraken.session.TransportSession#sendBuzzNotification(org.xmpp.packet.JID, String) */ @Override public void sendBuzzNotification(JID jid, String message) { } /** * @see net.sf.kraken.session.TransportSession#updateLegacyAvatar(String, byte[]) */ @Override public void updateLegacyAvatar(String type, byte[] data) { } /** * @see net.sf.kraken.session.TransportSession#updateStatus(net.sf.kraken.type.PresenceType, String) */ @Override public void updateStatus(PresenceType presenceType, String verboseStatus) { StatusMessage msg = new StatusMessage(); msg.setTo(getTransport().convertJIDToID(jid)); msg.setFrom(String.valueOf(connection.getUserID())); msg.setStatusCode(((MySpaceIMTransport)getTransport()).convertXMPPStatusToMySpaceIM(presenceType)); msg.setStatusMessage(verboseStatus); connection.sendPacket(msg); } }