blob: c550f1002ec34884c107dc30e63659ea51b07f42 [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 java.util.Map;
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.IPresenceListener;
import org.eclipse.ecf.presence.im.IChatMessage;
import org.eclipse.ecf.presence.im.IChatMessageEvent;
import org.eclipse.ecf.presence.im.IChatMessageSender;
public class XMPPChatClient {
protected static String CONTAINER_TYPE = "ecf.xmpp.smack";
Namespace namespace = null;
IContainer container = null;
IPresenceContainerAdapter presence = null;
IChatMessageSender sender = null;
ID userID = null;
// Interface for receiving messages
IMessageReceiver receiver = null;
IPresenceListener presenceListener = null;
public XMPPChatClient() {
this(null);
}
public XMPPChatClient(IMessageReceiver receiver) {
super();
setMessageReceiver(receiver);
}
public XMPPChatClient(IMessageReceiver receiver,
IPresenceListener presenceListener) {
this(receiver);
setPresenceListener(presenceListener);
}
protected void setMessageReceiver(IMessageReceiver receiver) {
this.receiver = receiver;
}
protected void setPresenceListener(IPresenceListener listener) {
this.presenceListener = listener;
}
public IContainer setupContainer() throws ECFException {
if (container == null) {
container = ContainerFactory.getDefault().createContainer(
CONTAINER_TYPE);
namespace = container.getConnectNamespace();
}
return container;
}
public IContainer getContainer() {
return container;
}
protected Namespace getConnectNamespace() {
return namespace;
}
public void setupPresence() throws ECFException {
if (presence == null) {
presence = (IPresenceContainerAdapter) container
.getAdapter(IPresenceContainerAdapter.class);
sender = presence.getChatManager().getChatMessageSender();
presence.getChatManager().addMessageListener(
new IIMMessageListener() {
public void handleMessageEvent(
IIMMessageEvent messageEvent) {
if (messageEvent instanceof IChatMessageEvent) {
IChatMessage m = ((IChatMessageEvent) messageEvent)
.getChatMessage();
if (receiver != null) {
receiver.handleMessage(m);
}
}
}
});
if (presenceListener != null) {
presence.getRosterManager().addPresenceListener(
presenceListener);
}
}
}
public void connect(String account, String password) throws ECFException {
setupContainer();
setupPresence();
doConnect(account, password);
}
public void doConnect(String account, String password)
throws ECFException {
// Now connect
ID targetID = IDFactory.getDefault().createID(namespace, account);
container.connect(targetID, ConnectContextFactory
.createPasswordConnectContext(password));
userID = createID(account);
}
public ID createID(String name) {
try {
return IDFactory.getDefault().createID(namespace, name);
} catch (IDCreateException e) {
e.printStackTrace();
return null;
}
}
public void sendChat(String jid, String msg) {
if (sender != null) {
try {
sender.sendChatMessage(createID(jid), msg);
} catch (ECFException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void sendProperties(String jid, Map properties) {
if (sender != null) {
try {
sender.sendChatMessage(createID(jid), null, IChatMessage.Type.CHAT, null, null, properties);
} catch (ECFException e) {
// TODO Auto-generated catch block
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;
}
}
}