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

Facebook o nás ví vše. Díky dobře skrytému vyhledávači se to dozví i ostatní

Facebook o nás ví vše. Díky dobře skrytému vyhledávači se to dozví i ostatní

** Facebook o nás ví vše, protože mu to sami řekneme ** V jeho nitru se skrývá mocný vyhledávač ** Mohou jej zneužít stalkeři, sociální inženýři a další nezbedníci

16.  2.  2017 | Jakub Čížek | 76

Vybíráte herní periferii nebo hardware? Pak zapomeňte na nálepku Gaming

Vybíráte herní periferii nebo hardware? Pak zapomeňte na nálepku Gaming

** Herní hardware se od toho běžného často liší jen vzhledem ** Při výběru stále nezapomínejte na základní parametry ** Poradíme jak vybrat herní hardware i periferie

Včera | Stanislav Janů | 28

Pojďme programovat elektroniku: Žádný bastlíř se neobejde bez armády švábů

Pojďme programovat elektroniku: Žádný bastlíř se neobejde bez armády švábů

** Každý bastlíř se po čase neobjede bez armády švábů ** Dnes si některé z nich vyzkoušíme ** Třeba zázračný posuvný registr

19.  2.  2017 | Jakub Čížek | 36


Aktuální číslo časopisu Computer

Stavba 3D tiskárny

Výbava domácí elektrodílničky

Budoucnost 5G sítí

Velké testy microSD karet a vodních chladičů

Přehled mobilních tarifů

reklama
reklama