CSharp Receiving SMS

From SMS Wiki
Revision as of 02:12, 9 March 2007 by 207.81.129.251 (Talk)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

This example is a .NET Generic Handler. It demonstrates the reception of an inbound (HTTP Forwarded) SMS.

Echo.ashx

<%@ WebHandler Language="C#" Class="Echo" %>

using System;
using System.Web;
using System.Web.Services.Protocols;
using com.upsidewireless.api.sms;

public class IncomingMessage
{
    public string username;
    public string sender;
    public string contents;
    public SmsEncoding encoding;
    public string carrierCode;
    public string recipient;
}

public class OutgoingMessage
{
    public string dedicatedNumber;
    public string recipient;
    public string carrierCode;
    public string contents;
    public SmsEncoding encoding;

    public override string ToString()
    {
        return "[" + recipient + "]";
    }
}

public class Echo : IHttpHandler
{

    System.Diagnostics.EventLog evenLogger = new System.Diagnostics.EventLog("SMS Echo");

    public Echo()
    {
        evenLogger.Source = "SMS Echo Test";
    }

    public void ProcessRequest(HttpContext context)
    {
        // This sample will respond to incoming HTTP POSTs and send back to the sender the same text that was sent
        string requestType = context.Request.RequestType;
        switch (requestType)
        {
            case "POST":

                IncomingMessage incomingMessage = buildIncomingMessage(context);
                OutgoingMessage outgoingMessage = processIncomingMessage(incomingMessage);
                sendMessage(outgoingMessage);

                context.Response.Write("Successfully sent echo back to: " + outgoingMessage);
                break;

            default:
                context.Response.Write("This handler only accepts HTTP operations of type POST");
                break;
        }
    }

    private OutgoingMessage processIncomingMessage(IncomingMessage incomingMessage)
    {
        // TODO Build an OutgoingMessage object based on data contained within the incomingMessage.
        OutgoingMessage result = new OutgoingMessage();

        string message = "Time:" + DateTime.Now + "\n";
        message += "Username:" + incomingMessage.username + "\n";
        message += "From:" + incomingMessage.sender + "\n";
        message += "To:" + incomingMessage.recipient + "\n";
        message += "Encoding:" + incomingMessage.encoding.ToString() + "\n";
        message += "Carrier Code:" + incomingMessage.carrierCode + "\n";
        message += "Message:" + incomingMessage.contents;

        result.recipient = incomingMessage.sender;
        result.contents = message;
        result.encoding = incomingMessage.encoding;
        result.carrierCode = incomingMessage.carrierCode;
        result.dedicatedNumber = incomingMessage.recipient;

        return result;
    }

    private IncomingMessage buildIncomingMessage(HttpContext context)
    {
        IncomingMessage result = new IncomingMessage();

        result.username = context.Request.Form["name"];
        result.sender = context.Request.Form["sender"];
        result.contents = context.Request.Form["data"];
        string encodingString = context.Request.Form["encoding"];
        result.carrierCode = context.Request.Form["carriercode"];
        result.recipient = context.Request.Form["inboundnumber"];

        SmsEncoding smsEncoding = SmsEncoding.Seven;

        // we need to convert the encoding over to a strongly typed variable
        switch (encodingString)
        {
            case "Sixteen":
                smsEncoding = SmsEncoding.Sixteen;
                break;
        }

        result.encoding = smsEncoding;

        evenLogger.WriteEntry("Incoming Message Received", System.Diagnostics.EventLogEntryType.Information, 500, 0);

        return result;
    }


    private void sendMessage(OutgoingMessage outgoingMessage)
    {
        // TODO: be sure to change the data stored within the resource before using this function!

        string token = Resources.UpsideWirelessCredentialsResource.token;
        string signature = Resources.UpsideWirelessCredentialsResource.signature;

        SMS sms = new SMS();

        try
        {
            SMSSendResult result = null;

            if (String.IsNullOrEmpty(outgoingMessage.carrierCode) || String.IsNullOrEmpty(outgoingMessage.dedicatedNumber))
            {
                // standard routing
                result = sms.Send_Plain(token, signature, outgoingMessage.recipient, outgoingMessage.contents, outgoingMessage.encoding);
            }
            else
            {
                // dedicated routing
                result = sms.Send_Plain_Dedicated(token, signature, outgoingMessage.recipient, outgoingMessage.contents, outgoingMessage.encoding, outgoingMessage.carrierCode, outgoingMessage.dedicatedNumber, 0.0);
            }

            if (result.isOk)
            {
                evenLogger.WriteEntry("Sent SMS: " + outgoingMessage, System.Diagnostics.EventLogEntryType.Information, 0, 0);
            }
            else
            {
                evenLogger.WriteEntry("Unable to send SMS: " + outgoingMessage, System.Diagnostics.EventLogEntryType.Error, 1000, 0);
            }
        }
        catch (SoapException e)
        {
            evenLogger.WriteEntry("Fatal: Unable to send SMS: " + outgoingMessage + " Exception: " + e.Detail.InnerText, System.Diagnostics.EventLogEntryType.Error, 5000, 0);
        }
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }

}