/******************************************************************************* * 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; } } }