jIM

I. jIM team (podle abecedy)

ˇ         RNDr. Tesková Jana - vedoucí

ˇ         Babka Vlastimil

ˇ         Bulan Zdeněk

ˇ         Dokulil Jiří

ˇ         Varga Martin

ˇ         Vitovják Radek

II. Specifikace

II.1 Návrh

jIM bude náš vlastní instant messenger (program pro komunikaci mezi lidmi podobný např. ICQ), postavený jako klient-server aplikace. Server se bude starat o navazování spojení, bude udržovat seznam uživatelů, bude se starat o propojení se sítí ICQ (pokud to bude možné) a spoustu dalších věcí, viz dále. Klienti budou postaveni na mikrojádru, které bude umožňovat pouze spojení se serverem a přímé spojení mezi jednotlivými klienty. Veškerá další činnost klientů bude vykonávána moduly, které se budou na mikrojádro napojovat. Napojení modulů bude řešeno přes standardizované rozhraní, které umožní snadné přidávání modulů vytvořených uživatelem.

II.1.1 Server

Bude napsán v jazyce C/C++ a poběží v OS Linux.

Jeho úkolem bude:

ˇ         uchovávat seznam všech uživatelů a informací o nich (samozejmě včetně registrace nových uživatelů a rušení jejich registrací)

ˇ         poskytovat veřejné informace o uživateli (je-li online, jméno, apod. bude možno nastavit)

ˇ         navazovat spojení mezi přihlášenými uživateli, aniž by uživatelé museli znát IP druhého účastníka, jednoduše podle jména apod.

ˇ         starat se o spojení mezi klienty, kteří nemohou komunikovat jednoduše mezi sebou (např. posílání souborů mezi dvěma klienty za firewallem)

ˇ         uchovávat seznam kontaktů uživatele

ˇ         uchovávat alespoň část historie rozhovorů mezi uživateli

ˇ         zprostředkovat komunikaci se sítí ICQ (aby každý uživatel jIMa, který bude mít vlastní ICQ number, mohl komunikovat nejen s uživateli sítě jIMa, ale i s uživateli v síti ICQ)

ˇ         spouštět mikrojádro a moduly pro ultratenké web-klienty (viz níže)

Protože se šíří zvěsti, že společnost ICQ plánuje změnu protokolu používaného ICQ klienty tak, aby nebylo možné používat jiné klienty než jejich vlastní, není v tuto chvílo možné zaručit funkčnost propojení na ICQ. Stejně tak zatím nelze zaručit úroveň ICQ služeb, které bude jIM poskytovat (například posílání souborů, stažení contact listu...). Přestože v tomto směru uděláme, co bude možné, slíbit zatím nemůžeme nic.

Server bude dále používat databázi, ve které budou uloženy informace o uživatelích a historie. Zatím není jasné, zda využijeme služeb PostgreSQL, nebo se omezíme na základní funkce SQL tak, abychom mohli použít libovolnou databázi s SQL jazykem.

II.1.2 Základní klient

Bude napsán v Javě, takže poběží na všech platformách, kde běží Javovské aplikace. Bude se skládat z mikrojádra, které se bude starat pouze o komunikaci - posílání a přijímání dat, ať už mezi klientem a serverem nebo mezi dvěma a více klienty, a modulů, které se postarají o vše ostatní. Modulů bude možno připojit libovolné množství, budou mít definované rozhraní s mikrojádrem a tím pádem bude kdokoliv jiný moci naprogramovat jakýkoliv další modul.

Klient navíc bude schopen do jisté míry pracovat i bez serveru tak, že bude navazovat přímé spojení s uživateli, jejichž IP adresu si pamatuje. Další funkce, která se obejde i bez serveru je chování podobné UNIXovému TALKu, tj. schopnost navazovat spojení nikoliv na uživatele ale na počítač, na kterém běží další klient jIMa.

II.1.3 Komunikace

Klient bude se serverem a ostatními klienty komunikovat pomocí TCP/IP. Komunikace mikrojádra a modulů bude probíhat skrz standardizované rozhraní, tak aby bylo možno k mikrojádru připojit i další moduly, vytvořené podle potřeb uživatelů

Data budou posílána jako XML nebo binární data podle požadavků konkretních modulů. XML přenos umožní dobrou spolupráci s moduly, které budou v podstatě překládat část dat mezi "svými" XML tagy, viz dále. Při absenci některého modulu, budou data vypsána v nezpracované formě s varováním, že takový modul chybí.

II.1.4 Moduly

Holý klient jIMa se skládá pouze z mikrojádra a modulů pro uživatelské rozhraní. Jako ukázku rozšířitelnosti však budou vytvořeny i další moduly.

ˇ         Uživatelský interface - samostatný modul, který se postará o uživatelský vstup a výstup a zobrazení základních údajů, konfiguraci apod., možná bude rozdělen na více modulů. Výhoda oddělení do samostatného modulu umožní libovolně měnit jeho vzhled.

ˇ         Matematické symboly - modul, který bude překládat matematické vzorce do XML a graficky reprezentovat vzorce zapsané v XML. Viz příloha A

ˇ         Konference - komunikace mezi dvěma a více uživateli v "jednom okně"

ˇ         Posílání souborů

ˇ         a další

II.1.5 Web-klient

jIM bude obsahovat i opravdový web-klient. Ne takový jako má ICQ, kde je ke spuštění potřeba browser s podporou Javy, ale takový, který bude potřebovat pouze libovolný browser, podporující HTML. Všechnu ostatní práci udělají moduly, které bude pouštět server (a které budou samozřejmě totožné s těmi pro klienty). Web-klient se od klasického bude lišit pouze moduly pro uživatelský interface. Mikrojádro bude pravděpodobně totožné s mikrojádrem klienta, případné rozdíly budou spočívat pouze v optimalizaci pro běh na serveru.

Přílohy

A - modul pro matematické vzorce, pouze motivace!

Tento modul slouží jako ukázka, jak lze schopnosti jIMa rozšiřovat přidáváním modulů.

Řekněme, že chcete poslat někomu příklad z matematické analýzy. Naše data se budou posílat přibližně v tomto formátu:

 
<message>
  <from>Caster</from>
  <time>158505254</time>
  <text>
    Ahoj, mám to řešení tvého příkladu.
    Je to integral od 0 do PI ze ((sin x)^2)dx 
  </text>
</message>

Ale díky modulu pro vzorce budete moci integrál zapsat jinak. Náš modul vám umožní vzorec vytvořit pomocí vizuálního nástroje, který bude součástí modulu, nebo napsat ručně, přeložit do XML a následně ho druhému uživateli z XML vykreslit jako obrázek. Data budou poté odeslána v této formě:

 
<message>
  <from>Caster</from>
  <time>158505254</time>
  <text>
    Ahoj, mám to řešení tvého příkladu.
    Je to 
      <module id="math">
        <integral var="x">
          <low>0</low><hi><pi/></hi>
          <pow>
            <base><sin>x</sin></base>
            <power>2</power>
          </pow>
        </integral>
      </module>
  </text>
</message>

Pro zjednodušení zápisu možná budeme definovat některé jednoduché a často používané funkce přímo, např. <sin> tak, jak je uvedeno v příkladu, ostatní fce budou zahrnuty v tagu <fce name="jméno fce">