THRIFT-881. csharp: add csharp to the tutorial

This patch adds a tutorial for CSharp. It also moves the 'test' client and server into the tutorial, because they were not being used by the tests.

Patch: Roger Meier

git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@1000953 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/tutorial/csharp/CsharpServer/CsharpServer.cs b/tutorial/csharp/CsharpServer/CsharpServer.cs
new file mode 100644
index 0000000..0d37c99
--- /dev/null
+++ b/tutorial/csharp/CsharpServer/CsharpServer.cs
@@ -0,0 +1,129 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */

+

+using System;

+using System.Collections.Generic;

+using Thrift.Server;

+using Thrift.Transport;

+

+namespace CSharpTutorial

+{

+    public class CalculatorHandler : Calculator.Iface

+    {

+        Dictionary<int, SharedStruct> log;

+

+        public CalculatorHandler()

+        {

+            log = new Dictionary<int, SharedStruct>();

+        }

+

+        public void ping()

+        {

+            Console.WriteLine("ping()");

+        }

+

+        public int add(int n1, int n2)

+        {

+            Console.WriteLine("add({0},{1})", n1, n2);

+            return n1 + n2;

+        }

+

+        public int calculate(int logid, Work work)

+        {

+            Console.WriteLine("calculate({0}, [{1},{2},{3}])", logid, work.Op, work.Num1, work.Num2);

+            int val = 0;

+            switch (work.Op)

+            {

+                case Operation.ADD:

+                    val = work.Num1 + work.Num2;

+                    break;

+

+                case Operation.SUBTRACT:

+                    val = work.Num1 - work.Num2;

+                    break;

+

+                case Operation.MULTIPLY:

+                    val = work.Num1 * work.Num2;

+                    break;

+

+                case Operation.DIVIDE:

+                    if (work.Num2 == 0)

+                    {

+                        InvalidOperation io = new InvalidOperation();

+                        io.What = (int)work.Op;

+                        io.Why = "Cannot divide by 0";

+                        throw io;

+                    }

+                    val = work.Num1 / work.Num2;

+                    break;

+

+                default:

+                    {

+                        InvalidOperation io = new InvalidOperation();

+                        io.What = (int)work.Op;

+                        io.Why = "Unknown operation";

+                        throw io;

+                    }

+            }

+

+            SharedStruct entry = new SharedStruct();

+            entry.Key = logid;

+            entry.Value = val.ToString();

+            log[logid] = entry;

+

+            return val;

+        }

+

+        public SharedStruct getStruct(int key)

+        {

+            Console.WriteLine("getStruct({0})", key);

+            return log[key];

+        }

+

+        public void zip()

+        {

+            Console.WriteLine("zip()");

+        }

+    }

+

+    public class CSharpServer

+    {

+        public static void Main()

+        {

+            try

+            {

+                CalculatorHandler handler = new CalculatorHandler();

+                Calculator.Processor processor = new Calculator.Processor(handler);

+                TServerTransport serverTransport = new TServerSocket(9090);

+                TServer server = new TSimpleServer(processor, serverTransport);

+

+                // Use this for a multithreaded server

+                // server = new TThreadPoolServer(processor, serverTransport);

+

+                Console.WriteLine("Starting the server...");

+                server.Serve();

+            }

+            catch (Exception x)

+            {

+                Console.WriteLine(x.StackTrace);

+            }

+            Console.WriteLine("done.");

+        }

+    }

+}

diff --git a/tutorial/csharp/CsharpServer/CsharpServer.csproj b/tutorial/csharp/CsharpServer/CsharpServer.csproj
new file mode 100644
index 0000000..aa2ac15
--- /dev/null
+++ b/tutorial/csharp/CsharpServer/CsharpServer.csproj
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="utf-8"?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements. See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership. The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License. You may obtain a copy of the License at

+

+    http://www.apache.org/licenses/LICENSE-2.0

+

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied. See the License for the

+  specific language governing permissions and limitations

+  under the License.

+-->

+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{66707BAE-BBF9-4F03-B53E-BE3AD58322F8}</ProjectGuid>

+    <OutputType>Exe</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>CsharpServer</RootNamespace>

+    <AssemblyName>CsharpServer</AssemblyName>

+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\Debug\</OutputPath>

+    <DefineConstants>DEBUG;TRACE</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\Release\</OutputPath>

+    <DefineConstants>TRACE</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="System" />

+    <Reference Include="System.Core">

+      <RequiredTargetFramework>3.5</RequiredTargetFramework>

+    </Reference>

+    <Reference Include="System.Xml.Linq">

+      <RequiredTargetFramework>3.5</RequiredTargetFramework>

+    </Reference>

+    <Reference Include="System.Data.DataSetExtensions">

+      <RequiredTargetFramework>3.5</RequiredTargetFramework>

+    </Reference>

+    <Reference Include="System.Data" />

+    <Reference Include="System.Xml" />

+    <Reference Include="Thrift, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\..\lib\csharp\src\bin\Release\Thrift.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="CsharpServer.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="..\..\gen-csharp\Calculator.cs" />

+    <Compile Include="..\..\gen-csharp\Constants.cs" />

+    <Compile Include="..\..\gen-csharp\InvalidOperation.cs" />

+    <Compile Include="..\..\gen-csharp\Operation.cs" />

+    <Compile Include="..\..\gen-csharp\SharedService.cs" />

+    <Compile Include="..\..\gen-csharp\SharedStruct.cs" />

+    <Compile Include="..\..\gen-csharp\Work.cs" />

+  </ItemGroup>

+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/tutorial/csharp/CsharpServer/Properties/AssemblyInfo.cs b/tutorial/csharp/CsharpServer/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..9981163
--- /dev/null
+++ b/tutorial/csharp/CsharpServer/Properties/AssemblyInfo.cs
@@ -0,0 +1,55 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements. See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership. The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License"); you may not use this file except in compliance

+ * with the License. You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied. See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+

+using System.Reflection;

+using System.Runtime.CompilerServices;

+using System.Runtime.InteropServices;

+

+// General Information about an assembly is controlled through the following

+// set of attributes. Change these attribute values to modify the information

+// associated with an assembly.

+[assembly: AssemblyTitle("CsharpServer")]

+[assembly: AssemblyDescription("")]

+[assembly: AssemblyConfiguration("")]

+[assembly: AssemblyCompany("")]

+[assembly: AssemblyProduct("CsharpServer")]

+[assembly: AssemblyCopyright("Copyright © 2010 The Apache Software Foundation")]

+[assembly: AssemblyTrademark("")]

+[assembly: AssemblyCulture("")]

+

+// Setting ComVisible to false makes the types in this assembly not visible

+// to COM components.  If you need to access a type in this assembly from

+// COM, set the ComVisible attribute to true on that type.

+[assembly: ComVisible(false)]

+

+// The following GUID is for the ID of the typelib if this project is exposed to COM

+[assembly: Guid("e3b428f4-b2e9-4fc1-8a34-84abc4339860")]

+

+// Version information for an assembly consists of the following four values:

+//

+//      Major Version

+//      Minor Version

+//      Build Number

+//      Revision

+//

+// You can specify all the values or you can default the Build and Revision Numbers

+// by using the '*' as shown below:

+// [assembly: AssemblyVersion("1.0.*")]

+[assembly: AssemblyVersion("1.0.0.0")]

+[assembly: AssemblyFileVersion("1.0.0.0")]