Staňte se programátorem: Aplikace s podporou doplňků

Dnes si napíšeme jednoduchý poštovní program, na kterém si ukážeme, jak lze program rozšiřovat o libovolné doplňky – pluginy. Zatím jen experimentální, příště ale už zcela funkční.

V dnešním díle si napíšeme velmi jednoduchý klient s podporou doplňků. Program bude umět odesílání e-mailových zpráv, k čemuž nám pomohou třídy uložené ve jmenném prostoru System.Net.Mail. Pro čtení e-mailových zpráv přes protokol POP3 však v .NETu třídy neexistují, a proto si je budeme muset napsat v sami. Funkce čtení zpráv bude přidána k našemu programu jako plugin a vytváření rozšíření bude hlavní náplní dnešního článku.

Nejprve si ukážeme, jak vlastně takový doplněk funguje, funkce pro příjem pošty pomocí POP3 protokolu bude obsahem některého z dalších dílů. Na základě dnešního článku tedy budete moci aplikaci libovolně rozšiřovat o nové funkce pomocí knihoven.

Odesílání e-mailový zpráv

Pro odeslání e-mailové zprávy musíme nejprve vytvořit instanci třídy MailMessage ze jmenného prostoru System.Net.Mail, do jejíhož konstruktoru zadáme adresu odesilatele, příjemce, předmět a obsah zprávy. Pro přidání příloh použijeme metodu Attachments.Add třídy MailMessage. Tato metoda očekává jako argument instanci třídy Attachment představující konkrétní přílohu.

 Klepněte pro větší obrázek
Rozhraní jednoduchého pošťáka a možnost přidání přílohy

Zprávu odešleme pomocí metod Send/SendAsync třídy SmtpClient. Metodu Send použijeme v případě, že chceme, aby program čekal na odeslání e-mailové zprávy. Použijeme-li metodu SendAsync, odeslání zprávy bude zprostředkováno na novém pracovním vlákně, díky čemuž bude možné s aplikací dále volně pracovat.

MailMessage zprava = new MailMessage(“odesilatel@xyz.cz”,
                                     “prijemce@xyz.cz”, 
                                     “Předmět”, 
                                     “obsah”);

if (prilohy != null)
  for (int x = 0; x < prilohy.Length; x++)
    {
      zprava.Attachments.Add(new Attachment(prilohy[x]));
    }

SmtpClient s = new SmtpClient(“smtp server”);
s.SendAsync(zprava, null);

Klient je velmi jednoduchý, můžete jej ale rozšířit třeba o použití autentizovaného a zabezpečeného SMTP serveru a odesílat tak zprávy třebas pomocí Gmailu, Seznamu aj.

Vytváření pluginů

Pluginy (což jsou externí dynamické knihovny) slouží k tomu, aby dodávaly již hotové aplikaci nějakou novou funkcionalitu aniž by bylo potřeba mít přístup ke zdrojovým kódům aplikace a nějak do nich zasahovat. Aplikace, které podporují doplňky, jsou snadno rozšiřitelné, což je velká výhoda, protože tak umožňují ostatním programátorům snadno vylepšovat aplikaci.

Klepněte pro větší obrázek
Pokud se náš experimentální doplněk načte ze složky Plugins,
vytvoří se nová záložka a prozatím jen vypíše krátká zpráva

Pěkným příkladem takto rozšiřitelné aplikace je Microsoft Visual Studio.Net, které samo o sobě neobsahuje prostředí pro žádný programovací jazyk, ale při instalaci si uživatel volí jaké rozšíření (programovací jazyky) chce instalovat. Krom toho je možné do Visual Studia nové vývojové nástroje doinstalovat i později.

Jiným typickým příkladem pluginů jsou obrázkové efekty v grafických editorech. Aby plugin fungoval, musí být jeho třídy, jež mají být v programu použity, odvozeny od rozhraní, které je znají obě strany – jak cílová aplikace, tak samotný plugin. To se řeší další knihovnou, která obsahuje daná rozhraní. V našem projetku se tato knihovna jmenuje Core a obsahuje jedno rozhraní IPlugBase.

public interface IPlugBase
{
  UserControl Ctrl {get;}
  string Title{get;}
}

Třída odvozená od tohoto rozhraní musí mít dvě vlastnosti Ctrl a Title. Vlasnost Ctrl vrací uživatelský prvek, který bude do aplikace přidán z pluginu přidán. V našem případě to jsou komponenty určené k přijímání e-mailových zpráv. Vlastnost Title zase vrací popis toho, co daný uživatelský prvek dělá. V tomto případě to je “Příjem zpráv”.

public class Plugin : IPlugBase
{
  UserControl1 usc;
  public Plugin()
 {
    UserControl1 usc = new UserControl1();
    this.usc = usc;
 }
  public UserControl Ctrl
  {
    get
    {
      return usc;
    }
  }
  public string Title
  {
    get
    {
      return "Příjem zpráv";
    }
  }
}

Pro vytvoření instancí tříd uložených v pluginu slouží metoda CreateInstance třídy System.Reflection.Assembly, která vytvořenou instanci vracízaboxovanou v datovém typu object, a proto je nutné ji přetypovat na rozhraní, ze kterého je odvozena – v našem případě to je rozhraní IPlugBase uložené v knihovně Core. Více napoví následující kód:

private void Form1_Load(object sender, EventArgs e)
{
  int i = 1; 
  // Jednotlivě prochází všechny dinamické knihovny ve složce Plugins
  foreach (string s in Directory.GetFiles(Application.StartupPath + @"\Plugins"))
  {
    // Načte DLL
    Assembly ass = Assembly.LoadFrom(s);
    Core.IPlugBase b = null;
    // Projde jednotlivé datové typy v Dll
    foreach (Type t in ass.GetTypes())
    {
      // Pokud se datový typ nazývá Plugin...
      if (t.Name == "Plugin")
      {
        // … je to ten, který je odvozen od rozhraní IPlugBase, a proto
        // lze z něho vytvořit instanci.
        b = (Core.IPlugBase)ass.CreateInstance(t.FullName);'
      }
    }
    // Použití instance
    this.tabControl1.TabPages.Add(b.Title);
    tabControl1.TabPages[i].Controls.Add(b.Ctrl);
    i++;
  }
}

Dnešní projekt se tedy skládá ze třech programů. Prvním je samotné rozhraní elektronického pošťáka, druhým je propojovací knihovna Core a třetím už samotný pagin pro příjem pošty POP3. Ten zatím nic neumí, pouze v aplikaci vytvoří novou záložku a vypíše do jejího panelu krátký text. To vše již řeší samotný doplněk, nikoliv pošťák. Obsahem POP3 knihovny tedy může být jakýkoliv kód, který pozmění funkce pošťáka podle toho, co mu dovolí propojovací knihovna Core.

Vzhledem ke specifičnosti dnešního projektu vám nabídneme pouze zdrojový kód pro Microsoft Visual C# 2008 Express Edition a vyšší.


Mareš, Amadeo: 1001 tipů a triků pro C#

Klepněte pro větší obrázekNestačí vám náš seriál? Pořiďte si knihu jeho autora, ve které vás seznámí s tisícovkou programovacích tipů a technik. Díky velkému počtu tipů, návodů, triků a rad kniha poslouží při každé příležitosti. Kdykoli si nevíte rady, stačí nalistovat příslušnou stranu a problém okamžitě vyřešit. Tipy a triky míří především na začínající programátory; užitečné rady tu ovšem najdou i pokročilejší vývojáři a ostřílení znalci. SOučástí publikace je i přiložené DVD, na kterém najdete bezplatné vývojové prostředí Visual C#, databázový server a především všechny zdrojové kódy z knihy, takže je budete moci okamžitě použít. Webové stránky knihy.

Témata článku: Programování, Doplňky do prohlížeče, Public, Attachment, Send, Kody, 1001

18 komentářů

Nejnovější komentáře

  • ricmat 9. 6. 2009 16:24:03
    no rozhodne lip nez tenhle clanek :-) prave protoze si styl s logikou...
  • a.malotka 9. 6. 2009 10:39:13
    nic ve zlym, ale jestli si pletes styl psani kodu s logikou kodu, nevis k...
  • ricmat 9. 6. 2009 10:29:46
    ale jinak ti budu, az budou stranky hotove, vdecny, kdyz budes obsahy mych...
Určitě si přečtěte

Operační systém běžným počítačům nedal Bill Gates, ale Gary Kildall

Operační systém běžným počítačům nedal Bill Gates, ale Gary Kildall

** Gary Kildall pochopil, že levné výpočetní čipy mohou posloužit jako univerzální počítače pro všechny ** Připravil pro ně proto první operační systém ** Později mu systém vyfoukl Microsoft a nazval ho MS DOS

23.  4.  2017 | Pavel Tronner | 56

Umělá inteligence je sice v plenkách, už teď ale přestáváme rozumět, jak vlastně funguje. To je problém

Umělá inteligence je sice v plenkách, už teď ale přestáváme rozumět, jak vlastně funguje. To je problém

** Už je to tady, lidé přestávají chápat počítače ** Systémy neuronových sítí začínají pracovat tak, že ani jejich tvůrci přesně neví, co se uvnitř děje ** Do budoucna to může být závažný problém

24.  4.  2017 | Jakub Čížek | 112

Před 35 lety měl premiéru legendární počítač ZX Spectrum. Připomeňte si „Gumáka“

Před 35 lety měl premiéru legendární počítač ZX Spectrum. Připomeňte si „Gumáka“

** Slavný osmibitový počítač Sinclair ZX Spectrum byl uveden právě před 35 lety ** Připomeňte si tento průkopnický počítač v tematických článcích ** Podívejte se, jak funguje dnes

23.  4.  2017 | Pavel Tronner | 13

Správný počítač má alespoň dva monitory. Anebo je to jinak?

Správný počítač má alespoň dva monitory. Anebo je to jinak?

** David si nedokáže představit práci bez dvou a více monitorů ** Kubovi naopak stačí jeden a ve více displejích se ztrácí ** Jaký přístup je lepší?

23.  4.  2017 | Jakub Čížek | 59

Brněnské soudy daly stop Uberu. Je to dobře, nebo krok zpět?

Brněnské soudy daly stop Uberu. Je to dobře, nebo krok zpět?

** Před několika měsíci začal Uber nabízet své služby i v Brně ** Nyní ale narazil, soudům se to totiž nelíbí ** Má sdílená ekonomika dostat zelenou?

22.  4.  2017 | Jakub Čížek | 28


Aktuální číslo časopisu Computer

Supertéma: moderní cestování

Kdy opravdu přijdou nové baterie?

Velké testy: 6 herních notebooků a 8 volantů

Recenze: AMD Ryzen řady 5