SimPlayer

SimPlayer je jednoduchá aplikace sloužící ke spouštění online fyziologických simulátorů. SimPlayer je spouštěn se souborem .sim jako argumentem. V tomto souboru jsou informace o simulátoru, jeho umístění na internetu a způsobu jeho spouštění. V současné době podporuje SimPlayer stahování a spouštění simulátorů na platformách Microsoft .NET, ControlWeb a nativní Windows aplikace.

Přípona .sim je v systému zaregistrována při instalaci SimPlayeru. Navíc je v registrech nastaveno, že se při otevírání souborů s příponou .sim nemá Internet Explorer ptát uživatele, jestli jej uložit na disk, nebo otevřít.

Registrace přípony

Registrace přípony .sim probíhá automaticky při instalaci SimPlayeru. Instalátor vytvoří v registrech tyto klíče:

HKEY_CLASSES_ROOT\.sim\
  (default) = SimPlayer
  Content Type = application/x-simulator
HKEY_CLASSES_ROOT\.sim\SimPlayer\
HKEY_CLASSES_ROOT\.sim\SimPlayer\ShellNew\

HKEY_CLASSES_ROOT\SimPlayer
  BrowserFlags = 8
  EditFlags = 10000 (hexa)
...

Formát souborů .sim

<simulationinfo version= "0.3"> <name>jméno simulátoru</name> 
   <version> číslo verze </version>
   <facetype> Form, ktery je hlavním oknem simulátoru </facetype> (pouze .NET)
   <facemethod> jméno bezparam. metody, která se ma zavolat po konstruktoru (např. Show) </facemethod> (pouze .NET, může chybět)
   <baseurl> základ url, ze ktereho se   stahují jednotlivé soubory</baseurl> (může chybět) 

   <face platform=".net | controlweb | native" download= "no">
   		   hlavní soubor aplikace, platform určuje způsob zpracování (.net je implicitní)) 
		   (download="no" znamená, že tento soubor se nemá zvlášť stahovat (např. je už obsažen v archívu))
		   (native=exe aplikace)
           <url>absolutní url</url>
	   <relativeurl> relativní url k baseurl</relativeurl>
	   <destination> relativní umisteni staženého souboru </destination> 
	Kterýkoliv z těchto elementů může chybět, absolutní url má přednost před relativním, jestliže není uvedena destination,	
	použije se relativeurl,	nebo jméno souboru z absolutní url.
	Soubory se ukládají do instalačního adresáře aplikace SimPlayer, do podadresáře name/version/.
   </face>

   <supportfile type="unknown|zip|exe">
    	Libovolné množství, type  udává typ, hned se rozbalí/spustí po stažení (url, relativeurl a destination stejne jako face).
   </supportfile>
    
    <forcedownload/> (v případě přítomnosti tohoto elementu jsou soubory z internetu staženy i přestože už jsou na disku)
</simulationinfo>
        

Stahování souborů z internetu

Stahování jednotlivých souborů simulátoru se děje přes http spojení. Soubory se ukládají na disk do adresáře [SimPlayer]\[jméno simulátoru]\[číslo verze].
Soubory označené v konfiguračním (.sim) souboru jako typ zip nebo exe jsou okamžitě po stáhnutí spuštěny nebo rozbaleny. Toto je vhodné pro simulátory, které obsahují více souborů, a zazipováním, příp. vytvořením samorozbalujícího archívu, se ušetří objem stahovaných dat.
Uvedením elementu <forcedownload/> v konfiguračním souboru simulátoru je možné vynutit stahování souborů simulátoru i přesto, že jsou nalezeny na disku. Toto je vhodné při vývoji simulátoru. Pro jeho distribuci je lepší tento element vymazat.

.NET simulátory

Při tvorbě simulátoru na platformě .NET lze postupovat stejně jako při psaní libovolné Windows Forms aplikace. Pro vytvoření knihovny, která může být použita se SimPlayerem je projektu nutné nastavit v jeho Preferences Output type na Class library. Toto nevyžaduje žádnou zvláštní úpravu kódu simulátoru, pouze bude ignorována metoda Main().
V konfiguračním souboru simulátoru je potřeba uvést jméno třídy hlavního okna simulátoru (plně kvalifikované, tzn. i s názvem jmenného prostoru) a jméno bezparametrické metody, která bude po vytvoření tohoto okna volána (typicky metoda Show()). Jestliže jméno metody chybí, předpokládá se, že se o vše postará konstruktor okna. Třída hlavního okna simulátoru je pomocí mechanismu reflexe získána z knihovny uvedené v elementu <face> a bezparametrickým konstruktorem instanciována.

Po vytvoření objektu okna simulátoru je mu přidán speciální handler události Closing, který při ukončení simulátoru ukončí celou aplikaci SimPlayer.

Pozor, v kódu simulátoru nelze používat obrat Application.StartupPath (např. pro dodatečné nahrání Flashových klipů umístěných v adresáři simulátoru), protože po zkompilování simulátoru do knihovny bude vrácena cesta aplikace, která tuto knihovnu používá, tedy cesta k SimPlayer.exe. Všechny výskyty tohoto kódu je potřeba nahradit ekvivalentem new FileInfo(Assembly.GetExecutingAssembly().Location).DirectoryName, který vždy vrací cestu assembly, ve které je tento kód uložen. Funguje tedy správně jak pro spustitelné aplikace tak pro knihovny.

ControlWeb simulátory

Simulátory na platformě ControlWeb jsou spouštěny pomocí ControlWeb runtime, který musí být v systému nainstalován. CW runtime není obecně volně dostupný, nicméně naše pracoviště má k dispozici jeho proprietární volně šiřitelnou verzi. Tento runtime přehrává pouze simulátory vyrobené na našem pracovišti, proto si můžeme dovolit jistou neobecnost při práci s ním.

Při spouštění CW simulátoru se nejprve zjišťuje, jestli a kde je CW runtime nainstalován. Cesta k souboru CW5Run.exe se hledá v registech v klíči HKEY_LOCAL_MACHINE\SOFTWARE\Kofrlab\cw5runtime\path. Jestliže tento klíč neexistuje, runtime se automaticky stáhne a nainstaluje. Webová adresa, na které se CW runtime nachází, a jméno klíče v registru jsou uloženy v konfiguračním souboru aplikace SimPlayer.

Výsledkem je spuštění CW5Runtime.exe s argumentem, kterým je jméno souboru z elementu <face>.

Simulátory jako aplikace

Uvedením platformy native v elementu <face> konfiguračního souboru je možné stáhnout a spustit libovolnou Windows aplikaci. Tento přístup však v sobě nese značné bezpečnostní riziko a měl by být používán jen v případě, kdy je jistota, že nemůže být zneužit. Některé firewally navíc znemožňují přenos souborů s příponou exe.


Petr Stodulka (stod at matfyz.cz)
Kabinet biokybernetiky, 1. lékařská fakulta, Univerzita Karlova, Praha
patf-biokyb.lf1.cuni.cz