blob: 1f2db9ac2135a39a40d3bcfb8cc154aa5da84378 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004 Composent, Inc. All rights reserved. This
* program and the accompanying materials are made available under the terms of
* the Eclipse Public License v1.0 which accompanies this distribution, and is
* available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors: Composent, Inc. - initial API and implementation
******************************************************************************/
package org.eclipse.ecf.example.clients;
import org.eclipse.ecf.core.ContainerFactory;
import org.eclipse.ecf.core.IContainer;
import org.eclipse.ecf.core.identity.ID;
import org.eclipse.ecf.core.identity.IDCreateException;
import org.eclipse.ecf.core.identity.IDFactory;
import org.eclipse.ecf.core.identity.Namespace;
import org.eclipse.ecf.core.security.ConnectContextFactory;
import org.eclipse.ecf.core.util.ECFException;
import org.eclipse.ecf.presence.IIMMessageEvent;
import org.eclipse.ecf.presence.IIMMessageListener;
import org.eclipse.ecf.presence.IPresenceContainerAdapter;
import org.eclipse.ecf.presence.chatroom.IChatRoomContainer;
import org.eclipse.ecf.presence.chatroom.IChatRoomInfo;
import org.eclipse.ecf.presence.chatroom.IChatRoomManager;
import org.eclipse.ecf.presence.im.IChatMessage;
import org.eclipse.ecf.presence.im.IChatMessageEvent;
import org.eclipse.ecf.presence.im.IChatMessageSender;
public class XMPPChatRoomClient {
protected static String CONTAINER_TYPE = "ecf.xmpp.smack";
Namespace namespace = null;
IContainer container = null;
IPresenceContainerAdapter presence = null;
IChatMessageSender sender = null;
ID userID = null;
IChatRoomManager chatmanager = null;
IChatRoomContainer chatroom = null;
IChatRoomInfo roomInfo = null;
// Interface for receiving messages
IMessageReceiver receiver = null;
public XMPPChatRoomClient() {
this(null);
}
public XMPPChatRoomClient(IMessageReceiver receiver) {
super();
this.receiver = receiver;
}
protected IContainer createContainer() throws ECFException {
// Create container
container = ContainerFactory.getDefault().createContainer(CONTAINER_TYPE);
namespace = container.getConnectNamespace();
return container;
}
protected IContainer getContainer() {
return container;
}
protected Namespace getNamespace() {
return namespace;
}
protected void setupPresenceAdapter() {
// Get presence adapter off of container
presence = (IPresenceContainerAdapter) container.getAdapter(IPresenceContainerAdapter.class);
// Get sender interface
sender = presence.getChatManager().getChatMessageSender();
// Setup message requestListener to handle incoming messages
presence.getChatManager().addMessageListener(new IIMMessageListener() {
public void handleMessageEvent(IIMMessageEvent messageEvent) {
if (messageEvent instanceof IChatMessageEvent) {
final IChatMessage m = ((IChatMessageEvent) messageEvent).getChatMessage();
receiver.handleMessage(m);
}
}
});
}
protected IPresenceContainerAdapter getPresenceContainer() {
return presence;
}
public void connect(String account, String password) throws ECFException {
createContainer();
setupPresenceAdapter();
// create target id
final ID targetID = IDFactory.getDefault().createID(getNamespace(), account);
// Now connect
getContainer().connect(targetID, ConnectContextFactory.createPasswordConnectContext(password));
// Get a local ID for user account
userID = getID(account);
}
public IChatRoomContainer createChatRoom(String chatRoomName) throws Exception {
// Create chat room container from manager
roomInfo = presence.getChatRoomManager().getChatRoomInfo(chatRoomName);
chatroom = roomInfo.createChatRoomContainer();
return chatroom;
}
public IChatRoomInfo getChatRoomInfo() {
return roomInfo;
}
private ID getID(String name) {
try {
return IDFactory.getDefault().createID(namespace, name);
} catch (final IDCreateException e) {
e.printStackTrace();
return null;
}
}
public void sendMessage(String jid, String msg) {
if (sender != null) {
try {
sender.sendChatMessage(getID(jid), msg);
} catch (final ECFException e) {
e.printStackTrace();
}
}
}
public synchronized boolean isConnected() {
if (container == null)
return false;
return (container.getConnectedID() != null);
}
public synchronized void close() {
if (container != null) {
container.dispose();
container = null;
presence = null;
sender = null;
receiver = null;
userID = null;
}
}
}