package net.sphene.goim.ingame.directx;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.preference.IPreferenceStore;
import org.jivesoftware.smack.RosterEntry;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.util.StringUtils;
import org.jivesoftware.smackx.muc.MultiUserChat;
import net.sphene.goim.rcp.beans.GOIMAccount;
import net.sphene.goim.rcp.extensionpoints.IChatWindowManager;
import net.sphene.goim.rcp.ui.chat.GOIMChatObject;
public class DXInGameMessengerExtension implements IChatWindowManager {
DXInGameMessageBridgeImpl bridge;
Map<String, GOIMChatObject> chatIds = new HashMap<String,GOIMChatObject>();
String launchedGame = null;
public DXInGameMessengerExtension() {
bridge = new DXInGameMessageBridgeImpl();
DXInGameMessenger.getDefault().registerDXInGameMessengerExtension(this);
}
public boolean handleMessage(GOIMAccount account, Message msg, boolean alreadyHandled) {
if(msg != null && msg.getBody() != null) {
if(chatIds.get(msg.getFrom()) == null)
chatIds.put(msg.getFrom(),
new GOIMChatObject(account,msg.getFrom(),msg.getThread()));
RosterEntry entry = account.xmpp.getRoster().getEntry(StringUtils.parseBareAddress(msg.getFrom()));
String nick = entry == null ? msg.getFrom() : (entry.getName() == null ? entry.getUser() : entry.getName());
bridge.sendMessage(msg.getFrom(),
nick,
"<" + nick + "> " + msg.getBody());
if(launchedGame != null) return true;
}
return false;
}
public boolean openWindow(GOIMAccount account, String jid, boolean tryBareAddress) {
// ignored
return false;
}
public boolean openMUCWindow(GOIMAccount account, String jid, MultiUserChat muc) {
// ignored
return false;
}
public class DXInGameMessageBridgeImpl extends DXInGameMessageBridge {
@Override
public void replyMessage(String jabberId, String msg) {
System.out.println("got replyMessage(" + jabberId + "," + msg + ")");
if(msg.startsWith("/")) {
if(msg.equals("/time")) {
bridge.sendMessage("","","Current time is " + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
} else if(msg.equals("/version")) {
bridge.sendMessage("","","Gamers Own Instant Messenger V" + Platform.getProduct().getDefiningBundle().getHeaders().get("Bundle-Version") + " (InGame Messenger V" + DXInGameMessenger.getDefault().getBundle().getHeaders().get("Bundle-Version") + ")");
bridge.sendMessage("","","(C) Copyright 2005-2006 by Herbert Poul - http://goim.us");
}
} else {
if(StringUtils.parseServer(jabberId).equals("|dxhook")) {
gotInternalMessage(StringUtils.parseName(jabberId),msg);
} else {
GOIMChatObject chat = chatIds.get(jabberId);
if(chat != null) {
Message message = chat.createMessage();
message.setBody(msg);
chat.sendMessage(message);
}
}
}
}
}
public void gotInternalMessage(String name, String msg) {
if(name.equals("launch")) {
System.out.println("A game was launched: " + msg);
if(launchedGame != null)
System.out.println(" ??????? Another game is already launched: " + launchedGame);
launchedGame = msg;
bridge.sendMessage("setduration@|dxhook","","20000");
IPreferenceStore store = DXInGameMessenger.getDefault().getPreferenceStore();
if(!store.isDefault("pos:" + launchedGame)) {
System.out.println("setpos@|dxhook: " + store.getString("pos:" + launchedGame));
bridge.sendMessage("setpos@|dxhook","",store.getString("pos:" + launchedGame));
} else {
System.out.println("pos of " + launchedGame + " is default ..");
}
} else if(name.equals("terminate")) {
System.out.println("A game was terminated: " + msg);
if(launchedGame == null)
System.out.println(" ??????? No game currently launched ?");
launchedGame = null;
} else if(name.equals("newpos")) {
IPreferenceStore store = DXInGameMessenger.getDefault().getPreferenceStore();
store.setValue("pos:" + launchedGame,msg);
System.out.println("newpos ... of " + launchedGame + " is " + msg);
}
}
public DXInGameMessageBridge getMessageBridge() {
return bridge;
}
}