| Přidání IPC Socketu do
aplikace Po1 (semafor): Vidlácký postup je
prostý. Šáhneme do Toolboxu (zde se jmenuje Library) a přidáme si do
projektu IPV Socket1. Musíme nastavit stejnou cestu s dočasnému
souboru, kterou budou mít ostatní aplikace, které budou se semaforem
komunikovat - viz obrázek dole, pravá část. Nastavil jsem cestu Path
jako Po1:

Vedle nevizuálního IPC Socketu si všimněte další
komponety (Timer1). Jde o časovač, který nedělá nic jiného, než sadu
příkazů uvedenou na obrázku dole. A sadu příkazů vykonává vždy, když
uplyne nastavená doba v milisekundách, např. 1000 ms. Konkrétně
časovač každou vteřinu vyčte IPCSocket1 a vyčtený řetězec uloží do
proměnné povel. Pak se provede vyhodnocení (pomocí příkazů If then end
if). Pokud je podmínka splněna, volá se jedna ze tří metod, které jsme
již dříve napsali (Cervena, Zelena, Zluta). Kód metod se postará o to,
aby se komponenty Oval1 až Oval3 obarvily předepsaným způsobem.
Ještě se podívejte do listingu na příkaz použitý v metodě Sub Open( ).
Na první řádek byl přidán příkaz IPCSocket1.Listen. Tento příkaz nám
zapne IPCSocket do režimu naslouchání, s otevřením okna Socket začne
naslouchat a my ho můžeme příkazem v Timer1 vyčítat, řetězec ukládat
do proměnné, testovat, jaký povel přišel a spustit odpovídající
metodu.

Přidání IPC Socketu do aplikace Řídítka
Tady potřebujeme, aby se IPC Socket připojil k
naslouchajícímu serveru. To zařídíme tak, že při otevření okna, je to
v Sub Open( ), spustíme příkaz IPCSocket1.Connect; v takovém případě
nebude Socket naslouchat, ale půjde do něho zapisovat povely. Zase se
podíváme do listingu programu. Vidíme tam tři metody, Sub Cervena( ),
Sub Zelena ( ), Sub Zluta ( ). V těle každé metody (procedury) je
jediný příkaz, který vypadá např. takto: IPCSocket.Write ("Cervena"),
atd. Do IPC Socketu je tedy zapsán řetězec znaků mezi uvozovkami.

Na obrázku vidíme novou visuální komponentu
SegmentedControl1. Rychle si s použitím tzv. Inspektoru (Properties)
osvojíme, co se dá s tímto objektem dělat, jak se přidávají/ubírají
tlačítka, jak se mění texty, apod. My potřebujeme, aby při stisknutí
odpovídajícího tlačítka (jsou tři) byla zavolána jedna ze tří metod
(procedur), kterou jsme si napsali výše. Kód je jednoduchý a je na
obrázku dole. Otestujeme, které tlačítko jsme právě stiskli.
Otestujeme pomocí příkazu If ItemIndex = 0, atd. Tlačítkům jsou zleva
do prava přiřazovány index od 0 do max. počtu tlačítek (zde do 2).
Pokud ItemIndex je 0, 1 nebo 2, zavoláme odpovídající metodu (Cervena,
Zluta, Zelena). Metoda (procedura) pak odešle odpovídající řetězec do
IPCSocketu. A to je vše. Pozor, IPCSocket serveru naslouchá!

Nezbývá, než si to všechno hezky vyzkoušet. Funguje
to :-)
Poznámky:
1. Pokud máte jen neplacenou verzi, jako já,
musíte spustit ve vývojovém prostředí oba projekty současně.
2. Po otevření projektů spustíme obě aplikace. To už budeme vidět obě
okna a můžeme zkoušet posílání povelů z aplikace Řídítka do aplikace
Semafor.
3. Je to jednoduché, že? Vidlák, jako já, rád používá komunikaci
pomocí tzv. Socketů. Socket je vpodstatě Handle,
netuším, jak se to řekne česky. Jde o zapouzdřený kód, který neznáme,
který nám zabezpečí komunikaci mezi aplikacemi nebo mezi počítači v
síti (TCPSocket) nebo obsluhu sériového portu v USB rozhraní (Serial).
4. Co mě ve Visual Studiu 2017 odradilo? O důvodech, proč Visual Basic
Express 2008 musím opustit, jsem psal. Nejsou v něm komponenty typu
Socket a nelze v něm napsat perspektivní aplikaci. Ve Visual Studiu
2017 se zase ztrácím. Je to pro mě opravdu nepřehledný, velice objemný
Ramlware, který si klade požadavky na HW. Jenže moje oko tam na
první pohled ty Sockety také nevidělo. Při letmém googlování jsem
zjistil např. ve kterých třídách ten TCP IP Socket je (viz např. zde:
https://www.itnetwork.cz/csharp/pokrocile/csharp-tutorial-tcp-pripojeni-komunikace),
je tam i srozumitelný a vysvětlený kód v jazyce C#, jenže moderní
vývojový prostředek by snad mohl vidlákovi (a to skutečně jsem) pomoci
s rutinami
Imports
System.Net a Imports
System.Net.Sockets, tedy "includovat třídy" a s prací "psát několik řádek kódu
pro Socket". Mohu konstatovat, že jak Gambas3 (pro Linux) nebo XOJO
(pro více platforem) je prostě někde jinde. Pro mě jsou snadnost
pochopení, málo práce při kódování a krátký čas na obdržení
viditelného výsledku, nesmírně důležité parametry. Ale snad to s tím
Imports
System.Net.Sockets a psaním řádek taky nějak půjde. To zase bude oser
...
Domácí úkol
V úloze jsme se naučili nové prvky, tzv. IPCSocket pro komunikaci
a SegmentedControl (tlačítka). Prvky jsme použili a dopsali k nim
příslušné procedury (metody). Zopakovali jsme si prvek Timer, který
jsme už dříve vyzkoušeli ve Visual Basic na aplikaci spínacích hodin.
Tenkrát jsme tam neřešili komunikaci, protože jsme se jí ještě
nenaučili.
Za domácí úkol si můžeme upravit řídítka tak, aby obsahovala jen dvě
tlačítka v SegmentedControl a metody zkrátíme tak, aby odcházely jen
dva povely (Cervena a Zelena). To je jednoduché, jenom něco vymažeme.
Upravíme si však také Semafor. A to tak, že upravíme použité metody
tak, aby přechod z červené na zelenou a ze zelené na červenou šel tak,
že se na okamžik rozsvítí žluté světlo. To dáme, že?
|