From 96b2ccc0d4c9b19530d5dbd81643cff1ad6fb6c0 Mon Sep 17 00:00:00 2001 From: Bryan Duxbury Date: Fri, 24 Sep 2010 16:47:59 +0000 Subject: [PATCH] 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 --- .../csharp/CsharpClient/CsharpClient.cs | 18 +- .../csharp/CsharpClient/CsharpClient.csproj | 88 +++++++ .../CsharpClient/Properties/AssemblyInfo.cs | 55 +++++ .../csharp/CsharpServer/CsharpServer.cs | 226 +++++++++--------- .../csharp/CsharpServer/CsharpServer.csproj | 88 +++++++ .../CsharpServer/Properties/AssemblyInfo.cs | 55 +++++ tutorial/csharp/tutorial.sln | 39 +++ 7 files changed, 447 insertions(+), 122 deletions(-) rename test/csharp/CSharpClient.cs => tutorial/csharp/CsharpClient/CsharpClient.cs (89%) create mode 100644 tutorial/csharp/CsharpClient/CsharpClient.csproj create mode 100644 tutorial/csharp/CsharpClient/Properties/AssemblyInfo.cs rename test/csharp/CSharpServer.cs => tutorial/csharp/CsharpServer/CsharpServer.cs (82%) create mode 100644 tutorial/csharp/CsharpServer/CsharpServer.csproj create mode 100644 tutorial/csharp/CsharpServer/Properties/AssemblyInfo.cs create mode 100644 tutorial/csharp/tutorial.sln diff --git a/test/csharp/CSharpClient.cs b/tutorial/csharp/CsharpClient/CsharpClient.cs similarity index 89% rename from test/csharp/CSharpClient.cs rename to tutorial/csharp/CsharpClient/CsharpClient.cs index 641d5c9bb..8ce10852e 100644 --- a/test/csharp/CSharpClient.cs +++ b/tutorial/csharp/CsharpClient/CsharpClient.cs @@ -46,9 +46,9 @@ namespace CSharpTutorial Work work = new Work(); - work.op = Operation.DIVIDE; - work.num1 = 1; - work.num2 = 0; + work.Op = Operation.DIVIDE; + work.Num1 = 1; + work.Num2 = 0; try { int quotient = client.calculate(1, work); @@ -56,12 +56,12 @@ namespace CSharpTutorial } catch (InvalidOperation io) { - Console.WriteLine("Invalid operation: " + io.why); + Console.WriteLine("Invalid operation: " + io.Why); } - work.op = Operation.SUBTRACT; - work.num1 = 15; - work.num2 = 10; + work.Op = Operation.SUBTRACT; + work.Num1 = 15; + work.Num2 = 10; try { int diff = client.calculate(1, work); @@ -69,11 +69,11 @@ namespace CSharpTutorial } catch (InvalidOperation io) { - Console.WriteLine("Invalid operation: " + io.why); + Console.WriteLine("Invalid operation: " + io.Why); } SharedStruct log = client.getStruct(1); - Console.WriteLine("Check log: {0}", log.value); + Console.WriteLine("Check log: {0}", log.Value); transport.Close(); } diff --git a/tutorial/csharp/CsharpClient/CsharpClient.csproj b/tutorial/csharp/CsharpClient/CsharpClient.csproj new file mode 100644 index 000000000..517ad83c8 --- /dev/null +++ b/tutorial/csharp/CsharpClient/CsharpClient.csproj @@ -0,0 +1,88 @@ + + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {18F24087-4760-43DA-ACAB-7B9F0E096B11} + Exe + Properties + CsharpClient + CsharpClient + v3.5 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + False + ..\..\..\lib\csharp\src\bin\Release\Thrift.dll + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorial/csharp/CsharpClient/Properties/AssemblyInfo.cs b/tutorial/csharp/CsharpClient/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..ffbc40d73 --- /dev/null +++ b/tutorial/csharp/CsharpClient/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("CsharpClient")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("CsharpClient")] +[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("1a461214-fa28-452a-bd1d-d23ca8e947e3")] + +// 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")] diff --git a/test/csharp/CSharpServer.cs b/tutorial/csharp/CsharpServer/CsharpServer.cs similarity index 82% rename from test/csharp/CSharpServer.cs rename to tutorial/csharp/CsharpServer/CsharpServer.cs index f9ab8fd28..0d37c994c 100644 --- a/test/csharp/CSharpServer.cs +++ b/tutorial/csharp/CsharpServer/CsharpServer.cs @@ -1,4 +1,4 @@ -/* +/* * 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 @@ -15,115 +15,115 @@ * 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 log; - - public CalculatorHandler() - { - log = new Dictionary(); - } - - 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."); - } - } -} + */ + +using System; +using System.Collections.Generic; +using Thrift.Server; +using Thrift.Transport; + +namespace CSharpTutorial +{ + public class CalculatorHandler : Calculator.Iface + { + Dictionary log; + + public CalculatorHandler() + { + log = new Dictionary(); + } + + 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 000000000..aa2ac1525 --- /dev/null +++ b/tutorial/csharp/CsharpServer/CsharpServer.csproj @@ -0,0 +1,88 @@ + + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {66707BAE-BBF9-4F03-B53E-BE3AD58322F8} + Exe + Properties + CsharpServer + CsharpServer + v3.5 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + False + ..\..\..\lib\csharp\src\bin\Release\Thrift.dll + + + + + + + + + + + + + + + + \ 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 000000000..998116365 --- /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")] diff --git a/tutorial/csharp/tutorial.sln b/tutorial/csharp/tutorial.sln new file mode 100644 index 000000000..05e495142 --- /dev/null +++ b/tutorial/csharp/tutorial.sln @@ -0,0 +1,39 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual C# Express 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Thrift", "..\..\lib\csharp\src\Thrift.csproj", "{499EB63C-D74C-47E8-AE48-A2FC94538E9D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CsharpClient", "CsharpClient\CsharpClient.csproj", "{18F24087-4760-43DA-ACAB-7B9F0E096B11}" + ProjectSection(ProjectDependencies) = postProject + {499EB63C-D74C-47E8-AE48-A2FC94538E9D} = {499EB63C-D74C-47E8-AE48-A2FC94538E9D} + {66707BAE-BBF9-4F03-B53E-BE3AD58322F8} = {66707BAE-BBF9-4F03-B53E-BE3AD58322F8} + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CsharpServer", "CsharpServer\CsharpServer.csproj", "{66707BAE-BBF9-4F03-B53E-BE3AD58322F8}" + ProjectSection(ProjectDependencies) = postProject + {499EB63C-D74C-47E8-AE48-A2FC94538E9D} = {499EB63C-D74C-47E8-AE48-A2FC94538E9D} + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {499EB63C-D74C-47E8-AE48-A2FC94538E9D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {499EB63C-D74C-47E8-AE48-A2FC94538E9D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {499EB63C-D74C-47E8-AE48-A2FC94538E9D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {499EB63C-D74C-47E8-AE48-A2FC94538E9D}.Release|Any CPU.Build.0 = Release|Any CPU + {18F24087-4760-43DA-ACAB-7B9F0E096B11}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {18F24087-4760-43DA-ACAB-7B9F0E096B11}.Debug|Any CPU.Build.0 = Debug|Any CPU + {18F24087-4760-43DA-ACAB-7B9F0E096B11}.Release|Any CPU.ActiveCfg = Release|Any CPU + {18F24087-4760-43DA-ACAB-7B9F0E096B11}.Release|Any CPU.Build.0 = Release|Any CPU + {66707BAE-BBF9-4F03-B53E-BE3AD58322F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {66707BAE-BBF9-4F03-B53E-BE3AD58322F8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {66707BAE-BBF9-4F03-B53E-BE3AD58322F8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {66707BAE-BBF9-4F03-B53E-BE3AD58322F8}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal