diff -r e7b3ef7aaef4 -r 74d06a8a4948 java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/chat/MistnostPripojena.java --- a/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/chat/MistnostPripojena.java Tue Jul 19 15:20:47 2011 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,112 +0,0 @@ -package cz.frantovo.nekurak.chat; - -import cz.frantovo.nekurak.dto.ZpravaChatu; -import java.util.ArrayList; -import java.util.Collection; -import java.util.LinkedList; -import org.jivesoftware.smack.PacketListener; -import org.jivesoftware.smack.XMPPException; -import org.jivesoftware.smack.packet.Message; -import org.jivesoftware.smack.packet.Packet; -import org.jivesoftware.smack.util.StringUtils; -import org.jivesoftware.smackx.muc.MultiUserChat; - -/** - * - * @author fiki - */ -public class MistnostPripojena implements PacketListener { - - private final MultiUserChat muc; - private final Mistnost nastaveni; - private final LinkedList fronta = new LinkedList(); - private final String mojePrezdivka; - /** Zatím nejvyšší pořadové číslo – poradoveCislo. */ - private int pocitadloZprav = 0; - - public MistnostPripojena(Mistnost mistnost, Spojeni spojeni) throws XMPPException { - nastaveni = mistnost; - mojePrezdivka = mistnost.getPrezdivka(); - muc = new MultiUserChat(spojeni.getSpojeni(), mistnost.getMuc()); - muc.join(mistnost.getPrezdivka()); - - if (mistnost.getUvitaciZprava() != null) { - muc.sendMessage(mistnost.getUvitaciZprava()); - } - - muc.addMessageListener(this); - } - - public void processPacket(Packet packet) { - if (packet instanceof Message) { - Message m = (Message) packet; - String od = StringUtils.parseResource(m.getFrom()); - String text = m.getBody(); - - /** Vydolujeme jméno z anonymně (námi) poslaných zpráv */ - boolean overenyUzivatel = true; - if (mojePrezdivka.equals(od) && text.contains(":")) { - od = text.split(":")[0]; - text = text.substring(od.length() + 2); - overenyUzivatel = false; - } - - /** Přidáme zprávu do fronty historie. */ - ZpravaChatu z = new ZpravaChatu(od, text, overenyUzivatel, dalsiPoradoveCislo()); - pridejZpravu(z); - - /** TODO: zpracovávat další události – příkazy atd. */ - } - } - - /** - * @param z Zpráva, která se má přidat do fronty (historie). - */ - private void pridejZpravu(ZpravaChatu z) { - fronta.add(z); - - while (fronta.size() > nastaveni.getDelkaFronty()) { - fronta.removeFirst(); - } - } - - public void posliZpravu(ZpravaChatu zprava) throws XMPPException { - muc.sendMessage(zprava.toString()); - } - - public void odejdi() throws XMPPException { - if (nastaveni.getLouciciZprava() != null) { - muc.sendMessage(nastaveni.getLouciciZprava()); - } - muc.leave(); - } - - /** - * @param nazev název místnosti (něco@moje.doména) - * @return true, pokud se jedná o místnost s tímto názvem - */ - public boolean porovnejNazev(String nazev) { - return nazev.equals(nastaveni.getMuc()); - - } - - public Collection getZpravy(int poradoveCislo) { - /** - * TODO: - * http://stackoverflow.com/questions/122105/java-what-is-the-best-way-to-filter-a-collection - * http://www.javaworld.com/javaworld/jw-10-2004/jw-1018-filter.html - */ - Collection vysledek = new ArrayList(); - for (ZpravaChatu z : fronta) { - if (z.getPoradoveCislo() > poradoveCislo) { - vysledek.add(z); - } - } - return vysledek; - } - - private int dalsiPoradoveCislo() { - pocitadloZprav++; - return pocitadloZprav; - } -}