1.1 --- a/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/chat/MistnostPripojena.java Tue Jul 19 15:20:47 2011 +0200
1.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
1.3 @@ -1,112 +0,0 @@
1.4 -package cz.frantovo.nekurak.chat;
1.5 -
1.6 -import cz.frantovo.nekurak.dto.ZpravaChatu;
1.7 -import java.util.ArrayList;
1.8 -import java.util.Collection;
1.9 -import java.util.LinkedList;
1.10 -import org.jivesoftware.smack.PacketListener;
1.11 -import org.jivesoftware.smack.XMPPException;
1.12 -import org.jivesoftware.smack.packet.Message;
1.13 -import org.jivesoftware.smack.packet.Packet;
1.14 -import org.jivesoftware.smack.util.StringUtils;
1.15 -import org.jivesoftware.smackx.muc.MultiUserChat;
1.16 -
1.17 -/**
1.18 - *
1.19 - * @author fiki
1.20 - */
1.21 -public class MistnostPripojena implements PacketListener {
1.22 -
1.23 - private final MultiUserChat muc;
1.24 - private final Mistnost nastaveni;
1.25 - private final LinkedList<ZpravaChatu> fronta = new LinkedList<ZpravaChatu>();
1.26 - private final String mojePrezdivka;
1.27 - /** Zatím nejvyšší pořadové číslo – poradoveCislo. */
1.28 - private int pocitadloZprav = 0;
1.29 -
1.30 - public MistnostPripojena(Mistnost mistnost, Spojeni spojeni) throws XMPPException {
1.31 - nastaveni = mistnost;
1.32 - mojePrezdivka = mistnost.getPrezdivka();
1.33 - muc = new MultiUserChat(spojeni.getSpojeni(), mistnost.getMuc());
1.34 - muc.join(mistnost.getPrezdivka());
1.35 -
1.36 - if (mistnost.getUvitaciZprava() != null) {
1.37 - muc.sendMessage(mistnost.getUvitaciZprava());
1.38 - }
1.39 -
1.40 - muc.addMessageListener(this);
1.41 - }
1.42 -
1.43 - public void processPacket(Packet packet) {
1.44 - if (packet instanceof Message) {
1.45 - Message m = (Message) packet;
1.46 - String od = StringUtils.parseResource(m.getFrom());
1.47 - String text = m.getBody();
1.48 -
1.49 - /** Vydolujeme jméno z anonymně (námi) poslaných zpráv */
1.50 - boolean overenyUzivatel = true;
1.51 - if (mojePrezdivka.equals(od) && text.contains(":")) {
1.52 - od = text.split(":")[0];
1.53 - text = text.substring(od.length() + 2);
1.54 - overenyUzivatel = false;
1.55 - }
1.56 -
1.57 - /** Přidáme zprávu do fronty historie. */
1.58 - ZpravaChatu z = new ZpravaChatu(od, text, overenyUzivatel, dalsiPoradoveCislo());
1.59 - pridejZpravu(z);
1.60 -
1.61 - /** TODO: zpracovávat další události – příkazy atd. */
1.62 - }
1.63 - }
1.64 -
1.65 - /**
1.66 - * @param z Zpráva, která se má přidat do fronty (historie).
1.67 - */
1.68 - private void pridejZpravu(ZpravaChatu z) {
1.69 - fronta.add(z);
1.70 -
1.71 - while (fronta.size() > nastaveni.getDelkaFronty()) {
1.72 - fronta.removeFirst();
1.73 - }
1.74 - }
1.75 -
1.76 - public void posliZpravu(ZpravaChatu zprava) throws XMPPException {
1.77 - muc.sendMessage(zprava.toString());
1.78 - }
1.79 -
1.80 - public void odejdi() throws XMPPException {
1.81 - if (nastaveni.getLouciciZprava() != null) {
1.82 - muc.sendMessage(nastaveni.getLouciciZprava());
1.83 - }
1.84 - muc.leave();
1.85 - }
1.86 -
1.87 - /**
1.88 - * @param nazev název místnosti (něco@moje.doména)
1.89 - * @return true, pokud se jedná o místnost s tímto názvem
1.90 - */
1.91 - public boolean porovnejNazev(String nazev) {
1.92 - return nazev.equals(nastaveni.getMuc());
1.93 -
1.94 - }
1.95 -
1.96 - public Collection<ZpravaChatu> getZpravy(int poradoveCislo) {
1.97 - /**
1.98 - * TODO:
1.99 - * http://stackoverflow.com/questions/122105/java-what-is-the-best-way-to-filter-a-collection
1.100 - * http://www.javaworld.com/javaworld/jw-10-2004/jw-1018-filter.html
1.101 - */
1.102 - Collection<ZpravaChatu> vysledek = new ArrayList<ZpravaChatu>();
1.103 - for (ZpravaChatu z : fronta) {
1.104 - if (z.getPoradoveCislo() > poradoveCislo) {
1.105 - vysledek.add(z);
1.106 - }
1.107 - }
1.108 - return vysledek;
1.109 - }
1.110 -
1.111 - private int dalsiPoradoveCislo() {
1.112 - pocitadloZprav++;
1.113 - return pocitadloZprav;
1.114 - }
1.115 -}