App tethering je možná nejzajímavější novinkou v Delphi XE6 (v C++Builderu je to samozřejmě kompilace pro Android včetně ARC) - no možná ještě integrace cloud služeb (BaaS). Podpora tetheringu
je implementována v RTL a je tím pádem dostupná jak pro VCL, tak FMX aplikace a jak pro desktop tak pro mobily. Podpora je ve všech edicích (pro mobilní vývoj je třeba podporu pro mobily).
Co je to tethering? Jedná se o komponenty, které umožňují propojení aplikací i napříč platformami v libovolné kombinaci, tj. VCL x VCL, VCL x FMX, VCL x iOS a Android, iOS x Android, OSX x Windows - prostě všechny kombinace všech platforem.
V této verzi je komunikace přes HTTP a REST, spojení není šifrované, ale např. pokud máte zabezpečené Wifi tak je to jedno, předpokládá se stejný subnet. Lze vytvořit alternativní providery, očekává se podpora Bluetooth.
Přenášet lze data (řetězce, datové typy, JSON), streamy nebo spouštět akce (TAction). Kromě toho je implementována možnost vyhledání komunikačních partnerů.
Použití je všestranné: např. čtení čárových kódu a jejich přenos do hlavní aplikace, ovládání mobilem nějaké služby, komunikace mezi dvěma VCL aplikacemi, případně instancemi mezi různými počítači atd.
Jádrem jsou dvě komponenty TTetheringManager a TTetheringAppProfile.
Jako programátor se můžete připojit programově nebo automaticky s tím, že specifikujete skupinu (v TTetheringAppProfile) a případně heslo což znemožní připojení nežádoucích aplikací. Pokud u instance TTetheringManager nastavíte AutoConnect na True (platí pro každou požadovanou aplikaci) tak se aplikace pokusí spojit. V případě manuálního připojení volejte TTetheringManager.DiscoverManagers a v OnEndManagersDiscovery si můžete přečíst seznam - více ms-help://embarcadero.rs_xe6/rad/Connecting_to_Remote_Applications_Using_App_Tethering.html.
Pokud máte propojen TetheringManager a nějaký TetheringAppProfile a bylo provedeno párování (tj. napsán ten jeden řádek kódu), můžete si začít povídat. Např. můžete sdílet nějaké
Resource
TetheringAppProfile1.Resources.FindByName('Pokus').Value := 'něco';
a na druhé straně
ShowMessage(TetheringAppProfile1.GetRemoteResourceValue
(TetheringManager1.RemoteProfiles[0], 'Pokus').ToJsonString);
Property ToJsonString je jen samozřejmě pro ilustraci.
Nebo spouštět
Akce
ms-help://embarcadero.rs_xe6/rad/Sharing_and_Running_Actions_on_Remote_Applications_Using_App_Tethering.html
Můžete sdílet akce nebo je jen spouštět podle jména. Mně se líbí spíše druhá varianta.
V TetheringAppProfile1 je seznam vašich akcí, které lze vzdáleně spouštět. Vlastní spuštění provede
TetheringAppProfile1.RunRemoteAction(TetheringManager1.RemoteProfiles[0], 'actHello');
Data
Nebo prostě můžete posílat data:
TetheringAppProfile1.SendString(TetheringManager1.RemoteProfiles[0],
'editovaný text', Edit1.Text);
Na druhé straně jsou pak vyvolány události OnAcceptResource a OnResourceReceived.
Tohle je ale jen zlomek z toho co tethering umí.