blob: 0366c8418ed380be5b8b1ae46d43844623d9d686 [file] [log] [blame]
/****************************************************************************
* Copyright (c) 2010 Composent, Inc.
*
* 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
* Boris Bokowski, IBM
*
* SPDX-License-Identifier: EPL-2.0
*****************************************************************************/
package org.eclipse.ecf.example.clients.applications;
import org.eclipse.ecf.core.identity.ID;
import org.eclipse.ecf.core.util.ECFException;
import org.eclipse.ecf.example.clients.IMessageReceiver;
import org.eclipse.ecf.example.clients.XMPPChatRoomClient;
import org.eclipse.ecf.presence.IIMMessageEvent;
import org.eclipse.ecf.presence.IIMMessageListener;
import org.eclipse.ecf.presence.chatroom.IChatRoomContainer;
import org.eclipse.ecf.presence.chatroom.IChatRoomMessage;
import org.eclipse.ecf.presence.chatroom.IChatRoomMessageEvent;
import org.eclipse.ecf.presence.chatroom.IChatRoomMessageSender;
import org.eclipse.ecf.presence.im.IChatMessage;
import org.eclipse.equinox.app.IApplication;
import org.eclipse.equinox.app.IApplicationContext;
/**
* To be started as an application. Go to Run->Run..., create a new Eclipse
* Application, select org.eclipse.ecf.example.clients.robot as the application
* and make sure you have all required plug-ins.
*
*/
public class ChatRoomRobotApplication implements IApplication, IMessageReceiver, IIMMessageListener {
private String senderAccount;
private Object lock = new Object();
private boolean done = false;
private IChatRoomMessageSender sender;
public Object start(IApplicationContext context) throws Exception {
// process program arguments
String[] originalArgs = (String[]) context.getArguments().get(
"application.args");
if (originalArgs.length < 4) {
System.out
.println("Parameters: <senderAccount> <senderPassword> <chatroomname>. e.g. sender@gmail.com senderpassword mychatroom");
return Integer.valueOf(-1);
}
senderAccount = originalArgs[0];
// Create client
final XMPPChatRoomClient client = new XMPPChatRoomClient(this);
// connect to senderAccount using senderPassword
client.connect(senderAccount, originalArgs[1]);
// get chat room
final IChatRoomContainer chatRoomContainer = client.createChatRoom(originalArgs[2]);
// join/connect to chat room
chatRoomContainer.connect(client.getChatRoomInfo().getRoomID(), null);
System.out.println("ECF chat room robot sender=" + senderAccount + " Connected to room: " + client.getChatRoomInfo().getRoomID().getName());
// Add message listener to chat room
chatRoomContainer.addMessageListener(this);
// Get chat room message sender
sender = chatRoomContainer.getChatRoomMessageSender();
sender.sendMessage("Hi, I'm a robot. To get rid of me, send me a direct message.");
synchronized (lock) {
while (!done) {
lock.wait();
}
}
return IApplication.EXIT_OK;
}
public void handleMessage(IChatMessage chatMessage) {
// direct message
try {
sender.sendMessage("gotta run");
} catch (final ECFException e) {
e.printStackTrace();
}
synchronized (lock) {
done = true;
lock.notify();
}
}
public void handleMessageEvent(IIMMessageEvent messageEvent) {
if (messageEvent instanceof IChatRoomMessageEvent) {
final IChatRoomMessage m = ((IChatRoomMessageEvent) messageEvent).getChatRoomMessage();
handleChatRoomMessage(m.getFromID(), m.getMessage());
}
}
private void handleChatRoomMessage(ID fromID, String messageBody) {
// message in chat room
if (fromID.getName().indexOf(senderAccount) != -1) {
// my own message, don't respond
return;
}
try {
if (messageBody.indexOf("e") != -1) {
sender.sendMessage("kewl");
} else if (messageBody.indexOf("s") != -1) {
sender.sendMessage(";-)");
} else {
sender.sendMessage("'s up?");
}
} catch (final ECFException e) {
e.printStackTrace();
}
}
public void stop() {
synchronized (lock) {
done = true;
lock.notify();
}
}
}