Hlavní navigace

NFC Chat

Mirek Holý

Dnes se podíváme na jeden zajímavý chat, jehož klientská i serverová část jsou napsány v Javě. Výhody tohoto řešení tkví zejména v možnosti provozovat server na různých OS a v uživatelské přívětivosti klienta, který není závislý na obnovování okna chatu jako v případě řešení postaveném na webovém prohlížeči a HTML.

NFC Chat je distribuovaná aplikace, což umožňuje dobrou škálovatelnost. Pro snadnou průchodnost firewally lze použít HTTP tunelování. Klientskou část je možné provozovat ve webovém prohlížeči schopném spouštět Java applety, serverová část běží pod JDK 1.0.2 a vyšším. Domovská stránka projektu šířeného pod licencí LGPL se nachází na adrese nfcchat.source­forge.net. Tolik strohá fakta.

O programu

Jedná se o klasický chat umožňující on-line textovou komunikaci v různých místnostech, které mohou uživatelé také vytvářet. Hovořit lze jak do místnosti, tak šeptem jen k určitému uživateli. Důležitou funkcí je možnost zapnout si ignorování vybraného uživatele – kdo někdy strávil chvilku času např. na chatu webu seznamka.cz, určitě by tam něco podobného ocenil. Chat dovede pracovat s právy, uživatele můžete rozdělit do skupin a těm v konfiguračních souborech přidělit různou funkcionalitu. Například operátor bude mít právo vyhodit uživatele z místnosti, ale běžný uživatel ne.

NFC Chat je nyní ve verzi 1.0.6rc2, z čehož vyplývá, že ne vše je dotaženo do konce, hlavně v oblasti dokumentace. Chat lze samozřejmě provozovat v té podobě, v jaké je nabízen, ale mnohem zajímavější je využít ho jako základ pro vlastní řešení.

Vycházím z vlastních zkušeností, kdy jsem chatserver provozoval na Linuxu pod Sun JDK 1.3.

Instalace

K chatu je dodávána instalační dokumentace, podle pokynů lze server bez komplikací nainstalovat a spustit ho. NFC chatserver je distribuovaná aplikace. Pro Java Messaging Service a Java Naming and Directory Service je možno využít SwiftMQ. Pokud ovšem budete spouštět pouze jeden chat server, JMS a JNDI nepotřebujete, tudíž ani SwiftMQ nemusíte instalovat. Taktéž použití JDK 1.0.2 a JavaDeps 1.1 je volitelné. Budete-li ve zdrojovém kódu chatu dělat nějaké změny, je výhodné JavaDeps použít. Překlad spolehlivě proběhne i pod JDK 1.3, tudíž verzi 1.0.2 vysloveně nepotřebujete. Lze také vynechat instalaci Java Servlet API (např. Tomcat), a to v případě, že nebudete požadovat komunikaci chatu pomocí tunelování skrz HTTP. Chat server obsahuje dva základní konfigurační soubory – .env v hlavním adresáři chatserveru a nfc.conf v adresáři conf, kde naleznete i ostatní konfigurační soubory definující automatizovaná hlášení, práva k jednotlivým funkcím chatu apod. Nastavení obou je popsáno v dokumentaci, soubory jsou rovněž podrobně okomentovány. Dále je nutné změnit soubor setenv.sh v adresáři bin. Používáte-li k ověření uživatelů databázi MySQL, nastavíte parametry pro JDBC driver v souboru jdbcAuth.conf v adresáři conf. Vhodný JDBC driver pro MySQL naleznete na zde. Jar(y) driveru přidáte do CLASSPATH v souboru setenv.sh. Jak nainstalovat chat společně s Tomcatem a provozovat HTTP tunelování najdete v sekci FAQ na domovské stránce projektu. Klienta chatu můžete spustit jako samostatnou aplikaci nebo jako applet ve webovém prohlížeči. Potřebné instrukce jsou součástí dokumentace.

Změny zdrojového kódu

Předpokládám, že jste si opatřili distribuci NFC Chatu včetně zdrojového kódu a úvodní překlad proběhl bez problémů. Pokud si při úpravách vytvoříte vlastní soubor s novou třídou, smažte před překladem příslušný .deps_ soubor (viz soubory .deps_awt, .deps_client, .deps_server, případně .deps_swing v hlavním adresáři serveru). Soubor se vytvoří před vlastním překladem automaticky nový, již s údaji o přidané třídě.

Přístup do databáze při ověřování klieta

V konstruktoru třídy Jdbc v balíku com.lyrisoft.chat­.server.remote­.auth.jdbc se vytvoří dle parametrů zadaných v souboru jdbcAuth.conf spojení s databází. Ve třídě je metoda getRecord vracející JdbcRecord (viz. com.lyrisoft.chat­.server.remote­.auth.jdbc.JdbcRe­cord), která obsahuje autentizační parametry získané z databáze. Jde o jméno, heslo a úroveň přístupu (práva, např. uživatel, operátor…). V metodě getRecord je vlastní select, kterým získáváme z databáze data. Dle vlastních potřeb si můžete doprogramovat kriteria povolení přístupu klientům, např. závislost na čase.

Jména a parametry uživatele

NFC Chat standardně nedovoluje přiřazovat k jednotlivým jménům uživatelů parametry a s nimi dále na klientech pracovat. Např. pokud budete chtít udělat chat, kde si bude každý moci zvolit barvu svých řádků nebo zobrazovat vlastní ikonu u svého textu v místnosti, budete muset přistoupit ke změnám. Nejjednoduší je již po načtení příslušných údajů z databáze přiřadit ke stringu jména a oddělit např. lomítkem (red/mirek – uživatel mirek bude psát červeně). Jméno tak bude celým chatem putovat včetně všech parametrů a vy pouze ošetříte místa, kde se pracuje se jménem uživatele, aby se použilo skutečně jen jméno uživatele a ne parametry. NFC Chat standadně dovoluje při loginu použití jmen složených jen z alfanumerických znaků, tudíž nemůže dojít ke kolizi se zvoleným lomítkem.

Předávání parametrů appletu klienta chatu

V HTML kódu stránky, ze které applet spouštíte, nastavujete zároveň některé jeho parametry. Pokud chcete appletu předat tímto způsobem některé vlastní parametry, můžete je přidat a do zdrojového kódu umístit pasáže, které je zpracují. Např. budete chtít předat appletu barvu vstupního řádku chatu, tj. řádku, do kterého vepisujete text. Do html kódu mezi tagy appletu klienta chatu přidáte k řádkům s parametry nový řádek <param name=„inputColor“ value=„AA00AA“>. Ve třídě ChatClientApplet z balíku com.lyrisoft.chat­.client si najdete metodu installGuiFactory a analogicky např. podle parametru bgColor přidáme řádky:

Color inputColor = null; . . . try {
     String sinputColor = getParameter("inputColor");
     if (sinputColor != null) {
         inputColor = new Color(Integer.parseInt(sloginColor,16));
     }
}
catch (NumberFormatException e) {
}
.
.
.
if (inputColor != null) {
    _guiFactory.setAttribute("inputColor", inputColor);
}

Poté můžete inputColor použít ve třídách ChatPanel a PrivateChatPanel z balíku com.lyrisoft.chat­.client.gui.aw­t102 obdobně jako ostatní barvy.

Změna vzhledu klienta chatu

Klient je vytvořen pomocí knihovny AWT. Důležité třídy pro změnu vzhledu najdete v balíku com.lyrisoft.chat­.client.gui.aw­t102, jedná se především o ChatPanel, Console a potomka ChatPanelu, třídu EnhancedChatPanel. Přestože chatklient pro zobrazování textu komunikace nepoužívá standardní TextArea, ale vlastní třídu HyperlinkTextView z balíku com.lyrisoft.awt, pro seznamy používá List z AWT. Nevýhodou Listu je nemožnost stanovit si parametry zobrazovaného textu pro jednotlivé prvky seznamu, o práci s ikonami ani nemluvě, např. v seznamu uživatelů se jednotliví uživatelé nemohou barevně lišit. Nezbývá než si vytvořit vlastní třídu pro seznamy, např. s pomocí HyperlinkTextView.


Určitě se jedná o program, o kterém je dobré vědět. Požadavky na chaty jsou často dost odlišné a docela se hodí mít nějaký základ se zdrojovým kódem, ze kterého je možné vycházet.

PS: Na všechny dotazy ohledně NFC Chatu rád odpovím, budu-li odpověď znát.

Našli jste v článku chybu?

24. 6. 2001 18:40

Michal Illich (neregistrovaný)

> Problem je ten, v Jave to nebude nikdy tak rychle a efektivni jako v C

Nevidim duvod, proc by to melo byt pomale.
Z programovani Javachatu mam zkusenost, ze Java je vetsinou slusne rychla; napr. ma veskere vykreslovaci funkce optimalizovane.

Vyse uvedene se vztahuje na klienta, u serveru je v soucasne dobe nesmysl delat ho v Jave. ALE NENI TO PROBLEM JAVY. Jedna se tu o dva jine problemy:

- asynchronni komunikace X multithreading
- compilovany kod X interpretovany

druhy proble…









Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

DigiZone.cz: Velká cena v Abú Dhabí: 131 ti­síc diváků

Velká cena v Abú Dhabí: 131 ti­síc diváků

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

120na80.cz: Horní cesty dýchací. Zkuste fytofarmaka

Horní cesty dýchací. Zkuste fytofarmaka

Lupa.cz: Kdo pochopí vtip, může jít do ČT vyvíjet weby

Kdo pochopí vtip, může jít do ČT vyvíjet weby

Měšec.cz: mBank cenzuruje, zrušila mFórum

mBank cenzuruje, zrušila mFórum

Vitalia.cz: Spor o mortadelu: podle Lidlu falšovaná nebyla

Spor o mortadelu: podle Lidlu falšovaná nebyla

Podnikatel.cz: Snížení DPH na 15 % se netýká všech

Snížení DPH na 15 % se netýká všech

Měšec.cz: Air Bank zruší TOP3 garanci a zdražuje kurzy

Air Bank zruší TOP3 garanci a zdražuje kurzy

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

Podnikatel.cz: Chtějte údaje k dani z nemovitostí do mailu

Chtějte údaje k dani z nemovitostí do mailu

Vitalia.cz: Jmenuje se Janina a žije bez cukru

Jmenuje se Janina a žije bez cukru

Vitalia.cz: Pamlsková vyhláška bude platit jen na základkách

Pamlsková vyhláška bude platit jen na základkách

Vitalia.cz: Taky věříte na pravidlo 5 sekund?

Taky věříte na pravidlo 5 sekund?

120na80.cz: Co všechno ovlivňuje ženskou plodnost?

Co všechno ovlivňuje ženskou plodnost?

DigiZone.cz: ČRo rozšiřuje DAB do Berouna

ČRo rozšiřuje DAB do Berouna

120na80.cz: Na ucho teplý, nebo studený obklad?

Na ucho teplý, nebo studený obklad?

Podnikatel.cz: Udávání kvůli EET začalo

Udávání kvůli EET začalo