Files
OurUmbraco/Notification/InstantNotification.cs
T
Sebastiaan Janssen 810cbd267f Initial commit
2012-12-17 09:41:11 +01:00

73 lines
2.3 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Reflection;
namespace NotificationsCore
{
public class InstantNotification
{
private delegate void ExecuteDelegate(string config, string assemblydir, string name, params object[] args);
private ExecuteDelegate ed;
public InstantNotification()
{
ed = new ExecuteDelegate(this.Execute);
}
public void Invoke(string config, string assemblydir, string name, params object[] args)
{
ed.BeginInvoke(config, assemblydir, name, args, null, null);
}
public void Execute(string config,string assemblydir, string name, params object[] args)
{
try
{
XmlDocument notifications = new XmlDocument();
notifications.Load(config);
XmlNode settings = notifications.SelectSingleNode("//global");
XmlNode node = notifications.SelectSingleNode(
string.Format("//instant//notification [@name = '{0}']", name));
XmlDocument details = new XmlDocument();
XmlNode cont = details.CreateElement("details");
cont.AppendChild(details.ImportNode(settings,true));
cont.AppendChild(details.ImportNode(node,true));
details.AppendChild(cont);
if (node != null)
{
string assemblyFile =
String.Format("{0}{1}.dll", assemblydir, node.Attributes["assembly"].Value);
Assembly nAssembly = System.Reflection.Assembly.LoadFrom(assemblyFile);
Notification n =
(Notification)Activator.CreateInstance(
nAssembly.GetType(node.Attributes["type"].Value));
n.SendNotification(details, args);
}
else
{
umbraco.BusinessLogic.Log.Add(umbraco.BusinessLogic.LogTypes.Debug, 666, "not found");
}
}
catch (Exception e)
{
umbraco.BusinessLogic.Log.Add(umbraco.BusinessLogic.LogTypes.Debug, 666, e.Message);
}
}
}
}