<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:p="urn:schemas-microsoft-com:office:powerpoint" xmlns:a="urn:schemas-microsoft-com:office:access" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema" xmlns:b="urn:schemas-microsoft-com:office:publisher" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:c="urn:schemas-microsoft-com:office:component:spreadsheet" xmlns:oa="urn:schemas-microsoft-com:office:activation" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:q="http://schemas.xmlsoap.org/soap/envelope/" xmlns:D="DAV:" xmlns:x2="http://schemas.microsoft.com/office/excel/2003/xml" xmlns:ois="http://schemas.microsoft.com/sharepoint/soap/ois/" xmlns:dir="http://schemas.microsoft.com/sharepoint/soap/directory/" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:dsp="http://schemas.microsoft.com/sharepoint/dsp" xmlns:udc="http://schemas.microsoft.com/data/udc" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sub="http://schemas.microsoft.com/sharepoint/soap/2002/1/alerts/" xmlns:ec="http://www.w3.org/2001/04/xmlenc#" xmlns:sp="http://schemas.microsoft.com/sharepoint/" xmlns:sps="http://schemas.microsoft.com/sharepoint/soap/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:udcxf="http://schemas.microsoft.com/data/udc/xmlfile" xmlns:wf="http://schemas.microsoft.com/sharepoint/soap/workflow/" xmlns:mver="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns:mrels="http://schemas.openxmlformats.org/package/2006/relationships" xmlns:ex12t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:ex12m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:Z="urn:schemas-microsoft-com:" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=Content-Type content="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<style>
<!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:"Lucida Grande";
        panose-1:0 0 0 0 0 0 0 0 0 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p
        {mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0in;
        margin-bottom:.0001pt;
        background:#F6F6F6;
        border:none;
        padding:0in;
        font-size:12.0pt;
        font-family:"Courier New";}
span.EmailStyle17
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:"Courier New";
        background:#F6F6F6;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page Section1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.Section1
        {page:Section1;}
-->
</style>
<!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang=EN-US link=blue vlink=purple>
<div class=Section1>
<p class=MsoNormal><span style='color:#1F497D'>Hi Patrick,<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal style='text-indent:.5in'><span style='color:#1F497D'>What
kind of .NET application are you developing? In the contrib folder there is the
.NET event socket code (I think that’s where it is). But I don’t
know anything about that.<o:p></o:p></span></p>
<p class=MsoNormal style='text-indent:.5in'><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal style='text-indent:.5in'><span style='color:#1F497D'>I do
know a bit about mod_mono, so I’ll talk about that:<o:p></o:p></span></p>
<p class=MsoNormal style='text-indent:.5in'><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal style='text-indent:.5in'><span style='color:#1F497D'>To get
mod_mono to build, you’ll need Windows and VS 2008 (well, I don’t
have the linux build steps anyways). You’ll have to generate mono.lib for
your compiler. From here:<o:p></o:p></span></p>
<p class=MsoNormal style='text-indent:.5in'><span style='color:#1F497D'><a
href="http://www.mono-project.com/Embedding_Mono">http://www.mono-project.com/Embedding_Mono</a><o:p></o:p></span></p>
<p style='background:white'><span lang=EN style='font-size:11.0pt;font-family:
"Lucida Grande";color:#333333'>“On windows you need to generate an import
library for mono.dll by getting the following file: <o:p></o:p></span></p>
<div style='mso-element:para-border-div;border:solid #DDDDDD 1.0pt;padding:
6.0pt 6.0pt 9.0pt 6.0pt;background:#F6F6F6'><pre style='background:#F6F6F6;
border:none;padding:0in'><span lang=EN style='font-size:11.0pt;color:#333333'> <a
href="http://anonsvn.mono-project.com/viewcvs/*checkout*/trunk/mono/msvc/mono.def">http://anonsvn.mono-project.com/viewcvs/*checkout*/trunk/mono/msvc/mono.def</a><o:p></o:p></span></pre></div>
<p style='background:white'><span lang=EN style='font-size:11.0pt;font-family:
"Lucida Grande";color:#333333'>and creating mono.lib with the command: <o:p></o:p></span></p>
<div style='mso-element:para-border-div;border:solid #DDDDDD 1.0pt;padding:
6.0pt 6.0pt 6.0pt 6.0pt;background:#F6F6F6'><pre style='background:#F6F6F6'><span
lang=EN style='font-size:11.0pt;color:#333333'> lib /nologo /def:mono.def /out:mono.lib /machine:x86<o:p></o:p></span></pre></div>
<p class=MsoNormal style='text-indent:.5in'><span style='color:#1F497D'>“<o:p></o:p></span></p>
<p class=MsoNormal style='text-indent:.5in'><span style='color:#1F497D'>Make
sure your PATH has the Mono bin folder in it (such as “C:\Program
files\Mono-1.9.1\bin”). <o:p></o:p></span></p>
<p class=MsoNormal style='text-indent:.5in'><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal style='text-indent:.5in'><span style='color:#1F497D'>From
there, you can add mod_mono and mod_mono_managed to the build setting in the VS
SLN and compile them. Load mod_mono in the modules.conf.xml, then drop your apps
in <fsdir>\mod\mono\. If you compile debug, a few simple demos will
compile and load (they are in the mod_mono_managed source, Demo.cs). <o:p></o:p></span></p>
<p class=MsoNormal style='text-indent:.5in'><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal style='margin-left:.5in'><span style='color:#1F497D'>It’s
quite easy, as it uses the FS C++ API here’s a simple, pointless app in
Javascript for .NET:<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>import System;<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>import FreeSWITCH;<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>class JExample extends
AppFunction<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>{<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'> protected override
function Run()<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'> {<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
Session.Answer();<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
Session.Hangup("USER_BUSY");<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'> }<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>}<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'> Here
is a 40-line RSS reader (well, printer, since I haven’t gotten Cepstral
building on Windows) in F#:<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>#light<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>namespace rss<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>open System<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>open System.Net<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>open System.IO<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>open System.Xml.Linq<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>open FreeSWITCH<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>module funcs =<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'> let httpGet
(url : string) =<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
let req = WebRequest.Create(url)<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
use resp = req.GetResponse()<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
use stream = resp.GetResponseStream()<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
use reader = new StreamReader(stream)<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
reader.ReadToEnd()<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'> let getXDoc url
= XDocument.Parse(httpGet url)<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'> let xname s =
XName.Get(s)<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'> let
getChannelTitle (doc : XDocument) = Seq.hd(doc.Descendants(xname
"title")).Value<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'> let
getItemData (item : XElement) = (item.Element(xname "title").Value,
item.Element(xname "description").Value)<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>open funcs<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>type reader() =<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'> inherit
AppFunction()<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'> member
app.item : int = 0<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'> member
app.say s =<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
// We need to init the TTS and all that, but for now...<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
Log.WriteLine(LogLevel.Info, "Say: " + s)<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
//app.Session.Speak s |> ignore<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'> override
app.Run() =<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
app.Session.Answer |> ignore<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
// app.Session.SetTtsParameters ("cepstral", "david")<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
app.say ("Reading " + app.Arguments)<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
let doc = getXDoc (app.Arguments)<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
app.say (getChannelTitle doc)<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
doc.Descendants(xname "item")<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
|> Seq.map getItemData<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
|> Seq.iter (fun (title, desc) -><o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
app.say ("Item, " + title)<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
app.say ("Description, " + desc))<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>
app.Session.Hangup("NORMAL_CLEARING")<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>Hope that helps a bit.<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'>-Michael<o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<div>
<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'>
<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span
style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>
freeswitch-dev-bounces@lists.freeswitch.org
[mailto:freeswitch-dev-bounces@lists.freeswitch.org] <b>On Behalf Of </b>Patrick
Tran<br>
<b>Sent:</b> Wednesday, June 25, 2008 6:24 PM<br>
<b>To:</b> freeswitch-dev@lists.freeswitch.org<br>
<b>Subject:</b> [Freeswitch-dev] .NET Development<o:p></o:p></span></p>
</div>
</div>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>I’m new to Freeswitch and trying to develop a .NET
Application. I’m having a lot of trouble getting started though. There
doesn’t seem to be a lot support out there for this. My development has
sort of come to a stand-still and I was wondering if anyone could help me get
pointed in the right direction. Any help would be much appreciated.<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>Thanks<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>-Patrick<o:p></o:p></p>
</div>
</body>
</html>