reklama

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, Billboard, 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...
reklama
Určitě si přečtěte

Microsoft: Zbavte se už konečně zastaralých a děravých Windows 7

Microsoft: Zbavte se už konečně zastaralých a děravých Windows 7

** Microsoft pomalu začíná kritizovat svůj nejpopulárnější OS ** Chce konečně dostat podniky na Desítky ** Bezpečnostní podpora Sedmiček vydrží ještě necelé tři roky

17.  1.  2017 | Jakub Čížek | 406

Český státní blacklist už funguje. Ministerstvo financí se pochlubilo s detaily

Český státní blacklist už funguje. Ministerstvo financí se pochlubilo s detaily

** Dva týdny po Novém roce zajím zeje prázdnotou ** Ministerstvo vydalo metodický pokyn ** Takhle to bude fungovat v praxi

16.  1.  2017 | Jakub Čížek | 49

8 produktů, o kterých byste neřekli, že nesou značku Apple

8 produktů, o kterých byste neřekli, že nesou značku Apple

** Věděli jste, že Apple vyvinul celkem 45 modelů tiskáren? ** ** Monitor na výšku, plotter nebo herní konzole - to vše měl Apple ve své nabídce ** Většinu z těchto produktů pohřbil Steve Jobs

19.  1.  2017 | Stanislav Janů | 42

Umělá inteligence dokáže ze snímků srdce předpovědět, kdy zemřete

Umělá inteligence dokáže ze snímků srdce předpovědět, kdy zemřete

** Strojové učení lze skvěle použít pro vylepšení modelů pro předpověď srdečních komplikací ** Nová technologie umožňuje přesněji určit rizikové pacienty ** Dřívější diagnostika může díky včasně léčbě do budoucna zachránit životy

Včera | Karel Javůrek | 6


Aktuální číslo časopisu Computer

99 nejlepších programů pro váš počítač

Zvykejte si na umělou inteligenci

Velké testy PC zdrojů a gamepadů

Alternativní zdroje energie

reklama
reklama