Passer au contenu principal

dnt91's Blog [MVP SharePoint]

Lancer la recherche
dnt91's Blog [MVP SharePoint]
  

dnt91's Blog [MVP SharePoint] > Catégories
Un peu de SMS…

Pour l'un de mes clients, j'ai du développer une petite application lui permettant d'envoyer un sms afin de récupérer des informations provenant de l'annuaire de l'entreprise.

L'idée de ce sms était de pouvoir recevoir ce type d'information depuis n'importe ou (ou presque) sans être contraint d'être présent en intranet.

Vous me direz pour cela, il existe beaucoup de société sur le net qui fournissent ce genre de services via des serveurs de sms + des web services, oui mais voila, il s'agit ici de faire un démonstrateur afin de « vendre » l'idée, et puis comme d'habitude, le projet a été monté aujourd'hui et est à livrer pour hier…

Bref, ce petit scénario me permet de vous montrer une des fonctionnalités de windows mobile, les MessageInterceptors.

Un MessageInterceptor est un « Message (SMS, mail, etc…) Listener » qui va doit être à l'écoute de tous les messages que vous allez recevoir et va intercepter ceux qui correspondent à la condition définie

Voici le code de notre SMSInterceptor

using System;

using System.Linq;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using Microsoft.WindowsMobile.PocketOutlook;

using MI = Microsoft.WindowsMobile.PocketOutlook.MessageInterception;

using MessageInterceptor.localhost;

 

namespace MessageInterceptor {

public partial class Form1 : Form {

public Form1() {

InitializeComponent();

this.CreateInterceptor();

}

private void button2_Click(object sender, EventArgs e) {

this.CloseInterceptor();

this.Close();

Application.Exit();

}

public StringBuilder Debug;

MI.MessageInterceptor intercept;

public void CreateInterceptor(){

Debug = new StringBuilder();

intercept = new MI.MessageInterceptor(MI.InterceptionAction.NotifyAndDelete);

intercept.MessageCondition = new MI.MessageCondition(MI.MessageProperty.Body, MI.MessagePropertyComparisonType.Contains, "#inf#");

intercept.MessageReceived += new MI.MessageInterceptorEventHandler(MessageReceived);

}

void MessageReceived(object sender, MI.MessageInterceptorEventArgs args) {

//Format du message recu : #inf#nom#prenom

SmsMessage receiveMsg = (SmsMessage)args.Message;

string data = receiveMsg.Body;

Debug.AppendLine(data);

string[] names = data.Split('#');

string firstname, lastname = "";

List<string> nameList = new List<string>();

if (names.Length > 2) {

lastname = names[2];

nameList.Add(lastname);

Debug.AppendLine("LastName : " + lastname);

}

if (names.Length > 3) {

firstname = names[3];

nameList.Add(firstname);

Debug.AppendLine("FirstName : " + firstname);

}

WebService ws = new WebService();

Employee[] employees = ws.ProcessEmployees(nameList.ToArray());

StringBuilder sb = new StringBuilder();

for (int i = 0; i < employees.Length; i++) {

Employee e = employees[i];

sb.AppendLine(e.Nom + " " + e.Prenom + " - " + e.TelBureau + " - " + e.TelMobile + " - " + e.Mail);

}

Debug.AppendLine(sb.ToString());

SmsMessage msgToSend = new SmsMessage();

msgToSend.To.Add(receiveMsg.From);

msgToSend.Body = sb.ToString();

msgToSend.Send();

this.label1.Text += this.Debug.ToString();

}

public void CloseInterceptor() {

intercept.MessageReceived -= MessageReceived;

intercept.Dispose();

}

}

}

 

La méthode CreateInterceptor() va donc mettre en œuvre notre interceptor ; à notre interceptor, nous lui précisons que tous les messages qu'il intercepte devront être supprimés une fois qu'il les aura traité via la InterceptorAction.NotifyAndDelete, et pour terminer, nous definissons une condition qui est la suivante : le message doit contenir la chaine #inf# dans son body.

Lorsque nous quittons l'application, ne pas oublier de faire appel à intercept.MessageReceived -= MessageReceived, pour supprimer proprement notre handler.

Voila. 10 minutes plus tard, mon démonstrateur était prêt !

Dommage que l'on ne puisse pas remonter le temps…