Užitečné komponenty pro Delphi a C++ Builder, díl 95. - komunikace mezi aplikacemi

V dnešním dílu mám pro vás jednu méně obvyklou a velmi užitečnou lahůdku. Představíme si komponenty, které umožní vzájemnou komunikaci mezi dvěma či více nezávislými aplikacemi v rámci stejného systému.

InterAppComm

Už podle krátkého úvodu je doufám jasné, že se nejedná o žádnou síťovou komunikaci, ale o komunikaci dvou aplikací, které běží na stejném systému ve stejný okamžik. Tato vzájemná komunikace spočívá v posílání dat (hodnot proměnných) a je realizována pomocí dvojice komponent, kdy jedna vystupuje jako odesílatel (a je umístěna v jedné aplikaci) a druhá jako příjemce (a je logicky součástí druhé aplikace či aplikací).

Autorem je Troels Jakobsen, s jehož některými komponentami jsme se v našem seriálu už setkali. Instalace je tentokrát "klasická ruční", kdy máme k dispozici soubor se zdrojovým kódem a běžným způsobem jej přidáme do libovolného existujícího či nového balíčku. Vše je bezproblémové a po chvilce máte na paletě záložku InterAppComm s komponentami InterAppSender a InterAppReceiver.

Názvy komponent hovoří za vše. Jedna data posílá a druhá je přijímá. Dalo by se tedy s jistou nadsázkou říci, že jedna funguje jako server a druhá jako klient, i když komunikace není vlastně v přímém slova smyslu obousměrná. Pochopitelně ale není problém umístit do obou aplikací obě komponenty a pak se již dají data posílat tam i zpět. Není ani problém mít jednu aplikaci data odesílající ("server") a několik jiných aplikací, které přijímají stejná data. Dokonce můžete mít i obě komponenty v rámci jedné aplikace a ta pak vlastně komunikuje "sama se sebou" (příklad využití viz. dále). Kombinací se dá vymyslet spousta a je jen na vás jakou "topologii sítě" si vymyslíte.

Základní princip fungování je tedy myslím jasný. Jak se dalo předpokládat, vše je interně postaveno na systému zpráv Windows, ale to nás celkem nemusí zajímat (pokud se tedy nebudete marně pokoušet o přenos aplikace na Linux), protože my pracujeme pohodlně pomocí metod a událostí. Mezi přímo podporované typy proměnných, které se dají posílat, patří Integer, Real a String. Můžete si ale vytvořit programově i vlastní typ zasílaných dat, takže v tomto nejste omezeni. Pojďme si teď v krátkosti povědět o komponentách několik detailů.

InterAppSender - Tato komponenta data posílá a funguje tedy jako "server". Ve vlastnostech v Object Inspectoru najdete překvapivě jen pouhé čtyři položky - obvyklé jméno a tag, poté handle, pomocí kterého jsou od sebe jednotlivé komponenty odlišitelné, a konečně položka Enabled, která slouží pochopitelně k aktivaci či deaktivaci komponenty. Při deaktivování za běhu jsou všichni "napojení příjemci" o této události informováni zprávou a mohou se podle toho zařídit. Událostí najdeme celkem pět a všechny souvisí s příjemci zpráv. Události tak komponentu postupně informují o vytvoření či ukončení "spojení" s novým příjemcem (nebo-li o tom, že byla spuštěna či ukončena nějaká aplikace obsahující komponenty InterAppReceiver), dále o aktivitě či neaktivitě na straně příjemců (vlastnost Enabled u komponenty InterAppReceiver) a poslední vlastnost informuje o tom, že příjemce odpovídá (potvrdil příjem dat). Metody v podobě čtyř funkcí pak slouží samotnému posílání dat. Pro každý typ (integer, real, string či uživatelská data) je zde samostatná metoda. Dále zde máme metodu Call, pomocí které zjistíme seznam všech připojených příjemců. A konečně CallGroup, která dělá totéž s tím rozdílem, že zjišťujeme seznam příjemců, kteří patří do stejné skupiny definované přes vlastnost GroupName.

InterAppReceiver - Příjem dat pak zajišťuje tato komponenta, kterou stačí umístit do jedné či více aplikací. Mezi vlastnostmi najdeme opět položku Enabled a Handle a navíc ještě GroupName, což je identifikátor sloužící ke sdružování stejných příjemců do skupin a možností těmto skupinám odesílat stejná data. Metody nemá tato komponenta žádné, protože je v komunikaci pasivní a nic vlastně nevykonává. Události pak odpovídají jednotlivým událostem z InterAppSenderu a tvoří s nimi komplementární dvojice, přičemž přes parametry těchto událostí získáme přijatá data.

Tolik tedy základní popis. Myslím, že postup práce je jasný a na vhodné využití komponenty jistě přijdete sami. Součástí balíku jsou ještě dva ukázkové projekty, na kterých je dobře naznačen způsob použití. Schválně si zkuste spustit několik instancí obou demoaplikací (na odeslání dat i příjem) a sami uvidíte, jak všechno dobře funguje a nedochází k žádným konfliktům. Druhý demoprojekt pak ukazuje, jak se dá využít komponent například k tomu, aby bylo možné spustit pouze jednu instanci dané aplikace. To je právě ten případ, kdy aplikace obsahuje obě komponenty a komunikuje vlastně sama se sebou.

Tato dvojice komponent je zajímavý nápad a rozhodně nepatří mezi ty běžné. Potřebujete-li tedy vzájemnou jednoduchou komunikaci dvou a více aplikací na úrovni předávání jednoduchých proměnných, může být toto celkem slušný základ.

www
verze: 1.0
Delphi: testováno na verzi 7
C++ Builder: ?

Diskuze (3) Další článek: Šéf Oracle předvede v Praze databázi 10g

Témata článku: , , , , , , , , , , , , , , , ,