package battleship;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import org.jivesoftware.resource.Res;
import org.jivesoftware.smack.PacketListener;
import org.jivesoftware.smack.filter.PacketTypeFilter;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.provider.ProviderManager;
import org.jivesoftware.smack.util.StringUtils;
import org.jivesoftware.spark.SparkManager;
import org.jivesoftware.spark.plugin.Plugin;
import org.jivesoftware.spark.ui.ChatRoom;
import battleship.listener.ChatRoomOpeningListener;
import battleship.packets.GameOfferPacket;
import battleship.packets.MoveAnswerPacket;
import battleship.packets.MovePacket;
public class BattleshipPlugin implements Plugin{
private PacketListener _gameofferListener;
private ChatRoomOpeningListener _chatRoomListener;
@Override
public void initialize() {
ProviderManager.getInstance().addIQProvider(GameOfferPacket.ELEMENT_NAME, GameOfferPacket.NAMESPACE, GameOfferPacket.class);
ProviderManager.getInstance().addExtensionProvider(MovePacket.ELEMENT_NAME, MovePacket.NAMESPACE, MovePacket.class);
ProviderManager.getInstance().addExtensionProvider(MoveAnswerPacket.ELEMENT_NAME, MoveAnswerPacket.NAMESPACE, MoveAnswerPacket.class);
_gameofferListener = new PacketListener() {
@Override
public void processPacket(Packet packet) {
GameOfferPacket invitation = (GameOfferPacket) packet;
if (invitation.getType() == IQ.Type.GET) {
showInvitationInChat(invitation);
}
}
};
SparkManager.getConnection().addPacketListener(_gameofferListener,
new PacketTypeFilter(GameOfferPacket.class));
_chatRoomListener = new ChatRoomOpeningListener();
SparkManager.getChatManager().addChatRoomListener(_chatRoomListener);
}
private void showInvitationInChat(final GameOfferPacket invitation) {
invitation.setType(IQ.Type.RESULT);
invitation.setTo(invitation.getFrom());
final ChatRoom room = SparkManager.getChatManager().getChatRoom(StringUtils.parseBareAddress(invitation.getFrom()));
String name = StringUtils.parseName(invitation.getFrom());
final JPanel panel = new JPanel();
JLabel text = new JLabel("Game request from" + name);
JLabel game = new JLabel("Battleships");
game.setFont(new Font("Dialog", Font.BOLD, 24));
game.setForeground(Color.RED);
JButton accept = new JButton(Res.getString("button.accept").replace("&", ""));
JButton decline = new JButton(Res.getString("button.decline").replace("&", ""));
panel.add(text);
panel.add(game);
panel.add(accept);
panel.add(decline);
room.getTranscriptWindow().addComponent(panel);
accept.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
SparkManager.getConnection().sendPacket(invitation);
invitation.setStartingPlayer(!invitation.isStartingPlayer());
ChatRoomOpeningListener.createWindow(invitation, invitation.getFrom());
panel.remove(3);
panel.remove(2);
panel.repaint();
panel.revalidate();
}
});
decline.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
invitation.setType(IQ.Type.ERROR);
SparkManager.getConnection().sendPacket(invitation);
panel.remove(3);
panel.remove(2);
panel.repaint();
panel.revalidate();
}
});
}
@Override
public void shutdown() {
}
@Override
public boolean canShutDown() {
return false;
}
@Override
public void uninstall() {
}
}