/*******************************************************************************
* Copyright (c) 2007 IBM Corporation and others.
* 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ecf.provider.irc.bot;
import java.util.List;
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.IDFactory;
import org.eclipse.ecf.core.identity.Namespace;
import org.eclipse.ecf.core.util.ECFException;
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.IChatRoomInfo;
import org.eclipse.ecf.presence.chatroom.IChatRoomManager;
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.provider.irc.internal.bot.IBotEntry;
import org.eclipse.ecf.provider.irc.internal.bot.ICommandEntry;
public class Bot implements IIMMessageListener {
private IBotEntry bot;
private IContainer container;
private IChatRoomManager manager;
private Namespace namespace;
private IChatRoomMessageSender sender;
private static String CONTAINER_TYPE = "ecf.irc.irclib";
public Bot(IBotEntry bot) {
this.bot = bot;
start();
}
private void start() {
try {
setup();
} catch (ECFException e) {
e.printStackTrace();
}
}
protected void setup() throws ECFException {
if (container == null) {
container = ContainerFactory.getDefault().createContainer(CONTAINER_TYPE);
namespace = container.getConnectNamespace();
}
manager = (IChatRoomManager) container.getAdapter(IChatRoomManager.class);
ID targetID = IDFactory.getDefault().createID(
namespace,
"irc://" + bot.getName() + "@" + bot.getServer());
container.connect(targetID, null);
IChatRoomInfo room = manager.getChatRoomInfo(bot.getChannel());
IChatRoomContainer roomContainer = room.createChatRoomContainer();
roomContainer.connect(room.getRoomID(), null);
roomContainer.addMessageListener(this);
sender = roomContainer.getChatRoomMessageSender();
}
public void handleMessageEvent(IIMMessageEvent event) {
if (event instanceof IChatRoomMessageEvent) {
IChatRoomMessageEvent roomEvent = (IChatRoomMessageEvent) event;
IChatRoomMessage message = roomEvent.getChatRoomMessage();
List commands = bot.getCommands();
for(int i = 0; i < commands.size(); i++) {
ICommandEntry entry = (ICommandEntry) commands.get(i);
entry.execute(message.getMessage(), sender);
}
}
}
}