• No results found

Vytvoření jednoduché komponenty

In document POUŽÍVANÝCH VE SPORTU (Page 59-66)

private void OnDataReceive(byte[] data) {

if(Active)

Outputs[0].Input.Receive(data);

}

private class Input : ByteInputBase {

private readonly Component _component;

public Input(Component component)

Guid = new Guid("15BD1307-21AA-4e0b-863C-B28EAE04337E");

LoadMetadaFromXml("Metadata.xml");

Inputs = new ObservableCollection<IInput> { new Input(this) };

Outputs = new ObservableCollection<IOutput> { new ByteOutputBase() };

} }

Výpis 7: Vytvoření jednoduché komponenty

Závěr

Výsledkem této diplomové práce je univerzální aplikace, která byla navržena a implementována pomocí moderních technologií na platformě .NET. Aplikace se v konečné podobě skládá z více než 150 rozhraní a tříd. Jejími primárními cíli jsou přeposílání dat mezi různými rozhraními, transformace datového provozu a jeho analýza. Aplikace slouží jako vývojový prostředek pro tvorbu aplikací ve sportovním prostředí, případně i jinde, kde se pracuje s datovým provozem. Uživatel může pracovat s komponentami, které je možné umístit na pracovní plochu aplikace a dle cílových požadavků je spojit. Po aktivaci požadovaných komponent jsou na daných rozhraních inicializována spojení a propojené komponenty si mezi sebou vzájemně vyměňují data. Komponenty se dělí na tři typy – vstupní, výstupní a transformační.

Vstupní a výstupní komponenty reprezentují jednotlivé vstupy či výstupy různých komunikačních rozhraní, případně alternativních vstupů/výstupů. Transformační komponenty uživateli umožňují provádět různé datové transformace, například transformace protokolů. Další možností transformačních komponent je možnost datové analýzy, kupříkladu formou grafů či tabulek. Aplikace byla implementována v prostředí .NET verze 4 a její grafická podoba je vytvořena pomocí WPF. Při vývoji bylo dále využito efektivních návrhových vzorů, jako jsou Inversion Of Control, MVVM a dalších.

Aplikace obsahuje mechanismus pro snadnou implementaci nových komponent. Toho lze docílit pomocí implementace rozhraní IDataComponent, nebo pomocí bázových tříd DataComponentBase, popřípadě AsyncDataComponentBase pro asynchronní komponenty. Se základní verzí aplikace je distribuován balík základních komponent. Tento balík obsahuje přibližně patnáct komponent. Jedná se především o komponenty pokrývající obecná rozhraní, jako sériovou linku, TCP/IP, UDP a další. Dále obsahuje komponenty pracující s daty, jako rozdělovač či slučovač, komponenty umožňující záznam datové komunikace a její simulaci s přesnými časovými rozestupy mezi jednotlivými bloky dat.

Rozšiřitelnost aplikace o novou funkcionalitu je zaručena především pomocí modulárního mechanismu, který umožňuje automatizované načítání komponent z předem definovaného umístění. Aplikace je kompletně programována proti

rozhraní, takže jakákoliv její část může být snadno nahrazena jinou konkrétní implementací. Pokud by se jednalo o implementaci klíčového rozhraní aplikace, postačila by změna pouze na jednom místě v aplikaci, v tzv. Composition Root. Do budoucna by bylo možné přidat možnost načtení jednotlivých základních implementací pomocí vnější konfigurace aplikace. Toho by bylo možné realizovat například pomocí nástroje Spring.NET. Při vývoji aplikace bylo dbáno na její maximální univerzálnost a následnou rozšiřitelnost. Do budoucna je plně otevřena vůči změnám a nové funkcionalitě. Za nevýhodu lze považovat omezenost běhu aplikace pouze na platformě .NET, takže ji není možné typicky spouštět na jiných platformách jako Linux, Android a další.

Seznam použité literatury

Apache log4net. APACHE SOFTWARE FOUNDATION. Apache logging services [online].

© 2004-2013 [cit. 2014-05-03]. Dostupné z: http://logging.apache.org/log4net AutoResetEvent. MICROSOFT. MSDN-the microsoft developer network [online]. © 2014 [cit. 2014-05-03]. Dostupné z:

http://msdn.microsoft.com/cs-cz/library/zd6a283y(v=vs.110).aspx

BURNS, Kyle. Inversion of Control. Beginning Windows 8 Application Development:

XAML Edition. Apress, 2012. s. 165-174. ISBN 978-1430245667.

Comm Tunnel Pro. Serial Port Tool [online]. © 2014 [cit. 2014-05-10]. Dostupné z:

http://www.serialporttool.com/CommTunnelPro.htm

Composition Root. SEEMANN, Mark. Mark Seemann's blog [online]. © 2014 [cit. 201405-03]. Dostupné z:http://blog.ploeh.dk/2011/07/28/CompositionRoot Dependency Properties Overview. MICROSOFT. MSDN-the microsoft developer network [online]. © 2014 [cit. 2014-05-03]. Dostupné z:

http://msdn.microsoft.com/en-us/library/ms752914(v=vs.110).aspx

Design Patterns: Dependency Injection. MSDN-the microsoft developer network [online].

© 2014 [cit. 2014-05-03]. Dostupné z:

http://msdn.microsoft.com/en-us/magazine/cc163739.aspx

Dispatcher Class. MICROSOFT. MSDN-the microsoft developer network [online]. © 2014 [cit. 2014-05-03]. Dostupné z: http://msdn.microsoft.com/en-us/library/

system.windows.threading.dispatcher(v=vs.110).aspx

Dispose Pattern. MICROSOFT. MSDN-the microsoft developer network [online]. © 2014 [cit. 2014-05-03]. Dostupné z:

http://msdn.microsoft.com/en-us/library/b1yfkh5e(v=vs.110).aspx

EVS BROADCAST EQUIPMENT. EVS | Enriched. Live [online]. © 2014 [cit. 2014-03-21].

Dostupné z: http://www.evs.com

Extended WPF Toolkit [online]. © 2014 [cit. 2014-05-03]. Dostupné z:

http://wpftoolkit.codeplex.com

Extension Methods (C# Programming Guide). MICROSOFT. MSDN-the microsoft developer network [online]. © 2014 [cit.2014-05-03]. Dostupné z:

http://msdn.microsoft.com/cs-cz/library/bb383977.aspx

GOOK, Michael. Hardwarová rozhraní: průvodce programátora. Vyd. 1. Brno: Computer Press, 2006, 463 s. ISBN 80-251-1019-2.

ICommand Interface. MICROSOFT. MSDN-the microsoft developer network [online].

© 2014 [cit. 2014-05-03]. Dostupné z:

http://msdn.microsoft.com/en-us/library/vstudio/system.windows.input.icommand

IServiceProvider Interface. MSDN-the microsoft developer network [online]. © 2014 [cit. 2014-05-03]. Dostupné z:

http://msdn.microsoft.com/en-us/library/cc678965(v=vs.85).aspx

KABELOVÁ, Alena a Libor DOSTÁLEK. Velký průvodce protokoly TCP/IP a systémem DNS. 5., aktualiz. vyd. Brno: Computer Press, 2008, 488 s. ISBN 978-80-251-2236-5.

MACDONALD, Matthew. Pro WPF in C♯ 2008: Windows presentation foundation with .NET 3.5. 2nd ed. Apress, 2008. ISBN 978-159-0599-556.

Managed Extensibility Framework [online]. © 2014 [cit. 2014-05-08]. Dostupné z:

http://mef.codeplex.com

Microsoft Public License (MS-PL). The Open Source Initiative [online]. © 2013 [cit. 2014-05-03]. Dostupné z: http://opensource.org/licenses/MS-PL

PATHAK, Nishith. Pro WCF 4: practical Microsoft SOA implementation. 2nd ed. New York, NY: Distributed to the book trade worldwide by Springer Science Business Media, 446 s. ISBN 978-143-0233-688.

PETZOLD, Charles. Mistrovství ve Windows Presentation Foundation. Vyd. 1. Brno:

Computer Press, 2008, 928 s. ISBN 978-80-251-2141-2.

ScaleTransform Class. MICROSOFT. MSDN-the microsoft developer network [online].

© 2014 [cit. 2014-05-03]. Dostupné z: http://msdn.microsoft.com/en-us/library system.windows.media.scaletransform(v=vs.110).aspx

Serial to Ethernet Converter Software TCP/Com. TAL Technologies, Inc. [online].

© 2014 [cit. 2014-05-10]. Dostupné z: http://www.taltech.com/tcpcom Simple Injector [online]. © 2006-2014 [cit. 2014-05-03]. Dostupné z:

http://simpleinjector.codeplex.com

Spring.NET - Application Framework [online]. © 2004-2014 [cit. 2014-03-21].

Dostupné z: http://springframework.net

TCP2COM [online]. © 2004 [cit. 2014-05-10]. Dostupné z:

http://tcp2com.sourceforge.net

The MIT License (MIT). The Open Source Initiative [online]. © 2013 [cit. 2014-05-03].

Dostupné z: http://opensource.org/licenses/MIT

Thumb Class. MICROSOFT. MSDN-the microsoft developer network [online]. © 2014 [cit. 2014-05-03]. Dostupné z: http://msdn.microsoft.com/en-us/library/

system.windows.controls.primitives.thumb(v=vs.110).aspx

TKD SCORE. Daedo TrueScore E-Foot Gear Sparring [online]. © 1999-2013 [cit. 2014-03-21]. Dostupné z: http://www.tkdscore.com

Unity [online]. © 2006-2014 [cit. 2014-05-03]. Dostupné z: http://unity.codeplex.com Windows Forms. MICROSOFT. MSDN-the microsoft developer network [online]. © 2014 [cit. 2014-05-03]. Dostupné z:

http://msdn.microsoft.com/en-us/library/dd30h2yb(v=vs.110).aspx

WPF Apps With The Model-View-ViewModel Design Pattern. MICROSOFT. MSDN-the microsoft developer network [online]. © 2014 [cit. 2014-05-03]. Dostupné z:

http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

XAML Overview (WPF). MICROSOFT. MSDN-the microsoft developer network [online].

© 2014 [cit. 2014-05-03]. Dostupné z: http://msdn.microsoft.com/en-us/library/

ms752059(v=vs.110).aspx

A Tvorba komponent

Tato příloha rozebírá možnosti vývoje jednotlivých komponent. Základní popis tvorby komponenty byl popsán v kapitole 3.8. Oproti kapitole 3.8 tento text vytváří větší přehled ohledně servisních objektů a demonstruje zdrojový kód složitější komponenty.

Předci komponent

Každá komponenta musí být předkem rozhraní IDataComponent. Toho je možné docílit přímou implementací tohoto rozhraní, popřípadě odvozením bázové třídy DataComponentBase nebo AsyncDataComponentBase. Další možností je vytvoření dalších bázových tříd, které budou vhodné pro použití v určité množině komponent.

Obrázek 17: Hierarchie bázových tříd komponent

Servisní objekty

Servisní objekty komponent mohou být v aktuální verzi aplikace rozděleny do tří pomyslných skupin. První skupinou je konfigurace, která v sobě nese rozhraní IConfigurable. Toto rozhraní poskytuje mechanismus, díky kterému mohou mít jednotlivé komponenty různé možnosti nastavení/konfigurace. Více o tomto rozhraní se nachází v kapitole 2.1.1. Za druhou skupinu lze považovat logování dat.

Tato skupina disponuje rozhraním ILoggerAware. To obaluje implementaci rozhraní ILogger, takže je z aplikace možné komponentně implementaci ILogger podstrčit.

Poslední skupina zaobaluje alternativní výstupy dat. Do nich lze zařadit univerzální textový výstup a vlastní textový výstup. Rozhraní ITextOutputAware poskytuje komponentě možnost posílat textová data na konkrétní implementaci ITextOutput.

Rozhraní ICustomOutput umožňuje komponentě poskytovat vlastní okno, které může obsahovat například ovládací prvky, nebo grafy znázorňující nějakou datovou

IDataComponent

DataComponentBase AsyncDataComponentBase

analýzu. Vývojář musí při použití ICustomOutput vytvořit vizuální ovládací prvek typu Control a ten vracet v implementaci metody GetComponentControl.

Obrázek 18: Skupiny servisních objektů komponent

Ukázka komponenty

Tato ukázka demonstruje zdrojové kódy komponenty obstarávající UDP vstup. Komponenta využívá rozšíření bázové třídy DataComponentBase, takže se není ve vývoji komponenty třeba věnovat obecným implementačním záležitostem.

Tato komponenta využívá vlastní konfiguraci a textový výstup, tudíž implementuje rozhraní ITextOutputAware. Nejprve bude uveden kód s třídou definující konfiguraci komponenty:

Při tvorbě definice konfigurace pro komponentu je nutné, aby vytvářená třída implementovala rozhraní IConfig. Toto rozhraní je rozšířeno také rozhraním ICloneable. Název, popis a kategorie komponenty jsou pro přehlednost definovány v XML souboru (v tomto případě InputMetadaData.xml). Toho je docíleno pomocí mechanismu zahrnutém v DataComponentBase. Výpis 9 znázorňuje použití pro komponentu UDP.

In document POUŽÍVANÝCH VE SPORTU (Page 59-66)