<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to server</title><link>https://sourceforge.net/p/epicssharp/wiki/server/</link><description>Recent changes to server</description><atom:link href="https://sourceforge.net/p/epicssharp/wiki/server/feed" rel="self"/><language>en</language><lastBuildDate>Thu, 10 Jul 2014 12:51:13 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/epicssharp/wiki/server/feed" rel="self" type="application/rss+xml"/><item><title>server modified by Daniel J. Lauk</title><link>https://sourceforge.net/p/epicssharp/wiki/server/</link><description>&lt;div class="markdown_content"&gt;&lt;h1 id="server-library"&gt;Server Library&lt;/h1&gt;
&lt;p&gt;NuGet package (binary only):&lt;br /&gt;
&lt;a href="https://www.nuget.org/packages/CaSharpServer" rel="nofollow"&gt;https://www.nuget.org/packages/CaSharpServer/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Download the server library here (server directory):&lt;br /&gt;
&lt;a href="https://sourceforge.net/p/epicssharp/code"&gt;https://sourceforge.net/p/epicssharp/code/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Add the reference of the CaSharpServer assembly to your project.&lt;/p&gt;
&lt;p&gt;To use it:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nb"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;Program&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;static&lt;/span&gt; &lt;span class="nx"&gt;int&lt;/span&gt; &lt;span class="n"&gt;counter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;static&lt;/span&gt; &lt;span class="nx"&gt;CAIntRecord&lt;/span&gt; &lt;span class="nx"&gt;intRecord&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;static&lt;/span&gt; &lt;span class="nx"&gt;CAIntArrayRecord&lt;/span&gt; &lt;span class="nx"&gt;intArray&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;static&lt;/span&gt; &lt;span class="nx"&gt;CAStringRecord&lt;/span&gt; &lt;span class="nx"&gt;strRecord&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="nx"&gt;static&lt;/span&gt; &lt;span class="bp"&gt;void&lt;/span&gt; &lt;span class="nx"&gt;Main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt; args)
    {
        CAServer server = new CAServer(IPAddress.Parse("127.0.0.1"), 5064, 5064);
        intRecord = server.CreateRecord&lt;span class="nt"&gt;&amp;lt;CAIntRecord&amp;gt;&lt;/span&gt;("PCTOTO2:INT");
        intRecord.PrepareRecord += new EventHandler(intRecord_PrepareRecord);
        intRecord.Scan = CaSharpServer.Constants.ScanAlgorithm.HZ10;

        intArray = server.CreateArrayRecord&lt;span class="nt"&gt;&amp;lt;CAIntArrayRecord&amp;gt;&lt;/span&gt;("PCTOTO2:ARR",1000);
        for (int i = 0; i &lt;span class="nt"&gt;&amp;lt; intArray&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Length&lt;/span&gt;&lt;span class="err"&gt;;&lt;/span&gt; &lt;span class="na"&gt;i&lt;/span&gt;&lt;span class="err"&gt;++)&lt;/span&gt;
            &lt;span class="na"&gt;intArray&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Value&lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="na"&gt; =&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="s"&gt;i;&lt;/span&gt;

        &lt;span class="na"&gt;strRecord =&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="s"&gt;server.CreateRecord&amp;lt;CAStringRecord&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;("PCTOTO2:STR");
        strRecord.Value = "Default";

        Console.ReadLine();
    }

    static void intRecord_PrepareRecord(object sender, EventArgs e)
    {
        counter++;
        intRecord.Value = counter;
    }
}
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The constructor defines on which IP and on which ports the CA server must listen. You may run multiple servers on the same machine as long as the TCP port is different each time while sharing the same UDP port. However in this configuration you will reach the servers only while broadcasting the search request.&lt;/p&gt;
&lt;p&gt;After the creation of the server object, simply instantiate any number of epics variables you want through the call of server.CreateRecord&amp;lt;TType&amp;gt;("channel-name") where TType is a CARecord derived type.&lt;/p&gt;
&lt;p&gt;You can either set the values directly to the epics variables or on callback at the refresh rate you define.&lt;/p&gt;
&lt;p&gt;It's possible to define your own objects type and use them in the server library as long as you derive from CARecord.&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Daniel J. Lauk</dc:creator><pubDate>Thu, 10 Jul 2014 12:51:13 -0000</pubDate><guid>https://sourceforge.net9f5b21a9357bf21a419c164cdd663d23af007da8</guid></item></channel></rss>