blob: df854049d0aed55d179504acd59556134ab946d5 [file] [log] [blame]
/****************************************************************************
* Copyright (c) 2010 Composent, Inc. and others.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* Contributors:
* Composent, Inc. - initial API and implementation
*
* SPDX-License-Identifier: EPL-2.0
*****************************************************************************/
package org.eclipse.ecf.example.clients.applications;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.ecf.core.identity.ID;
import org.eclipse.ecf.example.clients.IMessageReceiver;
import org.eclipse.ecf.example.clients.XMPPChatClient;
import org.eclipse.ecf.presence.IPresence;
import org.eclipse.ecf.presence.IPresenceListener;
import org.eclipse.ecf.presence.im.IChatID;
import org.eclipse.ecf.presence.im.IChatMessage;
import org.eclipse.equinox.app.IApplication;
import org.eclipse.equinox.app.IApplicationContext;
public class ChatRobotApplication implements IApplication, IMessageReceiver, IPresenceListener {
// this map contains the account -> XMPPID. Items are added to it via the IPresenceListener.handlePresence method
private Map rosterUsers = Collections.synchronizedMap(new HashMap());
/*
* (non-Javadoc)
*
* @see org.eclipse.equinox.app.IApplication#start(org.eclipse.equinox.app.
* IApplicationContext)
*/
public Object start(IApplicationContext context) throws Exception {
// process program arguments
String[] originalArgs = (String[]) context.getArguments().get(
"application.args");
if (originalArgs.length < 3) {
System.out
.println("Parameters: <senderAccount> <senderPassword> <targetAccount> [<message>]. e.g. sender@gmail.com senderpassword receiver@gmail.com \"Hello there\"");
return Integer.valueOf(-1);
}
String message = null;
if (originalArgs.length > 3) message = originalArgs[3];
// Create client
XMPPChatClient client = new XMPPChatClient(this,this);
// connect
client.connect(originalArgs[0], originalArgs[1]);
// Wait for 5s for the roster/presence information to be received
final Object lock = new Object();
synchronized (lock) {
lock.wait(5000);
}
// Get desired user ID from rosterUsers map. This is just looking for a user that's active and on our contacts list
ID targetID = (ID) rosterUsers.get(originalArgs[2]);
if (targetID == null) {
System.out.println("target user="+originalArgs[2]+" is not on active on your contacts list. Cannot send message to this user");
return Integer.valueOf(0);
}
// Construct message
String msgToSend = (message==null)?"Hi, I'm an ECF chat robot.":message;
System.out.println("ECF chat robot example sending to targetAccount=" + originalArgs[2] + " message="+msgToSend);
// Send message to targetID
client.sendChat(targetID, msgToSend);
// Close up nicely and return
client.close();
return IApplication.EXIT_OK;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.equinox.app.IApplication#stop()
*/
public void stop() {
}
public void handleMessage(IChatMessage chatMessage) {
System.out.println("handleMessage(" + chatMessage + ")");
}
/**
* @since 2.0
*/
public void handlePresence(ID fromID, IPresence presence) {
System.out.println("handlePresence fromID="+fromID+" presence="+presence);
IChatID fromChatID = (IChatID) fromID.getAdapter(IChatID.class);
if (fromChatID != null) {
rosterUsers.put(fromChatID.getUsername() + "@" + fromChatID.getHostname(), fromID);
}
}
}