summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore17
-rw-r--r--compiler/cpp/CMakeLists.txt1
-rw-r--r--compiler/cpp/Makefile.am1
-rw-r--r--compiler/cpp/compiler.vcxproj9
-rw-r--r--compiler/cpp/compiler.vcxproj.filters3
-rw-r--r--compiler/cpp/src/thrift/generate/t_csharp_generator.cc3259
-rw-r--r--compiler/cpp/src/thrift/generate/t_generator.cc5
-rw-r--r--compiler/cpp/src/thrift/main.cc2
-rw-r--r--compiler/cpp/src/thrift/thriftl.ll1
-rw-r--r--compiler/cpp/tests/CMakeLists.txt1
-rw-r--r--lib/csharp/Makefile.am114
-rw-r--r--lib/csharp/README.md32
-rw-r--r--lib/csharp/ThriftMSBuildTask/Properties/AssemblyInfo.cs60
-rw-r--r--lib/csharp/ThriftMSBuildTask/ThriftBuild.cs246
-rw-r--r--lib/csharp/ThriftMSBuildTask/ThriftMSBuildTask.csproj118
-rw-r--r--lib/csharp/coding_standards.md6
-rw-r--r--lib/csharp/src/Collections/TCollections.cs94
-rw-r--r--lib/csharp/src/Collections/THashSet.cs160
-rw-r--r--lib/csharp/src/Net35/ExtensionsNet35.cs31
-rw-r--r--lib/csharp/src/Properties/AssemblyInfo.cs55
-rw-r--r--lib/csharp/src/Protocol/TAbstractBase.cs29
-rw-r--r--lib/csharp/src/Protocol/TBase.cs29
-rw-r--r--lib/csharp/src/Protocol/TBase64Utils.cs100
-rw-r--r--lib/csharp/src/Protocol/TBinaryProtocol.cs395
-rw-r--r--lib/csharp/src/Protocol/TCompactProtocol.cs849
-rw-r--r--lib/csharp/src/Protocol/TField.cs62
-rw-r--r--lib/csharp/src/Protocol/TJSONProtocol.cs1124
-rw-r--r--lib/csharp/src/Protocol/TList.cs54
-rw-r--r--lib/csharp/src/Protocol/TMap.cs62
-rw-r--r--lib/csharp/src/Protocol/TMessage.cs62
-rw-r--r--lib/csharp/src/Protocol/TMessageType.cs31
-rw-r--r--lib/csharp/src/Protocol/TMultiplexedProcessor.cs183
-rw-r--r--lib/csharp/src/Protocol/TMultiplexedProtocol.cs103
-rw-r--r--lib/csharp/src/Protocol/TProtocol.cs142
-rw-r--r--lib/csharp/src/Protocol/TProtocolDecorator.cs261
-rw-r--r--lib/csharp/src/Protocol/TProtocolException.cs67
-rw-r--r--lib/csharp/src/Protocol/TProtocolFactory.cs33
-rw-r--r--lib/csharp/src/Protocol/TProtocolUtil.cs108
-rw-r--r--lib/csharp/src/Protocol/TSet.cs59
-rw-r--r--lib/csharp/src/Protocol/TStruct.cs46
-rw-r--r--lib/csharp/src/Protocol/TType.cs44
-rw-r--r--lib/csharp/src/Server/TServer.cs155
-rw-r--r--lib/csharp/src/Server/TServerEventHandler.cs53
-rw-r--r--lib/csharp/src/Server/TSimpleServer.cs180
-rw-r--r--lib/csharp/src/Server/TThreadPoolServer.cs295
-rw-r--r--lib/csharp/src/Server/TThreadedServer.cs282
-rw-r--r--lib/csharp/src/TApplicationException.cs146
-rw-r--r--lib/csharp/src/TAsyncProcessor.cs38
-rw-r--r--lib/csharp/src/TControllingHandler.cs29
-rw-r--r--lib/csharp/src/TException.cs40
-rw-r--r--lib/csharp/src/TProcessor.cs33
-rw-r--r--lib/csharp/src/TProcessorFactory.cs30
-rw-r--r--lib/csharp/src/TPrototypeProcessorFactory.cs55
-rw-r--r--lib/csharp/src/TSingletonProcessorFactory.cs43
-rw-r--r--lib/csharp/src/Thrift.45.csproj138
-rw-r--r--lib/csharp/src/Thrift.csproj166
-rw-r--r--lib/csharp/src/Thrift.sln47
-rw-r--r--lib/csharp/src/Transport/TBufferedTransport.cs194
-rw-r--r--lib/csharp/src/Transport/TFramedTransport.cs205
-rw-r--r--lib/csharp/src/Transport/THttpClient.cs486
-rw-r--r--lib/csharp/src/Transport/THttpHandler.cs102
-rw-r--r--lib/csharp/src/Transport/THttpTaskAsyncHandler.cs97
-rw-r--r--lib/csharp/src/Transport/TMemoryBuffer.cs117
-rw-r--r--lib/csharp/src/Transport/TNamedPipeClientTransport.cs111
-rw-r--r--lib/csharp/src/Transport/TNamedPipeServerTransport.cs296
-rw-r--r--lib/csharp/src/Transport/TServerSocket.cs176
-rw-r--r--lib/csharp/src/Transport/TServerTransport.cs44
-rw-r--r--lib/csharp/src/Transport/TSilverlightSocket.cs393
-rw-r--r--lib/csharp/src/Transport/TSocket.cs245
-rw-r--r--lib/csharp/src/Transport/TSocketVersionizer.cs78
-rw-r--r--lib/csharp/src/Transport/TStreamTransport.cs128
-rw-r--r--lib/csharp/src/Transport/TTLSServerSocket.cs223
-rw-r--r--lib/csharp/src/Transport/TTLSSocket.cs445
-rw-r--r--lib/csharp/src/Transport/TTransport.cs146
-rw-r--r--lib/csharp/src/Transport/TTransportException.cs69
-rw-r--r--lib/csharp/src/Transport/TTransportFactory.cs42
-rw-r--r--lib/csharp/src/thrift.snkbin596 -> 0 bytes
-rw-r--r--lib/csharp/test/JSON/JSONTest.csproj85
-rw-r--r--lib/csharp/test/JSON/Program.cs95
-rw-r--r--lib/csharp/test/JSON/Properties/AssemblyInfo.cs55
-rw-r--r--lib/csharp/test/JSON/app.config21
-rw-r--r--lib/csharp/test/Multiplex/Client/Multiplex.Test.Client.cs82
-rw-r--r--lib/csharp/test/Multiplex/Client/MultiplexClient.csproj148
-rw-r--r--lib/csharp/test/Multiplex/Client/Properties/AssemblyInfo.cs55
-rw-r--r--lib/csharp/test/Multiplex/Makefile.am63
-rw-r--r--lib/csharp/test/Multiplex/Multiplex.Test.Common.cs40
-rw-r--r--lib/csharp/test/Multiplex/Server/Multiplex.Test.Server.cs107
-rw-r--r--lib/csharp/test/Multiplex/Server/MultiplexServer.csproj148
-rw-r--r--lib/csharp/test/Multiplex/Server/Properties/AssemblyInfo.cs55
-rw-r--r--lib/csharp/test/ThriftMVCTest/App_Start/FilterConfig.cs31
-rw-r--r--lib/csharp/test/ThriftMVCTest/App_Start/RouteConfig.cs39
-rw-r--r--lib/csharp/test/ThriftMVCTest/AsyncHttpHandler.cs32
-rw-r--r--lib/csharp/test/ThriftMVCTest/Controllers/HomeController.cs70
-rw-r--r--lib/csharp/test/ThriftMVCTest/Global.asax19
-rw-r--r--lib/csharp/test/ThriftMVCTest/Global.asax.cs34
-rw-r--r--lib/csharp/test/ThriftMVCTest/Properties/AssemblyInfo.cs53
-rw-r--r--lib/csharp/test/ThriftMVCTest/SecondServiceImpl.cs37
-rw-r--r--lib/csharp/test/ThriftMVCTest/SyncHttpHandler.cs32
-rw-r--r--lib/csharp/test/ThriftMVCTest/ThriftMVCTest.csproj200
-rw-r--r--lib/csharp/test/ThriftMVCTest/Views/Home/Index.cshtml25
-rw-r--r--lib/csharp/test/ThriftMVCTest/Views/Shared/_Layout.cshtml30
-rw-r--r--lib/csharp/test/ThriftMVCTest/Views/Web.config60
-rw-r--r--lib/csharp/test/ThriftMVCTest/Views/_ViewStart.cshtml22
-rw-r--r--lib/csharp/test/ThriftMVCTest/Web.Debug.config45
-rw-r--r--lib/csharp/test/ThriftMVCTest/Web.Release.config46
-rw-r--r--lib/csharp/test/ThriftMVCTest/Web.config92
-rw-r--r--lib/csharp/test/ThriftMVCTest/favicon.icobin32038 -> 0 bytes
-rw-r--r--lib/csharp/test/ThriftMVCTest/packages.config25
-rw-r--r--lib/delphi/Thrift.groupproj120
-rw-r--r--lib/delphi/Thrift.groupproj.local9
-rw-r--r--lib/delphi/test/Performance/Referenz.txt21
-rw-r--r--lib/netstd/Benchmarks/Thrift.Benchmarks/Thrift.Benchmarks.csproj2
-rw-r--r--lib/netstd/Tests/Thrift.IntegrationTests/Thrift.IntegrationTests.csproj8
-rw-r--r--lib/netstd/Tests/Thrift.Tests/Thrift.Tests.csproj10
-rw-r--r--lib/netstd/Thrift/Thrift.csproj16
-rw-r--r--test/ThriftTest.thrift1
-rw-r--r--test/csharp/Makefile.am95
-rw-r--r--test/csharp/Program.cs71
-rw-r--r--test/csharp/Properties/AssemblyInfo.cs55
-rw-r--r--test/csharp/TestClient.cs870
-rw-r--r--test/csharp/TestServer.cs535
-rw-r--r--test/csharp/ThriftTest.csproj141
-rw-r--r--test/csharp/ThriftTest.sln17
-rw-r--r--test/haxe/src/Arguments.hx2
-rw-r--r--test/netstd/Client/Client.csproj2
-rw-r--r--test/netstd/Referenz.txt20
-rw-r--r--test/netstd/Server/Server.csproj2
-rw-r--r--test/netstd/ThriftTest.sln63
-rw-r--r--tutorial/csharp/CsharpClient/CsharpClient.cs92
-rw-r--r--tutorial/csharp/CsharpClient/CsharpClient.csproj110
-rw-r--r--tutorial/csharp/CsharpClient/Properties/AssemblyInfo.cs55
-rw-r--r--tutorial/csharp/CsharpServer/CsharpServer.cs129
-rw-r--r--tutorial/csharp/CsharpServer/CsharpServer.csproj111
-rw-r--r--tutorial/csharp/CsharpServer/Properties/AssemblyInfo.cs55
-rw-r--r--tutorial/csharp/tutorial.sln39
-rw-r--r--tutorial/netstd/Client/Client.csproj2
-rw-r--r--tutorial/netstd/Server/Server.csproj2
137 files changed, 29 insertions, 17857 deletions
diff --git a/.gitignore b/.gitignore
index eacff5bd9..d11897e95 100644
--- a/.gitignore
+++ b/.gitignore
@@ -184,9 +184,6 @@ project.lock.json
/lib/c_glib/test/testserialization
/lib/c_glib/thriftc.pc
/lib/c_glib/thrift_c_glib.pc
-/lib/csharp/**/bin/
-/lib/csharp/**/obj/
-/lib/csharp/src/packages
/lib/d/test/*.pem
/lib/d/libthriftd*.a
/lib/d/test/async_test
@@ -234,8 +231,6 @@ project.lock.json
/lib/js/dist
/lib/js/doc
/lib/js/test/build
-/lib/netcore/**/bin
-/lib/netcore/**/obj
/lib/netstd/**/bin
/lib/netstd/**/obj
/lib/nodejs/coverage
@@ -328,8 +323,6 @@ project.lock.json
/test/cpp/StressTestNonBlocking
/test/cpp/TestClient
/test/cpp/TestServer
-/test/csharp/obj
-/test/csharp/bin
/test/dart/**/.dart_tool
/test/dart/**/.packages
/test/dart/**/packages
@@ -358,9 +351,6 @@ project.lock.json
/test/php/php_ext_dir/
/test/py.twisted/_trial_temp/
/test/rb/Gemfile.lock
-/test/netcore/**/bin
-/test/netcore/**/obj
-/test/netcore/Thrift
/test/netstd/**/bin
/test/netstd/**/obj
/test/netstd/**/launchSettings.json
@@ -393,10 +383,6 @@ project.lock.json
/tutorial/cpp/TutorialServer
/tutorial/c_glib/tutorial_client
/tutorial/c_glib/tutorial_server
-/tutorial/csharp/CsharpServer/obj
-/tutorial/csharp/CsharpServer/bin
-/tutorial/csharp/CsharpClient/obj
-/tutorial/csharp/CsharpClient/bin
/tutorial/d/async_client
/tutorial/d/client
/tutorial/d/server
@@ -421,9 +407,6 @@ project.lock.json
/tutorial/hs/dist/
/tutorial/java/build/
/tutorial/js/build/
-/tutorial/netcore/**/bin
-/tutorial/netcore/**/obj
-/tutorial/netcore/Thrift
/tutorial/netstd/**/bin
/tutorial/netstd/**/obj
/tutorial/netstd/Interfaces
diff --git a/compiler/cpp/CMakeLists.txt b/compiler/cpp/CMakeLists.txt
index 0d80f7910..0675f0eaa 100644
--- a/compiler/cpp/CMakeLists.txt
+++ b/compiler/cpp/CMakeLists.txt
@@ -76,7 +76,6 @@ THRIFT_ADD_COMPILER(as3 "Enable compiler for ActionScript 3" ON)
THRIFT_ADD_COMPILER(c_glib "Enable compiler for C with Glib" ON)
THRIFT_ADD_COMPILER(cl "Enable compiler for Common LISP" ON)
THRIFT_ADD_COMPILER(cpp "Enable compiler for C++" ON)
-THRIFT_ADD_COMPILER(csharp "Enable compiler for C#" ON)
THRIFT_ADD_COMPILER(d "Enable compiler for D" ON)
THRIFT_ADD_COMPILER(dart "Enable compiler for Dart" ON)
THRIFT_ADD_COMPILER(delphi "Enable compiler for Delphi" ON)
diff --git a/compiler/cpp/Makefile.am b/compiler/cpp/Makefile.am
index 2f962fe6f..05c912171 100644
--- a/compiler/cpp/Makefile.am
+++ b/compiler/cpp/Makefile.am
@@ -73,7 +73,6 @@ thrift_SOURCES += src/thrift/generate/t_as3_generator.cc \
src/thrift/generate/t_c_glib_generator.cc \
src/thrift/generate/t_cl_generator.cc \
src/thrift/generate/t_cpp_generator.cc \
- src/thrift/generate/t_csharp_generator.cc \
src/thrift/generate/t_d_generator.cc \
src/thrift/generate/t_dart_generator.cc \
src/thrift/generate/t_delphi_generator.cc \
diff --git a/compiler/cpp/compiler.vcxproj b/compiler/cpp/compiler.vcxproj
index 6e2bd8a96..dc9793f57 100644
--- a/compiler/cpp/compiler.vcxproj
+++ b/compiler/cpp/compiler.vcxproj
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@@ -57,7 +57,6 @@
<ClCompile Include="src\thrift\generate\t_c_glib_generator.cc" />
<ClCompile Include="src\thrift\generate\t_cl_generator.cc" />
<ClCompile Include="src\thrift\generate\t_cpp_generator.cc" />
- <ClCompile Include="src\thrift\generate\t_csharp_generator.cc" />
<ClCompile Include="src\thrift\generate\t_d_generator.cc" />
<ClCompile Include="src\thrift\generate\t_dart_generator.cc" />
<ClCompile Include="src\thrift\generate\t_delphi_generator.cc" />
@@ -99,34 +98,29 @@
<ProjectGuid>{89975A1A-F799-4556-98B8-64E30AB39A90}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>compiler</RootNamespace>
- <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>MultiByte</CharacterSet>
- <PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>MultiByte</CharacterSet>
- <PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
- <PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
- <PlatformToolset>v142</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
@@ -149,7 +143,6 @@
<IncludePath>$(ProjectDir)\src\;$(ProjectDir)\src\windows\;$(IncludePath)</IncludePath>
<TargetName>thrift</TargetName>
<ExecutablePath>$(ExecutablePath);C:\Program Files (x86)\Git\bin</ExecutablePath>
- <OutDir>E:\D\TOOLS\Thrift\</OutDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
diff --git a/compiler/cpp/compiler.vcxproj.filters b/compiler/cpp/compiler.vcxproj.filters
index fcb323046..360c4461c 100644
--- a/compiler/cpp/compiler.vcxproj.filters
+++ b/compiler/cpp/compiler.vcxproj.filters
@@ -101,9 +101,6 @@
<ClCompile Include="src\generate\t_cpp_generator.cc">
<Filter>generate</Filter>
</ClCompile>
- <ClCompile Include="src\generate\t_csharp_generator.cc">
- <Filter>generate</Filter>
- </ClCompile>
<ClCompile Include="src\generate\t_c_glib_generator.cc">
<Filter>generate</Filter>
</ClCompile>
diff --git a/compiler/cpp/src/thrift/generate/t_csharp_generator.cc b/compiler/cpp/src/thrift/generate/t_csharp_generator.cc
deleted file mode 100644
index e4d99b2cc..000000000
--- a/compiler/cpp/src/thrift/generate/t_csharp_generator.cc
+++ /dev/null
@@ -1,3259 +0,0 @@
-/*
- * 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.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-#include <cassert>
-
-#include <string>
-#include <fstream>
-#include <iostream>
-#include <vector>
-#include <cctype>
-
-#include <stdlib.h>
-#include <sys/stat.h>
-#include <sstream>
-
-#include "thrift/platform.h"
-#include "thrift/generate/t_oop_generator.h"
-
-using std::map;
-using std::ostream;
-using std::ostringstream;
-using std::string;
-using std::stringstream;
-using std::vector;
-
-static const string endl = "\n"; // avoid ostream << std::endl flushes
-
-struct member_mapping_scope {
- void* scope_member;
- std::map<std::string, std::string> mapping_table;
-};
-
-class t_csharp_generator : public t_oop_generator {
-public:
- t_csharp_generator(t_program* program,
- const std::map<std::string, std::string>& parsed_options,
- const std::string& option_string)
- : t_oop_generator(program) {
- (void)option_string;
-
- std::map<std::string, std::string>::const_iterator iter;
-
- async_ = false;
- nullable_ = false;
- hashcode_ = false;
- union_ = false;
- serialize_ = false;
- wcf_ = false;
- wcf_namespace_.clear();
- for( iter = parsed_options.begin(); iter != parsed_options.end(); ++iter) {
- if( iter->first.compare("async") == 0) {
- async_ = true;
- } else if( iter->first.compare("nullable") == 0) {
- nullable_ = true;
- } else if( iter->first.compare("hashcode") == 0) {
- hashcode_ = true;
- } else if( iter->first.compare("union") == 0) {
- union_ = true;
- } else if( iter->first.compare("serial") == 0) {
- serialize_ = true;
- wcf_namespace_ = iter->second; // since there can be only one namespace
- } else if( iter->first.compare("wcf") == 0) {
- wcf_ = true;
- wcf_namespace_ = iter->second;
- } else {
- throw "unknown option csharp:" + iter->first;
- }
- }
-
- out_dir_base_ = "gen-csharp";
- }
- void init_generator() override;
- void close_generator() override;
-
- void generate_consts(std::vector<t_const*> consts) override;
-
- void generate_typedef(t_typedef* ttypedef) override;
- void generate_enum(t_enum* tenum) override;
- void generate_struct(t_struct* tstruct) override;
- void generate_union(t_struct* tunion);
- void generate_xception(t_struct* txception) override;
- void generate_service(t_service* tservice) override;
- void generate_property(ostream& out, t_field* tfield, bool isPublic, bool generateIsset);
- void generate_csharp_property(ostream& out,
- t_field* tfield,
- bool isPublic,
- bool includeIsset = true,
- std::string fieldPrefix = "");
- bool print_const_value(std::ostream& out,
- std::string name,
- t_type* type,
- t_const_value* value,
- bool in_static,
- bool defval = false,
- bool needtype = false);
- std::string render_const_value(std::ostream& out,
- std::string name,
- t_type* type,
- t_const_value* value);
- void print_const_constructor(std::ostream& out, std::vector<t_const*> consts);
- void print_const_def_value(std::ostream& out,
- std::string name,
- t_type* type,
- t_const_value* value);
-
- void generate_csharp_struct(t_struct* tstruct, bool is_exception);
- void generate_csharp_union(t_struct* tunion);
- void generate_csharp_struct_definition(std::ostream& out,
- t_struct* tstruct,
- bool is_xception = false,
- bool in_class = false,
- bool is_result = false);
- void generate_csharp_union_definition(std::ostream& out, t_struct* tunion);
- void generate_csharp_union_class(std::ostream& out, t_struct* tunion, t_field* tfield);
- void generate_csharp_wcffault(std::ostream& out, t_struct* tstruct);
- void generate_csharp_struct_reader(std::ostream& out, t_struct* tstruct);
- void generate_csharp_struct_result_writer(std::ostream& out, t_struct* tstruct);
- void generate_csharp_struct_writer(std::ostream& out, t_struct* tstruct);
- void generate_csharp_struct_tostring(std::ostream& out, t_struct* tstruct);
- void generate_csharp_struct_equals(std::ostream& out, t_struct* tstruct);
- void generate_csharp_struct_hashcode(std::ostream& out, t_struct* tstruct);
- void generate_csharp_union_reader(std::ostream& out, t_struct* tunion);
-
- void generate_function_helpers(t_function* tfunction);
- void generate_service_interface(t_service* tservice);
- void generate_separate_service_interfaces(t_service* tservice);
- void generate_sync_service_interface(t_service* tservice);
- void generate_async_service_interface(t_service* tservice);
- void generate_combined_service_interface(t_service* tservice);
- void generate_silverlight_async_methods(t_service* tservice);
- void generate_service_helpers(t_service* tservice);
- void generate_service_client(t_service* tservice);
- void generate_service_server(t_service* tservice);
- void generate_service_server_sync(t_service* tservice);
- void generate_service_server_async(t_service* tservice);
- void generate_process_function(t_service* tservice, t_function* function);
- void generate_process_function_async(t_service* tservice, t_function* function);
-
- void generate_deserialize_field(std::ostream& out,
- t_field* tfield,
- std::string prefix = "",
- bool is_propertyless = false);
- void generate_deserialize_struct(std::ostream& out, t_struct* tstruct, std::string prefix = "");
- void generate_deserialize_container(std::ostream& out, t_type* ttype, std::string prefix = "");
- void generate_deserialize_set_element(std::ostream& out, t_set* tset, std::string prefix = "");
- void generate_deserialize_map_element(std::ostream& out, t_map* tmap, std::string prefix = "");
- void generate_deserialize_list_element(std::ostream& out, t_list* list, std::string prefix = "");
- void generate_serialize_field(std::ostream& out,
- t_field* tfield,
- std::string prefix = "",
- bool is_element = false,
- bool is_propertyless = false);
- void generate_serialize_struct(std::ostream& out, t_struct* tstruct, std::string prefix = "");
- void generate_serialize_container(std::ostream& out, t_type* ttype, std::string prefix = "");
- void generate_serialize_map_element(std::ostream& out,
- t_map* tmap,
- std::string iter,
- std::string map);
- void generate_serialize_set_element(std::ostream& out, t_set* tmap, std::string iter);
- void generate_serialize_list_element(std::ostream& out, t_list* tlist, std::string iter);
-
- void generate_csharp_doc(std::ostream& out, t_field* field);
- void generate_csharp_doc(std::ostream& out, t_doc* tdoc);
- void generate_csharp_doc(std::ostream& out, t_function* tdoc);
- void generate_csharp_docstring_comment(std::ostream& out, string contents);
-
- void start_csharp_namespace(std::ostream& out);
- void end_csharp_namespace(std::ostream& out);
-
- std::string csharp_type_usings();
- std::string csharp_thrift_usings();
-
- std::string type_name(t_type* ttype,
- bool in_countainer = false,
- bool in_init = false,
- bool in_param = false,
- bool is_required = false);
- std::string base_type_name(t_base_type* tbase,
- bool in_container = false,
- bool in_param = false,
- bool is_required = false);
- std::string declare_field(t_field* tfield, bool init = false, std::string prefix = "");
- std::string function_signature_async_begin(t_function* tfunction, std::string prefix = "");
- std::string function_signature_async_end(t_function* tfunction, std::string prefix = "");
- std::string function_signature_async(t_function* tfunction, std::string prefix = "");
- std::string function_signature(t_function* tfunction, std::string prefix = "");
- std::string argument_list(t_struct* tstruct);
- std::string type_to_enum(t_type* ttype);
- std::string prop_name(t_field* tfield, bool suppress_mapping = false);
- std::string get_enum_class_name(t_type* type) override;
-
- bool field_has_default(t_field* tfield) { return tfield->get_value() != NULL; }
-
- bool field_is_required(t_field* tfield) { return tfield->get_req() == t_field::T_REQUIRED; }
-
- bool type_can_be_null(t_type* ttype) {
- while (ttype->is_typedef()) {
- ttype = ((t_typedef*)ttype)->get_type();
- }
-
- return ttype->is_container() || ttype->is_struct() || ttype->is_xception()
- || ttype->is_string();
- }
-
-private:
- std::string namespace_name_;
- ofstream_with_content_based_conditional_update f_service_;
- std::string namespace_dir_;
- bool async_;
- bool nullable_;
- bool union_;
- bool hashcode_;
- bool serialize_;
- bool wcf_;
- std::string wcf_namespace_;
-
- std::map<std::string, int> csharp_keywords;
- std::vector<member_mapping_scope> member_mapping_scopes;
-
- void init_keywords();
- std::string normalize_name(std::string name);
- std::string make_valid_csharp_identifier(std::string const& fromName);
- void prepare_member_name_mapping(t_struct* tstruct);
- void prepare_member_name_mapping(void* scope,
- const vector<t_field*>& members,
- const string& structname);
- void cleanup_member_name_mapping(void* scope);
- string get_mapped_member_name(string oldname);
-};
-
-void t_csharp_generator::init_generator() {
- MKDIR(get_out_dir().c_str());
- namespace_name_ = program_->get_namespace("csharp");
-
- string dir = namespace_name_;
- string subdir = get_out_dir().c_str();
- string::size_type loc;
-
- while ((loc = dir.find(".")) != string::npos) {
- subdir = subdir + "/" + dir.substr(0, loc);
- MKDIR(subdir.c_str());
- dir = dir.substr(loc + 1);
- }
- if (dir.size() > 0) {
- subdir = subdir + "/" + dir;
- MKDIR(subdir.c_str());
- }
-
- namespace_dir_ = subdir;
- init_keywords();
-
- while( ! member_mapping_scopes.empty()) {
- cleanup_member_name_mapping( member_mapping_scopes.back().scope_member);
- }
-
- pverbose("C# options:\n");
- pverbose("- async ...... %s\n", (async_ ? "ON" : "off"));
- pverbose("- nullable ... %s\n", (nullable_ ? "ON" : "off"));
- pverbose("- union ...... %s\n", (union_ ? "ON" : "off"));
- pverbose("- hashcode ... %s\n", (hashcode_ ? "ON" : "off"));
- pverbose("- serialize .. %s\n", (serialize_ ? "ON" : "off"));
- pverbose("- wcf ........ %s\n", (wcf_ ? "ON" : "off"));
-}
-
-std::string t_csharp_generator::normalize_name(std::string name) {
- string tmp(name);
- std::transform(tmp.begin(), tmp.end(), tmp.begin(), static_cast<int (*)(int)>(std::tolower));
-
- // un-conflict keywords by prefixing with "@"
- if (csharp_keywords.find(tmp) != csharp_keywords.end()) {
- return "@" + name;
- }
-
- // no changes necessary
- return name;
-}
-
-void t_csharp_generator::init_keywords() {
- csharp_keywords.clear();
-
- // C# keywords
- csharp_keywords["abstract"] = 1;
- csharp_keywords["as"] = 1;
- csharp_keywords["base"] = 1;
- csharp_keywords["bool"] = 1;
- csharp_keywords["break"] = 1;
- csharp_keywords["byte"] = 1;
- csharp_keywords["case"] = 1;
- csharp_keywords["catch"] = 1;
- csharp_keywords["char"] = 1;
- csharp_keywords["checked"] = 1;
- csharp_keywords["class"] = 1;
- csharp_keywords["const"] = 1;
- csharp_keywords["continue"] = 1;
- csharp_keywords["decimal"] = 1;
- csharp_keywords["default"] = 1;
- csharp_keywords["delegate"] = 1;
- csharp_keywords["do"] = 1;
- csharp_keywords["double"] = 1;
- csharp_keywords["else"] = 1;
- csharp_keywords["enum"] = 1;
- csharp_keywords["event"] = 1;
- csharp_keywords["explicit"] = 1;
- csharp_keywords["extern"] = 1;
- csharp_keywords["false"] = 1;
- csharp_keywords["finally"] = 1;
- csharp_keywords["fixed"] = 1;
- csharp_keywords["float"] = 1;
- csharp_keywords["for"] = 1;
- csharp_keywords["foreach"] = 1;
- csharp_keywords["goto"] = 1;
- csharp_keywords["if"] = 1;
- csharp_keywords["implicit"] = 1;
- csharp_keywords["in"] = 1;
- csharp_keywords["int"] = 1;
- csharp_keywords["interface"] = 1;
- csharp_keywords["internal"] = 1;
- csharp_keywords["is"] = 1;
- csharp_keywords["lock"] = 1;
- csharp_keywords["long"] = 1;
- csharp_keywords["namespace"] = 1;
- csharp_keywords["new"] = 1;
- csharp_keywords["null"] = 1;
- csharp_keywords["object"] = 1;
- csharp_keywords["operator"] = 1;
- csharp_keywords["out"] = 1;
- csharp_keywords["override"] = 1;
- csharp_keywords["params"] = 1;
- csharp_keywords["private"] = 1;
- csharp_keywords["protected"] = 1;
- csharp_keywords["public"] = 1;
- csharp_keywords["readonly"] = 1;
- csharp_keywords["ref"] = 1;
- csharp_keywords["return"] = 1;
- csharp_keywords["sbyte"] = 1;
- csharp_keywords["sealed"] = 1;
- csharp_keywords["short"] = 1;
- csharp_keywords["sizeof"] = 1;
- csharp_keywords["stackalloc"] = 1;
- csharp_keywords["static"] = 1;
- csharp_keywords["string"] = 1;
- csharp_keywords["struct"] = 1;
- csharp_keywords["switch"] = 1;
- csharp_keywords["this"] = 1;
- csharp_keywords["throw"] = 1;
- csharp_keywords["true"] = 1;
- csharp_keywords["try"] = 1;
- csharp_keywords["typeof"] = 1;
- csharp_keywords["uint"] = 1;
- csharp_keywords["ulong"] = 1;
- csharp_keywords["unchecked"] = 1;
- csharp_keywords["unsafe"] = 1;
- csharp_keywords["ushort"] = 1;
- csharp_keywords["using"] = 1;
- csharp_keywords["virtual"] = 1;
- csharp_keywords["void"] = 1;
- csharp_keywords["volatile"] = 1;
- csharp_keywords["while"] = 1;
-
- // C# contextual keywords
- csharp_keywords["add"] = 1;
- csharp_keywords["alias"] = 1;
- csharp_keywords["ascending"] = 1;
- csharp_keywords["async"] = 1;
- csharp_keywords["await"] = 1;
- csharp_keywords["descending"] = 1;
- csharp_keywords["dynamic"] = 1;
- csharp_keywords["from"] = 1;
- csharp_keywords["get"] = 1;
- csharp_keywords["global"] = 1;
- csharp_keywords["group"] = 1;
- csharp_keywords["into"] = 1;
- csharp_keywords["join"] = 1;
- csharp_keywords["let"] = 1;
- csharp_keywords["orderby"] = 1;
- csharp_keywords["partial"] = 1;
- csharp_keywords["remove"] = 1;
- csharp_keywords["select"] = 1;
- csharp_keywords["set"] = 1;
- csharp_keywords["value"] = 1;
- csharp_keywords["var"] = 1;
- csharp_keywords["where"] = 1;
- csharp_keywords["yield"] = 1;
-}
-
-void t_csharp_generator::start_csharp_namespace(ostream& out) {
- if (!namespace_name_.empty()) {
- out << "namespace " << namespace_name_ << "\n";
- scope_up(out);
- }
-}
-
-void t_csharp_generator::end_csharp_namespace(ostream& out) {
- if (!namespace_name_.empty()) {
- scope_down(out);
- }
-}
-
-string t_csharp_generator::csharp_type_usings() {
- return string() + "using System;\n" + "using System.Collections;\n"
- + "using System.Collections.Generic;\n" + "using System.Text;\n" + "using System.IO;\n"
- + ((async_) ? "using System.Threading.Tasks;\n" : "") + "using Thrift;\n"
- + "using Thrift.Collections;\n" + ((serialize_ || wcf_) ? "#if !SILVERLIGHT\n" : "")
- + ((serialize_ || wcf_) ? "using System.Xml.Serialization;\n" : "")
- + ((serialize_ || wcf_) ? "#endif\n" : "")
- + "using System.Runtime.Serialization;\n";
-}
-
-string t_csharp_generator::csharp_thrift_usings() {
- return string() + "using Thrift.Protocol;\n" + "using Thrift.Transport;\n";
-}
-
-void t_csharp_generator::close_generator() {
-}
-void t_csharp_generator::generate_typedef(t_typedef* ttypedef) {
- (void)ttypedef;
-}
-
-void t_csharp_generator::generate_enum(t_enum* tenum) {
- string f_enum_name = namespace_dir_ + "/" + (tenum->get_name()) + ".cs";
- ofstream_with_content_based_conditional_update f_enum;
- f_enum.open(f_enum_name.c_str());
-
- f_enum << autogen_comment() << endl;
-
- start_csharp_namespace(f_enum);
-
- generate_csharp_doc(f_enum, tenum);
-
- indent(f_enum) << "public enum " << tenum->get_name() << "\n";
- scope_up(f_enum);
-
- vector<t_enum_value*> constants = tenum->get_constants();
- vector<t_enum_value*>::iterator c_iter;
- for (c_iter = constants.begin(); c_iter != constants.end(); ++c_iter) {
- generate_csharp_doc(f_enum, *c_iter);
-
- int value = (*c_iter)->get_value();
- indent(f_enum) << (*c_iter)->get_name() << " = " << value << "," << endl;
- }
-
- scope_down(f_enum);
-
- end_csharp_namespace(f_enum);
-
- f_enum.close();
-}
-
-void t_csharp_generator::generate_consts(std::vector<t_const*> consts) {
- if (consts.empty()) {
- return;
- }
- string f_consts_name = namespace_dir_ + '/' + program_name_ + ".Constants.cs";
- ofstream_with_content_based_conditional_update f_consts;
- f_consts.open(f_consts_name.c_str());
-
- f_consts << autogen_comment() << csharp_type_usings() << endl;
-
- start_csharp_namespace(f_consts);
-
- indent(f_consts) << "public static class " << make_valid_csharp_identifier(program_name_)
- << "Constants" << endl;
- scope_up(f_consts);
-
- vector<t_const*>::iterator c_iter;
- bool need_static_constructor = false;
- for (c_iter = consts.begin(); c_iter != consts.end(); ++c_iter) {
- generate_csharp_doc(f_consts, (*c_iter));
- if (print_const_value(f_consts,
- (*c_iter)->get_name(),
- (*c_iter)->get_type(),
- (*c_iter)->get_value(),
- false)) {
- need_static_constructor = true;
- }
- }
-
- if (need_static_constructor) {
- print_const_constructor(f_consts, consts);
- }
-
- scope_down(f_consts);
- end_csharp_namespace(f_consts);
- f_consts.close();
-}
-
-void t_csharp_generator::print_const_def_value(std::ostream& out,
- string name,
- t_type* type,
- t_const_value* value) {
- if (type->is_struct() || type->is_xception()) {
- const vector<t_field*>& fields = ((t_struct*)type)->get_members();
- vector<t_field*>::const_iterator f_iter;
- const map<t_const_value*, t_const_value*, t_const_value::value_compare>& val = value->get_map();
- map<t_const_value*, t_const_value*, t_const_value::value_compare>::const_iterator v_iter;
- prepare_member_name_mapping((t_struct*)type);
- for (v_iter = val.begin(); v_iter != val.end(); ++v_iter) {
- t_field* field = NULL;
- for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
- if ((*f_iter)->get_name() == v_iter->first->get_string()) {
- field = (*f_iter);
- }
- }
- if (field == NULL) {
- throw "type error: " + type->get_name() + " has no field " + v_iter->first->get_string();
- }
- t_type* field_type = field->get_type();
- string val = render_const_value(out, name, field_type, v_iter->second);
- indent(out) << name << "." << prop_name(field) << " = " << val << ";" << endl;
- }
- cleanup_member_name_mapping((t_struct*)type);
- } else if (type->is_map()) {
- t_type* ktype = ((t_map*)type)->get_key_type();
- t_type* vtype = ((t_map*)type)->get_val_type();
- const map<t_const_value*, t_const_value*, t_const_value::value_compare>& val = value->get_map();
- map<t_const_value*, t_const_value*, t_const_value::value_compare>::const_iterator v_iter;
- for (v_iter = val.begin(); v_iter != val.end(); ++v_iter) {
- string key = render_const_value(out, name, ktype, v_iter->first);
- string val = render_const_value(out, name, vtype, v_iter->second);
- indent(out) << name << "[" << key << "]"
- << " = " << val << ";" << endl;
- }
- } else if (type->is_list() || type->is_set()) {
- t_type* etype;
- if (type->is_list()) {
- etype = ((t_list*)type)->get_elem_type();
- } else {
- etype = ((t_set*)type)->get_elem_type();
- }
-
- const vector<t_const_value*>& val = value->get_list();
- vector<t_const_value*>::const_iterator v_iter;
- for (v_iter = val.begin(); v_iter != val.end(); ++v_iter) {
- string val = render_const_value(out, name, etype, *v_iter);
- indent(out) << name << ".Add(" << val << ");" << endl;
- }
- }
-}
-
-void t_csharp_generator::print_const_constructor(std::ostream& out, std::vector<t_const*> consts) {
- indent(out) << "static " << make_valid_csharp_identifier(program_name_).c_str() << "Constants()"
- << endl;
- scope_up(out);
- vector<t_const*>::iterator c_iter;
- for (c_iter = consts.begin(); c_iter != consts.end(); ++c_iter) {
- string name = (*c_iter)->get_name();
- t_type* type = (*c_iter)->get_type();
- t_const_value* value = (*c_iter)->get_value();
-
- print_const_def_value(out, name, type, value);
- }
- scope_down(out);
-}
-
-// it seems like all that methods that call this are using in_static to be the opposite of what it
-// would imply
-bool t_csharp_generator::print_const_value(std::ostream& out,
- string name,
- t_type* type,
- t_const_value* value,
- bool in_static,
- bool defval,
- bool needtype) {
- indent(out);
- bool need_static_construction = !in_static;
- while (type->is_typedef()) {
- type = ((t_typedef*)type)->get_type();
- }
-
- if (!defval || needtype) {
- out << (in_static ? "" : type->is_base_type() ? "public const " : "public static ")
- << type_name(type) << " ";
- }
- if (type->is_base_type()) {
- string v2 = render_const_value(out, name, type, value);
- out << name << " = " << v2 << ";" << endl;
- need_static_construction = false;
- } else if (type->is_enum()) {
- out << name << " = " << type_name(type, false, true) << "." << value->get_identifier_name()
- << ";" << endl;
- need_static_construction = false;
- } else if (type->is_struct() || type->is_xception()) {
- out << name << " = new " << type_name(type) << "();" << endl;
- } else if (type->is_map()) {
- out << name << " = new " << type_name(type, true, true) << "();" << endl;
- } else if (type->is_list() || type->is_set()) {
- out << name << " = new " << type_name(type) << "();" << endl;
- }
-
- if (defval && !type->is_base_type() && !type->is_enum()) {
- print_const_def_value(out, name, type, value);
- }
-
- return need_static_construction;
-}
-
-std::string t_csharp_generator::render_const_value(ostream& out,
- string name,
- t_type* type,
- t_const_value* value) {
- (void)name;
- std::ostringstream render;
-
- if (type->is_base_type()) {
- t_base_type::t_base tbase = ((t_base_type*)type)->get_base();
- switch (tbase) {
- case t_base_type::TYPE_STRING:
- render << '"' << get_escaped_string(value) << '"';
- break;
- case t_base_type::TYPE_BOOL:
- render << ((value->get_integer() > 0) ? "true" : "false");
- break;
- case t_base_type::TYPE_I8:
- case t_base_type::TYPE_I16:
- case t_base_type::TYPE_I32:
- case t_base_type::TYPE_I64:
- render << value->get_integer();
- break;
- case t_base_type::TYPE_DOUBLE:
- if (value->get_type() == t_const_value::CV_INTEGER) {
- render << value->get_integer();
- } else {
- render << value->get_double();
- }
- break;
- default:
- throw "compiler error: no const of base type " + t_base_type::t_base_name(tbase);
- }
- } else if (type->is_enum()) {
- render << type->get_name() << "." << value->get_identifier_name();
- } else {
- string t = tmp("tmp");
- print_const_value(out, t, type, value, true, true, true);
- render << t;
- }
-
- return render.str();
-}
-
-void t_csharp_generator::generate_struct(t_struct* tstruct) {
- if (union_ && tstruct->is_union()) {
- generate_csharp_union(tstruct);
- } else {
- generate_csharp_struct(tstruct, false);
- }
-}
-
-void t_csharp_generator::generate_xception(t_struct* txception) {
- generate_csharp_struct(txception, true);
-}
-
-void t_csharp_generator::generate_csharp_struct(t_struct* tstruct, bool is_exception) {
- string f_struct_name = namespace_dir_ + "/" + (tstruct->get_name()) + ".cs";
- ofstream_with_content_based_conditional_update f_struct;
-
- f_struct.open(f_struct_name.c_str());
-
- f_struct << autogen_comment() << csharp_type_usings() << csharp_thrift_usings() << endl;
-
- generate_csharp_struct_definition(f_struct, tstruct, is_exception);
-
- f_struct.close();
-}
-
-void t_csharp_generator::generate_csharp_struct_definition(ostream& out,
- t_struct* tstruct,
- bool is_exception,
- bool in_class,
- bool is_result) {
-
- if (!in_class) {
- start_csharp_namespace(out);
- }
-
- out << endl;
-
- generate_csharp_doc(out, tstruct);
- prepare_member_name_mapping(tstruct);
-
- indent(out) << "#if !SILVERLIGHT" << endl;
- indent(out) << "[Serializable]" << endl;
- indent(out) << "#endif" << endl;
- if ((serialize_ || wcf_) && !is_exception) {
- indent(out) << "[DataContract(Namespace=\"" << wcf_namespace_ << "\")]"
- << endl; // do not make exception classes directly WCF serializable, we provide a
- // separate "fault" for that
- }
- bool is_final = (tstruct->annotations_.find("final") != tstruct->annotations_.end());
-
- indent(out) << "public " << (is_final ? "sealed " : "") << "partial class "
- << normalize_name(tstruct->get_name()) << " : ";
-
- if (is_exception) {
- out << "TException, ";
- }
- out << "TBase";
-
- out << endl;
-
- scope_up(out);
-
- const vector<t_field*>& members = tstruct->get_members();
- vector<t_field*>::const_iterator m_iter;
-
- // make private members with public Properties
- for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
- // if the field is requied, then we use auto-properties
- if (!field_is_required((*m_iter)) && (!nullable_ || field_has_default((*m_iter)))) {
- indent(out) << "private " << declare_field(*m_iter, false, "_") << endl;
- }
- }
- out << endl;
-
- bool has_non_required_fields = false;
- bool has_non_required_default_value_fields = false;
- bool has_required_fields = false;
- for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
- generate_csharp_doc(out, *m_iter);
- generate_property(out, *m_iter, true, true);
- bool is_required = field_is_required((*m_iter));
- bool has_default = field_has_default((*m_iter));
- if (is_required) {
- has_required_fields = true;
- } else {
- if (has_default) {
- has_non_required_default_value_fields = true;
- }
- has_non_required_fields = true;
- }
- }
-
- bool generate_isset = (nullable_ && has_non_required_default_value_fields)
- || (!nullable_ && has_non_required_fields);
- if (generate_isset) {
- out << endl;
- if (serialize_ || wcf_) {
- out << indent() << "[XmlIgnore] // XmlSerializer" << endl << indent()
- << "[DataMember(Order = 1)] // XmlObjectSerializer, DataContractJsonSerializer, etc."
- << endl;
- }
- out << indent() << "public Isset __isset;" << endl << indent() << "#if !SILVERLIGHT" << endl
- << indent() << "[Serializable]" << endl << indent() << "#endif" << endl;
- if (serialize_ || wcf_) {
- indent(out) << "[DataContract]" << endl;
- }
- indent(out) << "public struct Isset {" << endl;
- indent_up();
- for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
- bool is_required = field_is_required((*m_iter));
- bool has_default = field_has_default((*m_iter));
- // if it is required, don't need Isset for that variable
- // if it is not required, if it has a default value, we need to generate Isset
- // if we are not nullable, then we generate Isset
- if (!is_required && (!nullable_ || has_default)) {
- if (serialize_ || wcf_) {
- indent(out) << "[DataMember]" << endl;
- }
- indent(out) << "public bool " << normalize_name((*m_iter)->get_name()) << ";" << endl;
- }
- }
-
- indent_down();
- indent(out) << "}" << endl << endl;
-
- if (generate_isset && (serialize_ || wcf_)) {
- indent(out) << "#region XmlSerializer support" << endl << endl;
-
- for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
- bool is_required = field_is_required((*m_iter));
- bool has_default = field_has_default((*m_iter));
- // if it is required, don't need Isset for that variable
- // if it is not required, if it has a default value, we need to generate Isset
- // if we are not nullable, then we generate Isset
- if (!is_required && (!nullable_ || has_default)) {
- indent(out) << "public bool ShouldSerialize" << prop_name((*m_iter)) << "()" << endl;
- indent(out) << "{" << endl;
- indent_up();
- indent(out) << "return __isset." << normalize_name((*m_iter)->get_name()) << ";" << endl;
- indent_down();
- indent(out) << "}" << endl << endl;
- }
- }
-
- indent(out) << "#endregion XmlSerializer support" << endl << endl;
- }
- }
-
- // We always want a default, no argument constructor for Reading
- indent(out) << "public " << normalize_name(tstruct->get_name()) << "() {" << endl;
- indent_up();
-
- for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
- t_type* t = (*m_iter)->get_type();
- while (t->is_typedef()) {
- t = ((t_typedef*)t)->get_type();
- }
- if ((*m_iter)->get_value() != NULL) {
- if (field_is_required((*m_iter))) {
- print_const_value(out, "this." + prop_name(*m_iter), t, (*m_iter)->get_value(), true, true);
- } else {
- print_const_value(out,
- "this._" + (*m_iter)->get_name(),
- t,
- (*m_iter)->get_value(),
- true,
- true);
- // Optionals with defaults are marked set
- indent(out) << "this.__isset." << normalize_name((*m_iter)->get_name()) << " = true;"
- << endl;
- }
- }
- }
- indent_down();
- indent(out) << "}" << endl << endl;
-
- if (has_required_fields) {
- indent(out) << "public " << tstruct->get_name() << "(";
- bool first = true;
- for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
- if (field_is_required((*m_iter))) {
- if (first) {
- first = false;
- } else {
- out << ", ";
- }
- out << type_name((*m_iter)->get_type()) << " " << normalize_name((*m_iter)->get_name());
- }
- }
- out << ") : this() {" << endl;
- indent_up();
-
- for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
- if (field_is_required((*m_iter))) {
- indent(out) << "this." << prop_name((*m_iter)) << " = " << normalize_name((*m_iter)->get_name()) << ";"
- << endl;
- }
- }
-
- indent_down();
- indent(out) << "}" << endl << endl;
- }
-
- generate_csharp_struct_reader(out, tstruct);
- if (is_result) {
- generate_csharp_struct_result_writer(out, tstruct);
- } else {
- generate_csharp_struct_writer(out, tstruct);
- }
- if (hashcode_) {
- generate_csharp_struct_equals(out, tstruct);
- generate_csharp_struct_hashcode(out, tstruct);
- }
- generate_csharp_struct_tostring(out, tstruct);
- scope_down(out);
- out << endl;
-
- // generate a corresponding WCF fault to wrap the exception
- if ((serialize_ || wcf_) && is_exception) {
- generate_csharp_wcffault(out, tstruct);
- }
-
- cleanup_member_name_mapping(tstruct);
- if (!in_class) {
- end_csharp_namespace(out);
- }
-}
-
-void t_csharp_generator::generate_csharp_wcffault(ostream& out, t_struct* tstruct) {
- out << endl;
- indent(out) << "#if !SILVERLIGHT" << endl;
- indent(out) << "[Serializable]" << endl;
- indent(out) << "#endif" << endl;
- indent(out) << "[DataContract]" << endl;
- bool is_final = (tstruct->annotations_.find("final") != tstruct->annotations_.end());
-
- indent(out) << "public " << (is_final ? "sealed " : "") << "partial class " << tstruct->get_name()
- << "Fault" << endl;
-
- scope_up(out);
-
- const vector<t_field*>& members = tstruct->get_members();
- vector<t_field*>::const_iterator m_iter;
-
- // make private members with public Properties
- for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
- // if the field is requied, then we use auto-properties
- if (!field_is_required((*m_iter)) && (!nullable_ || field_has_default((*m_iter)))) {
- indent(out) << "private " << declare_field(*m_iter, false, "_") << endl;
- }
- }
- out << endl;
-
- for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
- generate_property(out, *m_iter, true, false);
- }
-
- scope_down(out);
- out << endl;
-}
-
-void t_csharp_generator::generate_csharp_struct_reader(ostream& out, t_struct* tstruct) {
- indent(out) << "public void Read (TProtocol iprot)" << endl;
- scope_up(out);
-
- out << indent() << "iprot.IncrementRecursionDepth();" << endl;
- out << indent() << "try" << endl;
- scope_up(out);
-
- const vector<t_field*>& fields = tstruct->get_members();
- vector<t_field*>::const_iterator f_iter;
-
- // Required variables aren't in __isset, so we need tmp vars to check them
- for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
- if (field_is_required((*f_iter))) {
- indent(out) << "bool isset_" << (*f_iter)->get_name() << " = false;" << endl;
- }
- }
-
- indent(out) << "TField field;" << endl << indent() << "iprot.ReadStructBegin();" << endl;
-
- indent(out) << "while (true)" << endl;
- scope_up(out);
-
- indent(out) << "field = iprot.ReadFieldBegin();" << endl;
-
- indent(out) << "if (field.Type == TType.Stop) { " << endl;
- indent_up();
- indent(out) << "break;" << endl;
- indent_down();
- indent(out) << "}" << endl;
-
- indent(out) << "switch (field.ID)" << endl;
-
- scope_up(out);
-
- for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
- bool is_required = field_is_required((*f_iter));
- indent(out) << "case " << (*f_iter)->get_key() << ":" << endl;
- indent_up();
- indent(out) << "if (field.Type == " << type_to_enum((*f_iter)->get_type()) << ") {" << endl;
- indent_up();
-
- generate_deserialize_field(out, *f_iter);
- if (is_required) {
- indent(out) << "isset_" << (*f_iter)->get_name() << " = true;" << endl;
- }
-
- indent_down();
- out << indent() << "} else { " << endl << indent() << " TProtocolUtil.Skip(iprot, field.Type);"
- << endl << indent() << "}" << endl << indent() << "break;" << endl;
- indent_down();
- }
-
- indent(out) << "default: " << endl;
- indent_up();
- indent(out) << "TProtocolUtil.Skip(iprot, field.Type);" << endl;
- indent(out) << "break;" << endl;
- indent_down();
-
- scope_down(out);
-
- indent(out) << "iprot.ReadFieldEnd();" << endl;
-
- scope_down(out);
-
- indent(out) << "iprot.ReadStructEnd();" << endl;
-
- for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
- if (field_is_required((*f_iter))) {
- indent(out) << "if (!isset_" << (*f_iter)->get_name() << ")" << endl;
- indent_up();
- out << indent()
- << "throw new TProtocolException(TProtocolException.INVALID_DATA, "
- << "\"required field " << prop_name((*f_iter)) << " not set\");"
- << endl;
- indent_down();
- }
- }
-
- scope_down(out);
- out << indent() << "finally" << endl;
- scope_up(out);
- out << indent() << "iprot.DecrementRecursionDepth();" << endl;
- scope_down(out);
-
- indent_down();
-
- indent(out) << "}" << endl << endl;
-}
-
-void t_csharp_generator::generate_csharp_struct_writer(ostream& out, t_struct* tstruct) {
- out << indent() << "public void Write(TProtocol oprot) {" << endl;
- indent_up();
-
- out << indent() << "oprot.IncrementRecursionDepth();" << endl;
- out << indent() << "try" << endl;
- scope_up(out);
-
- string name = tstruct->get_name();
- const vector<t_field*>& fields = tstruct->get_sorted_members();
- vector<t_field*>::const_iterator f_iter;
-
- indent(out) << "TStruct struc = new TStruct(\"" << name << "\");" << endl;
- indent(out) << "oprot.WriteStructBegin(struc);" << endl;
-
- if (fields.size() > 0) {
- indent(out) << "TField field = new TField();" << endl;
- for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
- bool is_required = field_is_required((*f_iter));
- bool has_default = field_has_default((*f_iter));
- bool null_allowed = type_can_be_null((*f_iter)->get_type());
-
- if (is_required)
- {
- if (null_allowed) {
- indent(out) << "if (" << prop_name((*f_iter)) << " == null)" << endl;
- indent_up();
- out << indent()
- << "throw new TProtocolException(TProtocolException.INVALID_DATA, "
- << "\"required field " << prop_name((*f_iter)) << " not set\");"
- << endl;
- indent_down();
- }
- }
- else
- {
- if (nullable_ && !has_default) {
- indent(out) << "if (" << prop_name((*f_iter)) << " != null) {" << endl;
- }
- else if (null_allowed) {
- out << indent()
- << "if (" << prop_name((*f_iter)) << " != null && __isset."
- << normalize_name((*f_iter)->get_name()) << ") {"
- << endl;
- }
- else {
- indent(out) << "if (__isset." << normalize_name((*f_iter)->get_name()) << ") {" << endl;
- }
- indent_up();
- }
- indent(out) << "field.Name = \"" << (*f_iter)->get_name() << "\";" << endl;
- indent(out) << "field.Type = " << type_to_enum((*f_iter)->get_type()) << ";" << endl;
- indent(out) << "field.ID = " << (*f_iter)->get_key() << ";" << endl;
- indent(out) << "oprot.WriteFieldBegin(field);" << endl;
-
- generate_serialize_field(out, *f_iter);
-
- indent(out) << "oprot.WriteFieldEnd();" << endl;
- if (!is_required) {
- indent_down();
- indent(out) << "}" << endl;
- }
- }
- }
-
- indent(out) << "oprot.WriteFieldStop();" << endl;
- indent(out) << "oprot.WriteStructEnd();" << endl;
-
- scope_down(out);
- out << indent() << "finally" << endl;
- scope_up(out);
- out << indent() << "oprot.DecrementRecursionDepth();" << endl;
- scope_down(out);
-
- indent_down();
-
- indent(out) << "}" << endl << endl;
-}
-
-void t_csharp_generator::generate_csharp_struct_result_writer(ostream& out, t_struct* tstruct) {
- indent(out) << "public void Write(TProtocol oprot) {" << endl;
- indent_up();
-
- out << indent() << "oprot.IncrementRecursionDepth();" << endl;
- out << indent() << "try" << endl;
- scope_up(out);
-
- string name = tstruct->get_name();
- const vector<t_field*>& fields = tstruct->get_sorted_members();
- vector<t_field*>::const_iterator f_iter;
-
- indent(out) << "TStruct struc = new TStruct(\"" << name << "\");" << endl;
- indent(out) << "oprot.WriteStructBegin(struc);" << endl;
-
- if (fields.size() > 0) {
- indent(out) << "TField field = new TField();" << endl;
- bool first = true;
- for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
- if (first) {
- first = false;
- out << endl << indent() << "if ";
- } else {
- out << " else if ";
- }
-
- if (nullable_) {
- out << "(this." << prop_name((*f_iter)) << " != null) {" << endl;
- } else {
- out << "(this.__isset." << normalize_name((*f_iter)->get_name()) << ") {" << endl;
- }
- indent_up();
-
- bool null_allowed = !nullable_ && type_can_be_null((*f_iter)->get_type());
- if (null_allowed) {
- indent(out) << "if (" << prop_name(*f_iter) << " != null) {" << endl;
- indent_up();
- }
-
- indent(out) << "field.Name = \"" << prop_name(*f_iter) << "\";" << endl;
- indent(out) << "field.Type = " << type_to_enum((*f_iter)->get_type()) << ";" << endl;
- indent(out) << "field.ID = " << (*f_iter)->get_key() << ";" << endl;
- indent(out) << "oprot.WriteFieldBegin(field);" << endl;
-
- generate_serialize_field(out, *f_iter);
-
- indent(out) << "oprot.WriteFieldEnd();" << endl;
-
- if (null_allowed) {
- indent_down();
- indent(out) << "}" << endl;
- }
-
- indent_down();
- indent(out) << "}";
- }
- }
-
- out << endl << indent() << "oprot.WriteFieldStop();" << endl << indent()
- << "oprot.WriteStructEnd();" << endl;
-
- scope_down(out);
- out << indent() << "finally" << endl;
- scope_up(out);
- out << indent() << "oprot.DecrementRecursionDepth();" << endl;
- scope_down(out);
-
- indent_down();
-
- indent(out) << "}" << endl << endl;
-}
-
-void t_csharp_generator::generate_csharp_struct_tostring(ostream& out, t_struct* tstruct) {
- indent(out) << "public override string ToString() {" << endl;
- indent_up();
-
- indent(out) << "StringBuilder __sb = new StringBuilder(\"" << tstruct->get_name() << "(\");"
- << endl;
-
- const vector<t_field*>& fields = tstruct->get_members();
- vector<t_field*>::const_iterator f_iter;
-
- bool useFirstFlag = false;
- for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
- if (!field_is_required((*f_iter))) {
- indent(out) << "bool __first = true;" << endl;
- useFirstFlag = true;
- }
- break;
- }
-
- bool had_required = false; // set to true after first required field has been processed
-
- for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
- bool is_required = field_is_required((*f_iter));
- bool has_default = field_has_default((*f_iter));
- if (nullable_ && !has_default && !is_required) {
- indent(out) << "if (" << prop_name((*f_iter)) << " != null) {" << endl;
- indent_up();
- } else if (!is_required) {
- bool null_allowed = type_can_be_null((*f_iter)->get_type());
- if (null_allowed) {
- indent(out) << "if (" << prop_name((*f_iter)) << " != null && __isset."
- << normalize_name((*f_iter)->get_name()) << ") {" << endl;
- indent_up();
- } else {
- indent(out) << "if (__isset." << normalize_name((*f_iter)->get_name()) << ") {" << endl;
- indent_up();
- }
- }
-
- if (useFirstFlag && (!had_required)) {
- indent(out) << "if(!__first) { __sb.Append(\", \"); }" << endl;
- if (!is_required) {
- indent(out) << "__first = false;" << endl;
- }
- indent(out) << "__sb.Append(\"" << prop_name((*f_iter)) << ": \");" << endl;
- } else {
- indent(out) << "__sb.Append(\", " << prop_name((*f_iter)) << ": \");" << endl;
- }
-
- t_type* ttype = (*f_iter)->get_type();
- if (ttype->is_xception() || ttype->is_struct()) {
- indent(out) << "__sb.Append(" << prop_name((*f_iter))
- << "== null ? \"<null>\" : " << prop_name((*f_iter)) << ".ToString());" << endl;
- } else {
- indent(out) << "__sb.Append(" << prop_name((*f_iter)) << ");" << endl;
- }
-
- if (!is_required) {
- indent_down();
- indent(out) << "}" << endl;
- } else {
- had_required = true; // now __first must be false, so we don't need to check it anymore
- }
- }
-
- indent(out) << "__sb.Append(\")\");" << endl;
- indent(out) << "return __sb.ToString();" << endl;
-
- indent_down();
- indent(out) << "}" << endl << endl;
-}
-
-void t_csharp_generator::generate_csharp_union(t_struct* tunion) {
- string f_union_name = namespace_dir_ + "/" + (tunion->get_name()) + ".cs";
- ofstream_with_content_based_conditional_update f_union;
-
- f_union.open(f_union_name.c_str());
-
- f_union << autogen_comment() << csharp_type_usings() << csharp_thrift_usings() << endl;
-
- generate_csharp_union_definition(f_union, tunion);
-
- f_union.close();
-}
-
-void t_csharp_generator::generate_csharp_union_definition(std::ostream& out, t_struct* tunion) {
- // Let's define the class first
- start_csharp_namespace(out);
-
- indent(out) << "public abstract partial class " << tunion->get_name() << " : TAbstractBase {"
- << endl;
-
- indent_up();
-
- indent(out) << "public abstract void Write(TProtocol protocol);" << endl;
- indent(out) << "public readonly int Isset;" << endl;
- indent(out) << "public abstract object Data { get; }" << endl;
-
- indent(out) << "protected " << tunion->get_name() << "(int isset) {" << endl;
- indent_up();
- indent(out) << "Isset = isset;" << endl;
- indent_down();
- indent(out) << "}" << endl << endl;
-
- indent(out) << "public class ___undefined : " << tunion->get_name() << " {" << endl;
- indent_up();
-
- indent(out) << "public override object Data { get { return null; } }" << endl;
-
- indent(out) << "public ___undefined() : base(0) {}" << endl << endl;
-
- indent(out) << "public override void Write(TProtocol protocol) {" << endl;
- indent_up();
- indent(out) << "throw new TProtocolException( TProtocolException.INVALID_DATA, \"Cannot persist "
- "an union type which is not set.\");" << endl;
- indent_down();
- indent(out) << "}" << endl << endl;
-
- indent_down();
- indent(out) << "}" << endl << endl;
-
- const vector<t_field*>& fields = tunion->get_members();
- vector<t_field*>::const_iterator f_iter;
-
- for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
- generate_csharp_union_class(out, tunion, (*f_iter));
- }
-
- generate_csharp_union_reader(out, tunion);
-
- indent_down();
- indent(out) << "}" << endl << endl;
-
- end_csharp_namespace(out);
-}
-
-void t_csharp_generator::generate_csharp_union_class(std::ostream& out,
- t_struct* tunion,
- t_field* tfield) {
- indent(out) << "public " << type_name(tfield->get_type()) << " As_" << tfield->get_name() << endl;
- indent(out) << "{" << endl;
- indent_up();
- indent(out) << "get" << endl;
- indent(out) << "{" << endl;
- indent_up();
- indent(out) << "return (" << tfield->get_key() << " == Isset) ? (" << type_name(tfield->get_type()) << ")Data : default(" << type_name(tfield->get_type()) << ");" << endl;
- indent_down();
- indent(out) << "}" << endl;
- indent_down();
- indent(out) << "}" << endl
- << endl;
-
-
- indent(out) << "public class " << tfield->get_name() << " : " << tunion->get_name() << " {"
- << endl;
- indent_up();
- indent(out) << "private " << type_name(tfield->get_type()) << " _data;" << endl;
- indent(out) << "public override object Data { get { return _data; } }" << endl;
- indent(out) << "public " << tfield->get_name() << "(" << type_name(tfield->get_type())
- << " data) : base("<< tfield->get_key() <<") {" << endl;
- indent_up();
- indent(out) << "this._data = data;" << endl;
- indent_down();
- indent(out) << "}" << endl;
- indent(out) << "public override void Write(TProtocol oprot) {" << endl;
- indent_up();
-
- out << indent() << "oprot.IncrementRecursionDepth();" << endl;
- out << indent() << "try" << endl;
- scope_up(out);
-
- indent(out) << "TStruct struc = new TStruct(\"" << tunion->get_name() << "\");" << endl;
- indent(out) << "oprot.WriteStructBegin(struc);" << endl;
-
- indent(out) << "TField field = new TField();" << endl;
- indent(out) << "field.Name = \"" << tfield->get_name() << "\";" << endl;
- indent(out) << "field.Type = " << type_to_enum(tfield->get_type()) << ";" << endl;
- indent(out) << "field.ID = " << tfield->get_key() << ";" << endl;
- indent(out) << "oprot.WriteFieldBegin(field);" << endl;
-
- generate_serialize_field(out, tfield, "_data", true, true);
-
- indent(out) << "oprot.WriteFieldEnd();" << endl;
- indent(out) << "oprot.WriteFieldStop();" << endl;
- indent(out) << "oprot.WriteStructEnd();" << endl;
- indent_down();
-
- scope_down(out);
- out << indent() << "finally" << endl;
- scope_up(out);
- out << indent() << "oprot.DecrementRecursionDepth();" << endl;
- scope_down(out);
-
- indent(out) << "}" << endl;
-
- indent_down();
- indent(out) << "}" << endl << endl;
-}
-
-void t_csharp_generator::generate_csharp_struct_equals(ostream& out, t_struct* tstruct) {
- indent(out) << "public override bool Equals(object that) {" << endl;
- indent_up();
-
- indent(out) << "var other = that as " << type_name(tstruct) << ";" << endl;
- indent(out) << "if (other == null) return false;" << endl;
- indent(out) << "if (ReferenceEquals(this, other)) return true;" << endl;
-
- const vector<t_field*>& fields = tstruct->get_members();
- vector<t_field*>::const_iterator f_iter;
-
- bool first = true;
-
- for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
- if (first) {
- first = false;
- indent(out) << "return ";
- indent_up();
- } else {
- out << endl;
- indent(out) << "&& ";
- }
- if (!field_is_required((*f_iter)) && !(nullable_ && !field_has_default((*f_iter)))) {
- out << "((__isset." << normalize_name((*f_iter)->get_name()) << " == other.__isset."
- << normalize_name((*f_iter)->get_name()) << ") && ((!__isset."
- << normalize_name((*f_iter)->get_name()) << ") || (";
- }
- t_type* ttype = (*f_iter)->get_type();
- if (ttype->is_container() || ttype->is_binary()) {
- out << "TCollections.Equals(";
- } else {
- out << "System.Object.Equals(";
- }
- out << prop_name((*f_iter)) << ", other." << prop_name((*f_iter)) << ")";
- if (!field_is_required((*f_iter)) && !(nullable_ && !field_has_default((*f_iter)))) {
- out << ")))";
- }
- }
- if (first) {
- indent(out) << "return true;" << endl;
- } else {
- out << ";" << endl;
- indent_down();
- }
-
- indent_down();
- indent(out) << "}" << endl << endl;
-}
-
-void t_csharp_generator::generate_csharp_struct_hashcode(ostream& out, t_struct* tstruct) {
- indent(out) << "public override int GetHashCode() {" << endl;
- indent_up();
-
- indent(out) << "int hashcode = 0;" << endl;
- indent(out) << "unchecked {" << endl;
- indent_up();
-
- const vector<t_field*>& fields = tstruct->get_members();
- vector<t_field*>::const_iterator f_iter;
-
- for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
- t_type* ttype = (*f_iter)->get_type();
- indent(out) << "hashcode = (hashcode * 397) ^ ";
- if (field_is_required((*f_iter))) {
- out << "(";
- } else if (nullable_) {
- out << "(" << prop_name((*f_iter)) << " == null ? 0 : ";
- } else {
- out << "(!__isset." << normalize_name((*f_iter)->get_name()) << " ? 0 : ";
- }
- if (ttype->is_container()) {
- out << "(TCollections.GetHashCode(" << prop_name((*f_iter)) << "))";
- } else {
- out << "(" << prop_name((*f_iter)) << ".GetHashCode())";
- }
- out << ");" << endl;
- }
-
- indent_down();
- indent(out) << "}" << endl;
- indent(out) << "return hashcode;" << endl;
-
- indent_down();
- indent(out) << "}" << endl << endl;
-}
-
-void t_csharp_generator::generate_service(t_service* tservice) {
- string f_service_name = namespace_dir_ + "/" + service_name_ + ".cs";
- f_service_.open(f_service_name.c_str());
-
- f_service_ << autogen_comment() << csharp_type_usings() << csharp_thrift_usings() << endl;
-
- start_csharp_namespace(f_service_);
-
- indent(f_service_) << "public partial class " << normalize_name(service_name_) << " {" << endl;
- indent_up();
-
- generate_service_interface(tservice);
- generate_service_client(tservice);
- generate_service_server(tservice);
- generate_service_helpers(tservice);
-
- indent_down();
-
- indent(f_service_) << "}" << endl;
- end_csharp_namespace(f_service_);
- f_service_.close();
-}
-
-void t_csharp_generator::generate_service_interface(t_service* tservice) {
- generate_separate_service_interfaces(tservice);
-}
-
-void t_csharp_generator::generate_separate_service_interfaces(t_service* tservice) {
- generate_sync_service_interface(tservice);
-
- if (async_) {
- generate_async_service_interface(tservice);
- }
-
- generate_combined_service_interface(tservice);
-}
-
-void t_csharp_generator::generate_sync_service_interface(t_service* tservice) {
- string extends = "";
- string extends_iface = "";
- if (tservice->get_extends() != NULL) {
- extends = type_name(tservice->get_extends());
- extends_iface = " : " + extends + ".ISync";
- }
-
- generate_csharp_doc(f_service_, tservice);
-
- if (wcf_) {
- indent(f_service_) << "[System.ServiceModel.ServiceContract(Namespace=\"" << wcf_namespace_ << "\")]" << endl;
- }
- indent(f_service_) << "public interface ISync" << extends_iface << " {" << endl;
-
- indent_up();
- vector<t_function*> functions = tservice->get_functions();
- vector<t_function*>::iterator f_iter;
- for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
- generate_csharp_doc(f_service_, *f_iter);
-
- // if we're using WCF, add the corresponding attributes
- if (wcf_) {
- indent(f_service_) << "[System.ServiceModel.OperationContract]" << endl;
-
- const std::vector<t_field*>& xceptions = (*f_iter)->get_xceptions()->get_members();
- vector<t_field*>::const_iterator x_iter;
- for (x_iter = xceptions.begin(); x_iter != xceptions.end(); ++x_iter) {
- indent(f_service_) << "[System.ServiceModel.FaultContract(typeof("
- + type_name((*x_iter)->get_type(), false, false) + "Fault))]" << endl;
- }
- }
-
- indent(f_service_) << function_signature(*f_iter) << ";" << endl;
- }
- indent_down();
- f_service_ << indent() << "}" << endl << endl;
-}
-
-void t_csharp_generator::generate_async_service_interface(t_service* tservice) {
- string extends = "";
- string extends_iface = "";
- if (tservice->get_extends() != NULL) {
- extends = type_name(tservice->get_extends());
- extends_iface = " : " + extends + ".IAsync";
- }
-
- generate_csharp_doc(f_service_, tservice);
-
- if (wcf_) {
- indent(f_service_) << "[System.ServiceModel.ServiceContract(Namespace=\"" << wcf_namespace_ << "\")]" << endl;
- }
- indent(f_service_) << "public interface IAsync" << extends_iface << " {" << endl;
-
- indent_up();
- vector<t_function*> functions = tservice->get_functions();
- vector<t_function*>::iterator f_iter;
- for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
- generate_csharp_doc(f_service_, *f_iter);
-
- // if we're using WCF, add the corresponding attributes
- if (wcf_) {
- indent(f_service_) << "[System.ServiceModel.OperationContract]" << endl;
-
- const std::vector<t_field*>& xceptions = (*f_iter)->get_xceptions()->get_members();
- vector<t_field*>::const_iterator x_iter;
- for (x_iter = xceptions.begin(); x_iter != xceptions.end(); ++x_iter) {
- indent(f_service_) << "[System.ServiceModel.FaultContract(typeof("
- + type_name((*x_iter)->get_type(), false, false) + "Fault))]" << endl;
- }
- }
-
- indent(f_service_) << function_signature_async(*f_iter) << ";" << endl;
- }
- indent_down();
- f_service_ << indent() << "}" << endl << endl;
-}
-
-void t_csharp_generator::generate_combined_service_interface(t_service* tservice) {
- string extends_iface = " : ISync";
-
- if (async_) {
- extends_iface += ", IAsync";
- }
-
- generate_csharp_doc(f_service_, tservice);
-
- if (wcf_) {
- indent(f_service_) << "[System.ServiceModel.ServiceContract(Namespace=\"" << wcf_namespace_ << "\")]" << endl;
- }
-
- indent(f_service_) << "public interface Iface" << extends_iface << " {" << endl;
-
- indent_up();
-
- // We need to generate extra old style async methods for silverlight. Since
- // this isn't something you'd want to implement server-side, just put them into
- // the main Iface interface.
- generate_silverlight_async_methods(tservice);
-
- indent_down();
-
- f_service_ << indent() << "}" << endl << endl;
-}
-
-void t_csharp_generator::generate_silverlight_async_methods(t_service* tservice) {
- vector<t_function*> functions = tservice->get_functions();
- vector<t_function*>::iterator f_iter;
- for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
- generate_csharp_doc(f_service_, *f_iter);
-
- // For backwards compatibility, include the Begin_, End_ methods if we're generating
- // with the async flag. I'm not sure this is necessary, so someone with more knowledge
- // can maybe remove these checks if they know it's safe.
- if (!async_) {
- indent(f_service_) << "#if SILVERLIGHT" << endl;
- }
-
- indent(f_service_) << function_signature_async_begin(*f_iter, "Begin_") << ";" << endl;
- indent(f_service_) << function_signature_async_end(*f_iter, "End_") << ";" << endl;
-
- if (!async_) {
- indent(f_service_) << "#endif" << endl;
- }
- }
-}
-
-void t_csharp_generator::generate_service_helpers(t_service* tservice) {
- vector<t_function*> functions = tservice->get_functions();
- vector<t_function*>::iterator f_iter;
-
- for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
- t_struct* ts = (*f_iter)->get_arglist();
- generate_csharp_struct_definition(f_service_, ts, false, true);
- generate_function_helpers(*f_iter);
- }
-}
-
-void t_csharp_generator::generate_service_client(t_service* tservice) {
- string extends = "";
- string extends_client = "";
- if (tservice->get_extends() != NULL) {
- extends = type_name(tservice->get_extends());
- extends_client = extends + ".Client, ";
- } else {
- extends_client = "IDisposable, ";
- }
-
- generate_csharp_doc(f_service_, tservice);
-
- indent(f_service_) << "public class Client : " << extends_client << "Iface {" << endl;
- indent_up();
- indent(f_service_) << "public Client(TProtocol prot) : this(prot, prot)" << endl;
- scope_up(f_service_);
- scope_down(f_service_);
- f_service_ << endl;
-
- indent(f_service_) << "public Client(TProtocol iprot, TProtocol oprot)";
- if (!extends.empty()) {
- f_service_ << " : base(iprot, oprot)";
- }
- f_service_ << endl;
-
- scope_up(f_service_);
- if (extends.empty()) {
- f_service_ << indent() << "iprot_ = iprot;" << endl << indent() << "oprot_ = oprot;" << endl;
- }
- scope_down(f_service_);
-
- f_service_ << endl;
-
- if (extends.empty()) {
- f_service_ << indent() << "protected TProtocol iprot_;" << endl << indent()
- << "protected TProtocol oprot_;" << endl << indent() << "protected int seqid_;"
- << endl << endl;
-
- f_service_ << indent() << "public TProtocol InputProtocol" << endl;
- scope_up(f_service_);
- indent(f_service_) << "get { return iprot_; }" << endl;
- scope_down(f_service_);
-
- f_service_ << indent() << "public TProtocol OutputProtocol" << endl;
- scope_up(f_service_);
- indent(f_service_) << "get { return oprot_; }" << endl;
- scope_down(f_service_);
- f_service_ << endl << endl;
-
- indent(f_service_) << "#region \" IDisposable Support \"" << endl;
- indent(f_service_) << "private bool _IsDisposed;" << endl << endl;
- indent(f_service_) << "// IDisposable" << endl;
- indent(f_service_) << "public void Dispose()" << endl;
- scope_up(f_service_);
- indent(f_service_) << "Dispose(true);" << endl;
- scope_down(f_service_);
- indent(f_service_) << endl << endl;
- indent(f_service_) << "protected virtual void Dispose(bool disposing)" << endl;
- scope_up(f_service_);
- indent(f_service_) << "if (!_IsDisposed)" << endl;
- scope_up(f_service_);
- indent(f_service_) << "if (disposing)" << endl;
- scope_up(f_service_);
- indent(f_service_) << "if (iprot_ != null)" << endl;
- scope_up(f_service_);
- indent(f_service_) << "((IDisposable)iprot_).Dispose();" << endl;
- scope_down(f_service_);
- indent(f_service_) << "if (oprot_ != null)" << endl;
- scope_up(f_service_);
- indent(f_service_) << "((IDisposable)oprot_).Dispose();" << endl;
- scope_down(f_service_);
- scope_down(f_service_);
- scope_down(f_service_);
- indent(f_service_) << "_IsDisposed = true;" << endl;
- scope_down(f_service_);
- indent(f_service_) << "#endregion" << endl;
- f_service_ << endl << endl;
- }
-
- vector<t_function*> functions = tservice->get_functions();
- vector<t_function*>::const_iterator f_iter;
- for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
- string funname = (*f_iter)->get_name();
-
- indent(f_service_) << endl;
-
- if (!async_) {
- indent(f_service_) << "#if SILVERLIGHT" << endl;
- indent(f_service_) << endl;
- }
- // Begin_
- indent(f_service_) << "public " << function_signature_async_begin(*f_iter, "Begin_") << endl;
- scope_up(f_service_);
- indent(f_service_) << "return "
- << "send_" << funname << "(callback, state";
-
- t_struct* arg_struct = (*f_iter)->get_arglist();
- prepare_member_name_mapping(arg_struct);
-
- const vector<t_field*>& fields = arg_struct->get_members();
- vector<t_field*>::const_iterator fld_iter;
- for (fld_iter = fields.begin(); fld_iter != fields.end(); ++fld_iter) {
- f_service_ << ", ";
- f_service_ << normalize_name((*fld_iter)->get_name());
- }
- f_service_ << ");" << endl;
- scope_down(f_service_);
- f_service_ << endl;
-
- // End
- indent(f_service_) << "public " << function_signature_async_end(*f_iter, "End_") << endl;
- scope_up(f_service_);
- indent(f_service_) << "oprot_.Transport.EndFlush(asyncResult);" << endl;
- if (!(*f_iter)->is_oneway()) {
- f_service_ << indent();
- if (!(*f_iter)->get_returntype()->is_void()) {
- f_service_ << "return ";
- }
- f_service_ << "recv_" << funname << "();" << endl;
- }
- scope_down(f_service_);
- f_service_ << endl;
-
- // async
- bool first;
- if (async_) {
- indent(f_service_) << "public async " << function_signature_async(*f_iter, "") << endl;
- scope_up(f_service_);
-
- if (!(*f_iter)->get_returntype()->is_void()) {
- indent(f_service_) << type_name((*f_iter)->get_returntype()) << " retval;" << endl;
- indent(f_service_) << "retval = ";
- } else {
- indent(f_service_);
- }
- f_service_ << "await Task.Run(() =>" << endl;
- scope_up(f_service_);
- indent(f_service_);
- if (!(*f_iter)->get_returntype()->is_void()) {
- f_service_ << "return ";
- }
- f_service_ << funname << "(";
- first = true;
- for (fld_iter = fields.begin(); fld_iter != fields.end(); ++fld_iter) {
- if (first) {
- first = false;
- } else {
- f_service_ << ", ";
- }
- f_service_ << (*fld_iter)->get_name();
- }
- f_service_ << ");" << endl;
- indent_down();
- indent(f_service_) << "});" << endl;
- if (!(*f_iter)->get_returntype()->is_void()) {
- indent(f_service_) << "return retval;" << endl;
- }
- scope_down(f_service_);
- f_service_ << endl;
- }
-
- if (!async_) {
- indent(f_service_) << "#endif" << endl << endl;
- }
-
- generate_csharp_doc(f_service_, *f_iter);
- indent(f_service_) << "public " << function_signature(*f_iter) << endl;
- scope_up(f_service_);
-
- // silverlight invoke
- if (!async_) {
- indent(f_service_) << "#if SILVERLIGHT" << endl;
-
- indent(f_service_) << "var asyncResult = Begin_" << funname << "(null, null";
- for (fld_iter = fields.begin(); fld_iter != fields.end(); ++fld_iter) {
- f_service_ << ", " << normalize_name((*fld_iter)->get_name());
- }
- f_service_ << ");" << endl;
-
- if (!(*f_iter)->is_oneway()) {
- f_service_ << indent();
- if (!(*f_iter)->get_returntype()->is_void()) {
- f_service_ << "return ";
- }
- f_service_ << "End_" << funname << "(asyncResult);" << endl;
- }
- f_service_ << endl;
-
- indent(f_service_) << "#else" << endl;
- }
-
- // synchronous invoke
- indent(f_service_) << "send_" << funname << "(";
-
- first = true;
- for (fld_iter = fields.begin(); fld_iter != fields.end(); ++fld_iter) {
- if (first) {
- first = false;
- } else {
- f_service_ << ", ";
- }
- f_service_ << normalize_name((*fld_iter)->get_name());
- }
- f_service_ << ");" << endl;
-
- if (!(*f_iter)->is_oneway()) {
- f_service_ << indent();
- if (!(*f_iter)->get_returntype()->is_void()) {
- f_service_ << "return ";
- }
- f_service_ << "recv_" << funname << "();" << endl;
- }
- f_service_ << endl;
-
- if (!async_) {
- indent(f_service_) << "#endif" << endl;
- }
- scope_down(f_service_);
-
- // Send
- t_function send_function(g_type_void,
- string("send_") + (*f_iter)->get_name(),
- (*f_iter)->get_arglist());
-
- string argsname = (*f_iter)->get_name() + "_args";
-
- if (!async_) {
- indent(f_service_) << "#if SILVERLIGHT" << endl;
- }
-
- indent(f_service_) << "public " << function_signature_async_begin(&send_function) << endl;
- scope_up(f_service_);
-
- f_service_ << indent() << "oprot_.WriteMessageBegin(new TMessage(\"" << funname << "\", "
- << ((*f_iter)->is_oneway() ? "TMessageType.Oneway" : "TMessageType.Call")
- << ", seqid_));" << endl << indent() << argsname << " args = new " << argsname
- << "();" << endl;
-
- for (fld_iter = fields.begin(); fld_iter != fields.end(); ++fld_iter) {
- f_service_ << indent() << "args." << prop_name(*fld_iter) << " = "
- << normalize_name((*fld_iter)->get_name()) << ";" << endl;
- }
-
- f_service_ << indent() << "args.Write(oprot_);" << endl << indent()
- << "oprot_.WriteMessageEnd();" << endl;
- indent(f_service_) << "return oprot_.Transport.BeginFlush(callback, state);" << endl;
-
- scope_down(f_service_);
- f_service_ << endl;
-
- if (!async_) {
- indent(f_service_) << "#else" << endl;
- f_service_ << endl;
- }
-
- indent(f_service_) << "public " << function_signature(&send_function) << endl;
- scope_up(f_service_);
-
- f_service_ << indent() << "oprot_.WriteMessageBegin(new TMessage(\"" << funname << "\", "
- << ((*f_iter)->is_oneway() ? "TMessageType.Oneway" : "TMessageType.Call")
- << ", seqid_));" << endl << indent() << argsname << " args = new " << argsname
- << "();" << endl;
-
- for (fld_iter = fields.begin(); fld_iter != fields.end(); ++fld_iter) {
- f_service_ << indent() << "args." << prop_name(*fld_iter) << " = "
- << normalize_name((*fld_iter)->get_name()) << ";" << endl;
- }
-
- f_service_ << indent() << "args.Write(oprot_);" << endl << indent()
- << "oprot_.WriteMessageEnd();" << endl;
-
- indent(f_service_) << "oprot_.Transport.Flush();" << endl;
- cleanup_member_name_mapping(arg_struct);
- scope_down(f_service_);
-
- if (!async_) {
- indent(f_service_) << "#endif" << endl;
- }
-
- f_service_ << endl;
-
- if (!(*f_iter)->is_oneway()) {
- string resultname = (*f_iter)->get_name() + "_result";
-
- t_struct noargs(program_);
- t_function recv_function((*f_iter)->get_returntype(),
- string("recv_") + (*f_iter)->get_name(),
- &noargs,
- (*f_iter)->get_xceptions());
- indent(f_service_) << "public " << function_signature(&recv_function) << endl;
- scope_up(f_service_);
-
- t_struct* xs = (*f_iter)->get_xceptions();
- prepare_member_name_mapping(xs, xs->get_members(), resultname);
-
- f_service_ << indent() << "TMessage msg = iprot_.ReadMessageBegin();" << endl << indent()
- << "if (msg.Type == TMessageType.Exception) {" << endl;
- indent_up();
- f_service_ << indent() << "TApplicationException x = TApplicationException.Read(iprot_);"
- << endl << indent() << "iprot_.ReadMessageEnd();" << endl << indent() << "throw x;"
- << endl;
- indent_down();
- f_service_ << indent() << "}" << endl << indent() << resultname << " result = new "
- << resultname << "();" << endl << indent() << "result.Read(iprot_);" << endl
- << indent() << "iprot_.ReadMessageEnd();" << endl;
-
- if (!(*f_iter)->get_returntype()->is_void()) {
- if (nullable_) {
- if (type_can_be_null((*f_iter)->get_returntype())) {
- f_service_ << indent() << "if (result.Success != null) {" << endl << indent()
- << " return result.Success;" << endl << indent() << "}" << endl;
- } else {
- f_service_ << indent() << "if (result.Success.HasValue) {" << endl << indent()
- << " return result.Success.Value;" << endl << indent() << "}" << endl;
- }
- } else {
- f_service_ << indent() << "if (result.__isset.success) {" << endl << indent()
- << " return result.Success;" << endl << indent() << "}" << endl;
- }
- }
-
- const std::vector<t_field*>& xceptions = xs->get_members();
- vector<t_field*>::const_iterator x_iter;
- for (x_iter = xceptions.begin(); x_iter != xceptions.end(); ++x_iter) {
- if (nullable_) {
- f_service_ << indent() << "if (result." << prop_name(*x_iter) << " != null) {" << endl
- << indent() << " throw result." << prop_name(*x_iter) << ";" << endl
- << indent() << "}" << endl;
- } else {
- f_service_ << indent() << "if (result.__isset." << normalize_name((*x_iter)->get_name())
- << ") {" << endl << indent() << " throw result." << prop_name(*x_iter) << ";"
- << endl << indent() << "}" << endl;
- }
- }
-
- if ((*f_iter)->get_returntype()->is_void()) {
- indent(f_service_) << "return;" << endl;
- } else {
- f_service_ << indent()
- << "throw new "
- "TApplicationException(TApplicationException.ExceptionType.MissingResult, \""
- << (*f_iter)->get_name() << " failed: unknown result\");" << endl;
- }
-
- cleanup_member_name_mapping((*f_iter)->get_xceptions());
- scope_down(f_service_);
- f_service_ << endl;
- }
- }
-
- indent_down();
- indent(f_service_) << "}" << endl;
-}
-
-void t_csharp_generator::generate_service_server(t_service* tservice) {
- if (async_) {
- generate_service_server_async(tservice);
- generate_service_server_sync(tservice);
- }
- else {
- generate_service_server_sync(tservice);
- }
-}
-
-void t_csharp_generator::generate_service_server_sync(t_service* tservice) {
- vector<t_function*> functions = tservice->get_functions();
- vector<t_function*>::iterator f_iter;
-
- string extends = "";
- string extends_processor = "";
- if (tservice->get_extends() != NULL) {
- extends = type_name(tservice->get_extends());
- extends_processor = extends + ".Processor, ";
- }
-
- indent(f_service_) << "public class Processor : " << extends_processor << "TProcessor {" << endl;
- indent_up();
-
- indent(f_service_) << "public Processor(ISync iface)";
-
- if (!extends.empty()) {
- f_service_ << " : base(iface)";
- }
- f_service_ << endl;
- scope_up(f_service_);
- f_service_ << indent() << "iface_ = iface;" << endl;
-
- for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
- f_service_ << indent() << "processMap_[\"" << (*f_iter)->get_name()
- << "\"] = " << (*f_iter)->get_name() << "_Process;" << endl;
- }
-
- scope_down(f_service_);
- f_service_ << endl;
-
- if (extends.empty()) {
- f_service_
- << indent()
- << "protected delegate void ProcessFunction(int seqid, TProtocol iprot, TProtocol oprot);"
- << endl;
- }
-
- f_service_ << indent() << "private ISync iface_;" << endl;
-
- if (extends.empty()) {
- f_service_ << indent() << "protected Dictionary<string, ProcessFunction> processMap_ = new "
- "Dictionary<string, ProcessFunction>();" << endl;
- }
-
- f_service_ << endl;
-
- if (extends.empty()) {
- indent(f_service_) << "public bool Process(TProtocol iprot, TProtocol oprot)" << endl;
- }
- else {
- indent(f_service_) << "public new bool Process(TProtocol iprot, TProtocol oprot)" << endl;
- }
- scope_up(f_service_);
-
- f_service_ << indent() << "try" << endl;
- scope_up(f_service_);
-
- f_service_ << indent() << "TMessage msg = iprot.ReadMessageBegin();" << endl;
-
- f_service_
- << indent() << "ProcessFunction fn;" << endl << indent()
- << "processMap_.TryGetValue(msg.Name, out fn);" << endl << indent() << "if (fn == null) {"
- << endl << indent() << " TProtocolUtil.Skip(iprot, TType.Struct);" << endl << indent()
- << " iprot.ReadMessageEnd();" << endl << indent()
- << " TApplicationException x = new TApplicationException "
- "(TApplicationException.ExceptionType.UnknownMethod, \"Invalid method name: '\" + "
- "msg.Name + \"'\");" << endl << indent()
- << " oprot.WriteMessageBegin(new TMessage(msg.Name, TMessageType.Exception, msg.SeqID));"
- << endl << indent() << " x.Write(oprot);" << endl << indent() << " oprot.WriteMessageEnd();"
- << endl << indent() << " oprot.Transport.Flush();" << endl << indent() << " return true;"
- << endl << indent() << "}" << endl << indent() << "fn(msg.SeqID, iprot, oprot);" << endl;
-
- scope_down(f_service_);
-
- f_service_ << indent() << "catch (IOException)" << endl;
- scope_up(f_service_);
- f_service_ << indent() << "return false;" << endl;
- scope_down(f_service_);
-
- f_service_ << indent() << "return true;" << endl;
-
- scope_down(f_service_);
- f_service_ << endl;
-
- for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
- generate_process_function(tservice, *f_iter);
- }
-
- indent_down();
- indent(f_service_) << "}" << endl << endl;
-}
-
-void t_csharp_generator::generate_service_server_async(t_service* tservice) {
- vector<t_function*> functions = tservice->get_functions();
- vector<t_function*>::iterator f_iter;
-
- string extends = "";
- string extends_processor = "";
- if (tservice->get_extends() != NULL) {
- extends = type_name(tservice->get_extends());
- extends_processor = extends + ".AsyncProcessor, ";
- }
-
- indent(f_service_) << "public class AsyncProcessor : " << extends_processor << "TAsyncProcessor {" << endl;
- indent_up();
-
- indent(f_service_) << "public AsyncProcessor(IAsync iface)";
- if (!extends.empty()) {
- f_service_ << " : base(iface)";
- }
- f_service_ << endl;
- scope_up(f_service_);
- f_service_ << indent() << "iface_ = iface;" << endl;
-
- for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
- f_service_ << indent() << "processMap_[\"" << (*f_iter)->get_name()
- << "\"] = " << (*f_iter)->get_name() << "_ProcessAsync;" << endl;
- }
-
- scope_down(f_service_);
- f_service_ << endl;
-
- if (extends.empty()) {
- f_service_
- << indent()
- << "protected delegate Task ProcessFunction(int seqid, TProtocol iprot, TProtocol oprot);"
- << endl;
- }
-
- f_service_ << indent() << "private IAsync iface_;" << endl;
-
- if (extends.empty()) {
- f_service_ << indent() << "protected Dictionary<string, ProcessFunction> processMap_ = new "
- "Dictionary<string, ProcessFunction>();" << endl;
- }
-
- f_service_ << endl;
-
- if (extends.empty()) {
- indent(f_service_) << "public async Task<bool> ProcessAsync(TProtocol iprot, TProtocol oprot)" << endl;
- }
- else {
- indent(f_service_) << "public new async Task<bool> ProcessAsync(TProtocol iprot, TProtocol oprot)" << endl;
- }
- scope_up(f_service_);
-
- f_service_ << indent() << "try" << endl;
- scope_up(f_service_);
-
- f_service_ << indent() << "TMessage msg = iprot.ReadMessageBegin();" << endl;
-
- f_service_
- << indent() << "ProcessFunction fn;" << endl << indent()
- << "processMap_.TryGetValue(msg.Name, out fn);" << endl << indent() << "if (fn == null) {"
- << endl << indent() << " TProtocolUtil.Skip(iprot, TType.Struct);" << endl << indent()
- << " iprot.ReadMessageEnd();" << endl << indent()
- << " TApplicationException x = new TApplicationException "
- "(TApplicationException.ExceptionType.UnknownMethod, \"Invalid method name: '\" + "
- "msg.Name + \"'\");" << endl << indent()
- << " oprot.WriteMessageBegin(new TMessage(msg.Name, TMessageType.Exception, msg.SeqID));"
- << endl << indent() << " x.Write(oprot);" << endl << indent() << " oprot.WriteMessageEnd();"
- << endl << indent() << " oprot.Transport.Flush();" << endl << indent() << " return true;"
- << endl << indent() << "}" << endl << indent() << "await fn(msg.SeqID, iprot, oprot);" << endl;
-
- scope_down(f_service_);
-
- f_service_ << indent() << "catch (IOException)" << endl;
- scope_up(f_service_);
- f_service_ << indent() << "return false;" << endl;
- scope_down(f_service_);
-
- f_service_ << indent() << "return true;" << endl;
-
- scope_down(f_service_);
- f_service_ << endl;
-
- for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
- generate_process_function_async(tservice, *f_iter);
- }
-
- indent_down();
- indent(f_service_) << "}" << endl << endl;
-}
-
-void t_csharp_generator::generate_function_helpers(t_function* tfunction) {
- if (tfunction->is_oneway()) {
- return;
- }
-
- t_struct result(program_, tfunction->get_name() + "_result");
- t_field success(tfunction->get_returntype(), "success", 0);
- if (!tfunction->get_returntype()->is_void()) {
- result.append(&success);
- }
-
- t_struct* xs = tfunction->get_xceptions();
- const vector<t_field*>& fields = xs->get_members();
- vector<t_field*>::const_iterator f_iter;
- for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
- result.append(*f_iter);
- }
-
- generate_csharp_struct_definition(f_service_, &result, false, true, true);
-}
-
-void t_csharp_generator::generate_process_function(t_service* tservice, t_function* tfunction) {
- (void)tservice;
- indent(f_service_) << "public void " << tfunction->get_name()
- << "_Process(int seqid, TProtocol iprot, TProtocol oprot)" << endl;
- scope_up(f_service_);
-
- string argsname = tfunction->get_name() + "_args";
- string resultname = tfunction->get_name() + "_result";
-
- f_service_ << indent() << argsname << " args = new " << argsname << "();" << endl
- << indent() << "args.Read(iprot);" << endl
- << indent() << "iprot.ReadMessageEnd();" << endl;
-
- t_struct* xs = tfunction->get_xceptions();
- const std::vector<t_field*>& xceptions = xs->get_members();
- vector<t_field*>::const_iterator x_iter;
-
- if (!tfunction->is_oneway()) {
- f_service_ << indent() << resultname << " result = new " << resultname << "();" << endl;
- }
-
- f_service_ << indent() << "try" << endl
- << indent() << "{" << endl;
- indent_up();
-
- if (xceptions.size() > 0) {
- f_service_ << indent() << "try" << endl
- << indent() << "{" << endl;
- indent_up();
- }
-
- t_struct* arg_struct = tfunction->get_arglist();
- const std::vector<t_field*>& fields = arg_struct->get_members();
- vector<t_field*>::const_iterator f_iter;
-
- f_service_ << indent();
- if (!tfunction->is_oneway() && !tfunction->get_returntype()->is_void()) {
- f_service_ << "result.Success = ";
- }
- f_service_ << "iface_." << normalize_name(tfunction->get_name()) << "(";
- bool first = true;
- prepare_member_name_mapping(arg_struct);
- for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
- if (first) {
- first = false;
- } else {
- f_service_ << ", ";
- }
- f_service_ << "args." << prop_name(*f_iter);
- if (nullable_ && !type_can_be_null((*f_iter)->get_type())) {
- f_service_ << ".Value";
- }
- }
- cleanup_member_name_mapping(arg_struct);
- f_service_ << ");" << endl;
-
- prepare_member_name_mapping(xs, xs->get_members(), resultname);
- if (xceptions.size() > 0) {
- indent_down();
- f_service_ << indent() << "}" << endl;
- for (x_iter = xceptions.begin(); x_iter != xceptions.end(); ++x_iter) {
- f_service_ << indent() << "catch (" << type_name((*x_iter)->get_type(), false, false) << " "
- << (*x_iter)->get_name() << ")" << endl
- << indent() << "{" << endl;
- if (!tfunction->is_oneway()) {
- indent_up();
- f_service_ << indent() << "result." << prop_name(*x_iter) << " = " << (*x_iter)->get_name()
- << ";" << endl;
- indent_down();
- }
- f_service_ << indent() << "}" << endl;
- }
- }
- if (!tfunction->is_oneway()) {
- f_service_ << indent() << "oprot.WriteMessageBegin(new TMessage(\"" << tfunction->get_name()
- << "\", TMessageType.Reply, seqid)); " << endl;
- f_service_ << indent() << "result.Write(oprot);" << endl;
- }
- indent_down();
-
- cleanup_member_name_mapping(xs);
-
- f_service_ << indent() << "}" << endl
- << indent() << "catch (TTransportException)" << endl
- << indent() << "{" << endl
- << indent() << " throw;" << endl
- << indent() << "}" << endl
- << indent() << "catch (Exception ex)" << endl
- << indent() << "{" << endl
- << indent() << " Console.Error.WriteLine(\"Error occurred in processor:\");" << endl
- << indent() << " Console.Error.WriteLine(ex.ToString());" << endl;
-
- if (tfunction->is_oneway()) {
- f_service_ << indent() << "}" << endl;
- } else {
- f_service_ << indent() << " TApplicationException x = new TApplicationException" << indent()
- << "(TApplicationException.ExceptionType.InternalError,\" Internal error.\");"
- << endl
- << indent() << " oprot.WriteMessageBegin(new TMessage(\"" << tfunction->get_name()
- << "\", TMessageType.Exception, seqid));" << endl
- << indent() << " x.Write(oprot);" << endl
- << indent() << "}" << endl;
- f_service_ << indent() << "oprot.WriteMessageEnd();" << endl
- << indent() << "oprot.Transport.Flush();" << endl;
- }
-
- scope_down(f_service_);
-
- f_service_ << endl;
-}
-
-void t_csharp_generator::generate_process_function_async(t_service* tservice, t_function* tfunction) {
- (void)tservice;
- indent(f_service_) << "public async Task " << tfunction->get_name()
- << "_ProcessAsync(int seqid, TProtocol iprot, TProtocol oprot)" << endl;
- scope_up(f_service_);
-
- string argsname = tfunction->get_name() + "_args";
- string resultname = tfunction->get_name() + "_result";
-
- f_service_ << indent() << argsname << " args = new " << argsname << "();" << endl
- << indent() << "args.Read(iprot);" << endl
- << indent() << "iprot.ReadMessageEnd();" << endl;
-
- t_struct* xs = tfunction->get_xceptions();
- const std::vector<t_field*>& xceptions = xs->get_members();
- vector<t_field*>::const_iterator x_iter;
-
- if (!tfunction->is_oneway()) {
- f_service_ << indent() << resultname << " result = new " << resultname << "();" << endl;
- }
-
- f_service_ << indent() << "try" << endl
- << indent() << "{" << endl;
- indent_up();
-
- if (xceptions.size() > 0) {
- f_service_ << indent() << "try" << endl
- << indent() << "{" << endl;
- indent_up();
- }
-
- t_struct* arg_struct = tfunction->get_arglist();
- const std::vector<t_field*>& fields = arg_struct->get_members();
- vector<t_field*>::const_iterator f_iter;
-
- f_service_ << indent();
- if (!tfunction->is_oneway() && !tfunction->get_returntype()->is_void()) {
- f_service_ << "result.Success = ";
- }
- f_service_ << "await iface_." << normalize_name(tfunction->get_name()) << "Async(";
- bool first = true;
- prepare_member_name_mapping(arg_struct);
- for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
- if (first) {
- first = false;
- }
- else {
- f_service_ << ", ";
- }
- f_service_ << "args." << prop_name(*f_iter);
- if (nullable_ && !type_can_be_null((*f_iter)->get_type())) {
- f_service_ << ".Value";
- }
- }
- cleanup_member_name_mapping(arg_struct);
- f_service_ << ");" << endl;
-
- prepare_member_name_mapping(xs, xs->get_members(), resultname);
- if (xceptions.size() > 0) {
- indent_down();
- f_service_ << indent() << "}" << endl;
- for (x_iter = xceptions.begin(); x_iter != xceptions.end(); ++x_iter) {
- f_service_ << indent() << "catch (" << type_name((*x_iter)->get_type(), false, false) << " "
- << (*x_iter)->get_name() << ")" << endl
- << indent() << "{" << endl;
- if (!tfunction->is_oneway()) {
- indent_up();
- f_service_ << indent() << "result." << prop_name(*x_iter) << " = " << (*x_iter)->get_name()
- << ";" << endl;
- indent_down();
- }
- f_service_ << indent() << "}" << endl;
- }
- }
- if (!tfunction->is_oneway()) {
- f_service_ << indent() << "oprot.WriteMessageBegin(new TMessage(\"" << tfunction->get_name()
- << "\", TMessageType.Reply, seqid)); " << endl;
- f_service_ << indent() << "result.Write(oprot);" << endl;
- }
- indent_down();
-
- cleanup_member_name_mapping(xs);
-
- f_service_ << indent() << "}" << endl
- << indent() << "catch (TTransportException)" << endl
- << indent() << "{" << endl
- << indent() << " throw;" << endl
- << indent() << "}" << endl
- << indent() << "catch (Exception ex)" << endl
- << indent() << "{" << endl
- << indent() << " Console.Error.WriteLine(\"Error occurred in processor:\");" << endl
- << indent() << " Console.Error.WriteLine(ex.ToString());" << endl;
-
- if (tfunction->is_oneway()) {
- f_service_ << indent() << "}" << endl;
- }
- else {
- f_service_ << indent() << " TApplicationException x = new TApplicationException" << indent()
- << "(TApplicationException.ExceptionType.InternalError,\" Internal error.\");"
- << endl
- << indent() << " oprot.WriteMessageBegin(new TMessage(\"" << tfunction->get_name()
- << "\", TMessageType.Exception, seqid));" << endl
- << indent() << " x.Write(oprot);" << endl
- << indent() << "}" << endl;
- f_service_ << indent() << "oprot.WriteMessageEnd();" << endl
- << indent() << "oprot.Transport.Flush();" << endl;
- }
-
- scope_down(f_service_);
-
- f_service_ << endl;
-}
-
-void t_csharp_generator::generate_csharp_union_reader(std::ostream& out, t_struct* tunion) {
- // Thanks to THRIFT-1768, we don't need to check for required fields in the union
- const vector<t_field*>& fields = tunion->get_members();
- vector<t_field*>::const_iterator f_iter;
-
- indent(out) << "public static " << tunion->get_name() << " Read(TProtocol iprot)" << endl;
- scope_up(out);
-
- out << indent() << "iprot.IncrementRecursionDepth();" << endl;
- out << indent() << "try" << endl;
- scope_up(out);
-
- indent(out) << tunion->get_name() << " retval;" << endl;
- indent(out) << "iprot.ReadStructBegin();" << endl;
- indent(out) << "TField field = iprot.ReadFieldBegin();" << endl;
- // we cannot have the first field be a stop -- we must have a single field defined
- indent(out) << "if (field.Type == TType.Stop)" << endl;
- scope_up(out);
- indent(out) << "iprot.ReadFieldEnd();" << endl;
- indent(out) << "retval = new ___undefined();" << endl;
- scope_down(out);
- indent(out) << "else" << endl;
- scope_up(out);
- indent(out) << "switch (field.ID)" << endl;
- scope_up(out);
-
- for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
- indent(out) << "case " << (*f_iter)->get_key() << ":" << endl;
- indent_up();
- indent(out) << "if (field.Type == " << type_to_enum((*f_iter)->get_type()) << ") {" << endl;
- indent_up();
-
- indent(out) << type_name((*f_iter)->get_type()) << " temp;" << endl;
- generate_deserialize_field(out, (*f_iter), "temp", true);
- indent(out) << "retval = new " << (*f_iter)->get_name() << "(temp);" << endl;
-
- indent_down();
- out << indent() << "} else { " << endl << indent() << " TProtocolUtil.Skip(iprot, field.Type);"
- << endl << indent() << " retval = new ___undefined();" << endl << indent() << "}" << endl
- << indent() << "break;" << endl;
- indent_down();
- }
-
- indent(out) << "default: " << endl;
- indent_up();
- indent(out) << "TProtocolUtil.Skip(iprot, field.Type);" << endl << indent()
- << "retval = new ___undefined();" << endl;
- indent(out) << "break;" << endl;
- indent_down();
-
- scope_down(out);
-
- indent(out) << "iprot.ReadFieldEnd();" << endl;
-
- indent(out) << "if (iprot.ReadFieldBegin().Type != TType.Stop)" << endl;
- scope_up(out);
- indent(out) << "throw new TProtocolException(TProtocolException.INVALID_DATA);" << endl;
- scope_down(out);
-
- // end of else for TStop
- scope_down(out);
- indent(out) << "iprot.ReadStructEnd();" << endl;
- indent(out) << "return retval;" << endl;
- indent_down();
-
- scope_down(out);
- out << indent() << "finally" << endl;
- scope_up(out);
- out << indent() << "iprot.DecrementRecursionDepth();" << endl;
- scope_down(out);
-
- indent(out) << "}" << endl << endl;
-}
-
-void t_csharp_generator::generate_deserialize_field(ostream& out,
- t_field* tfield,
- string prefix,
- bool is_propertyless) {
- t_type* type = tfield->get_type();
- while (type->is_typedef()) {
- type = ((t_typedef*)type)->get_type();
- }
-
- if (type->is_void()) {
- throw "CANNOT GENERATE DESERIALIZE CODE FOR void TYPE: " + prefix + tfield->get_name();
- }
-
- string name = prefix + (is_propertyless ? "" : prop_name(tfield));
-
- if (type->is_struct() || type->is_xception()) {
- generate_deserialize_struct(out, (t_struct*)type, name);
- } else if (type->is_container()) {
- generate_deserialize_container(out, type, name);
- } else if (type->is_base_type() || type->is_enum()) {
- indent(out) << name << " = ";
-
- if (type->is_enum()) {
- out << "(" << type_name(type, false, true) << ")";
- }
-
- out << "iprot.";
-
- if (type->is_base_type()) {
- t_base_type::t_base tbase = ((t_base_type*)type)->get_base();
- switch (tbase) {
- case t_base_type::TYPE_VOID:
- throw "compiler error: cannot serialize void field in a struct: " + name;
- break;
- case t_base_type::TYPE_STRING:
- if (type->is_binary()) {
- out << "ReadBinary();";
- } else {
- out << "ReadString();";
- }
- break;
- case t_base_type::TYPE_BOOL:
- out << "ReadBool();";
- break;
- case t_base_type::TYPE_I8:
- out << "ReadByte();";
- break;
- case t_base_type::TYPE_I16:
- out << "ReadI16();";
- break;
- case t_base_type::TYPE_I32:
- out << "ReadI32();";
- break;
- case t_base_type::TYPE_I64:
- out << "ReadI64();";
- break;
- case t_base_type::TYPE_DOUBLE:
- out << "ReadDouble();";
- break;
- default:
- throw "compiler error: no C# name for base type " + t_base_type::t_base_name(tbase);
- }
- } else if (type->is_enum()) {
- out << "ReadI32();";
- }
- out << endl;
- } else {
- printf("DO NOT KNOW HOW TO DESERIALIZE FIELD '%s' TYPE '%s'\n",
- tfield->get_name().c_str(),
- type_name(type).c_str());
- }
-}
-
-void t_csharp_generator::generate_deserialize_struct(ostream& out,
- t_struct* tstruct,
- string prefix) {
- if (union_ && tstruct->is_union()) {
- out << indent() << prefix << " = " << type_name(tstruct) << ".Read(iprot);" << endl;
- } else {
- out << indent() << prefix << " = new " << type_name(tstruct) << "();" << endl << indent()
- << prefix << ".Read(iprot);" << endl;
- }
-}
-
-void t_csharp_generator::generate_deserialize_container(ostream& out,
- t_type* ttype,
- string prefix) {
- scope_up(out);
-
- string obj;
-
- if (ttype->is_map()) {
- obj = tmp("_map");
- } else if (ttype->is_set()) {
- obj = tmp("_set");
- } else if (ttype->is_list()) {
- obj = tmp("_list");
- }
-
- indent(out) << prefix << " = new " << type_name(ttype, false, true) << "();" << endl;
- if (ttype->is_map()) {
- out << indent() << "TMap " << obj << " = iprot.ReadMapBegin();" << endl;
- } else if (ttype->is_set()) {
- out << indent() << "TSet " << obj << " = iprot.ReadSetBegin();" << endl;
- } else if (ttype->is_list()) {
- out << indent() << "TList " << obj << " = iprot.ReadListBegin();" << endl;
- }
-
- string i = tmp("_i");
- indent(out) << "for( int " << i << " = 0; " << i << " < " << obj << ".Count"
- << "; "
- << "++" << i << ")" << endl;
- scope_up(out);
-
- if (ttype->is_map()) {
- generate_deserialize_map_element(out, (t_map*)ttype, prefix);
- } else if (ttype->is_set()) {
- generate_deserialize_set_element(out, (t_set*)ttype, prefix);
- } else if (ttype->is_list()) {
- generate_deserialize_list_element(out, (t_list*)ttype, prefix);
- }
-
- scope_down(out);
-
- if (ttype->is_map()) {
- indent(out) << "iprot.ReadMapEnd();" << endl;
- } else if (ttype->is_set()) {
- indent(out) << "iprot.ReadSetEnd();" << endl;
- } else if (ttype->is_list()) {
- indent(out) << "iprot.ReadListEnd();" << endl;
- }
-
- scope_down(out);
-}
-
-void t_csharp_generator::generate_deserialize_map_element(ostream& out,
- t_map* tmap,
- string prefix) {
- string key = tmp("_key");
- string val = tmp("_val");
-
- t_field fkey(tmap->get_key_type(), key);
- t_field fval(tmap->get_val_type(), val);
-
- indent(out) << declare_field(&fkey) << endl;
- indent(out) << declare_field(&fval) << endl;
-
- generate_deserialize_field(out, &fkey);
- generate_deserialize_field(out, &fval);
-
- indent(out) << prefix << "[" << key << "] = " << val << ";" << endl;
-}
-
-void t_csharp_generator::generate_deserialize_set_element(ostream& out,
- t_set* tset,
- string prefix) {
- string elem = tmp("_elem");
- t_field felem(tset->get_elem_type(), elem);
-
- indent(out) << declare_field(&felem) << endl;
-
- generate_deserialize_field(out, &felem);
-
- indent(out) << prefix << ".Add(" << elem << ");" << endl;
-}
-
-void t_csharp_generator::generate_deserialize_list_element(ostream& out,
- t_list* tlist,
- string prefix) {
- string elem = tmp("_elem");
- t_field felem(tlist->get_elem_type(), elem);
-
- indent(out) << declare_field(&felem) << endl;
-
- generate_deserialize_field(out, &felem);
-
- indent(out) << prefix << ".Add(" << elem << ");" << endl;
-}
-
-void t_csharp_generator::generate_serialize_field(ostream& out,
- t_field* tfield,
- string prefix,
- bool is_element,
- bool is_propertyless) {
- t_type* type = tfield->get_type();
- while (type->is_typedef()) {
- type = ((t_typedef*)type)->get_type();
- }
-
- string name = prefix + (is_propertyless ? "" : prop_name(tfield));
-
- if (type->is_void()) {
- throw "CANNOT GENERATE SERIALIZE CODE FOR void TYPE: " + name;
- }
-
- if (type->is_struct() || type->is_xception()) {
- generate_serialize_struct(out, (t_struct*)type, name);
- } else if (type->is_container()) {
- generate_serialize_container(out, type, name);
- } else if (type->is_base_type() || type->is_enum()) {
- indent(out) << "oprot.";
-
- string nullable_name = nullable_ && !is_element && !field_is_required(tfield) ? name + ".Value"
- : name;
-
- if (type->is_base_type()) {
- t_base_type::t_base tbase = ((t_base_type*)type)->get_base();
- switch (tbase) {
- case t_base_type::TYPE_VOID:
- throw "compiler error: cannot serialize void field in a struct: " + name;
- break;
- case t_base_type::TYPE_STRING:
- if (type->is_binary()) {
- out << "WriteBinary(";
- } else {
- out << "WriteString(";
- }
- out << name << ");";
- break;
- case t_base_type::TYPE_BOOL:
- out << "WriteBool(" << nullable_name << ");";
- break;
- case t_base_type::TYPE_I8:
- out << "WriteByte(" << nullable_name << ");";
- break;
- case t_base_type::TYPE_I16:
- out << "WriteI16(" << nullable_name << ");";
- break;
- case t_base_type::TYPE_I32:
- out << "WriteI32(" << nullable_name << ");";
- break;
- case t_base_type::TYPE_I64:
- out << "WriteI64(" << nullable_name << ");";
- break;
- case t_base_type::TYPE_DOUBLE:
- out << "WriteDouble(" << nullable_name << ");";
- break;
- default:
- throw "compiler error: no C# name for base type " + t_base_type::t_base_name(tbase);
- }
- } else if (type->is_enum()) {
- out << "WriteI32((int)" << nullable_name << ");";
- }
- out << endl;
- } else {
- printf("DO NOT KNOW HOW TO SERIALIZE '%s%s' TYPE '%s'\n",
- prefix.c_str(),
- tfield->get_name().c_str(),
- type_name(type).c_str());
- }
-}
-
-void t_csharp_generator::generate_serialize_struct(ostream& out,
- t_struct* tstruct,
- string prefix) {
- (void)tstruct;
- out << indent() << prefix << ".Write(oprot);" << endl;
-}
-
-void t_csharp_generator::generate_serialize_container(ostream& out, t_type* ttype, string prefix) {
- scope_up(out);
-
- if (ttype->is_map()) {
- indent(out) << "oprot.WriteMapBegin(new TMap(" << type_to_enum(((t_map*)ttype)->get_key_type())
- << ", " << type_to_enum(((t_map*)ttype)->get_val_type()) << ", " << prefix
- << ".Count));" << endl;
- } else if (ttype->is_set()) {
- indent(out) << "oprot.WriteSetBegin(new TSet(" << type_to_enum(((t_set*)ttype)->get_elem_type())
- << ", " << prefix << ".Count));" << endl;
- } else if (ttype->is_list()) {
- indent(out) << "oprot.WriteListBegin(new TList("
- << type_to_enum(((t_list*)ttype)->get_elem_type()) << ", " << prefix << ".Count));"
- << endl;
- }
-
- string iter = tmp("_iter");
- if (ttype->is_map()) {
- indent(out) << "foreach (" << type_name(((t_map*)ttype)->get_key_type()) << " " << iter
- << " in " << prefix << ".Keys)";
- } else if (ttype->is_set()) {
- indent(out) << "foreach (" << type_name(((t_set*)ttype)->get_elem_type()) << " " << iter
- << " in " << prefix << ")";
- } else if (ttype->is_list()) {
- indent(out) << "foreach (" << type_name(((t_list*)ttype)->get_elem_type()) << " " << iter
- << " in " << prefix << ")";
- }
-
- out << endl;
- scope_up(out);
-
- if (ttype->is_map()) {
- generate_serialize_map_element(out, (t_map*)ttype, iter, prefix);
- } else if (ttype->is_set()) {
- generate_serialize_set_element(out, (t_set*)ttype, iter);
- } else if (ttype->is_list()) {
- generate_serialize_list_element(out, (t_list*)ttype, iter);
- }
-
- scope_down(out);
-
- if (ttype->is_map()) {
- indent(out) << "oprot.WriteMapEnd();" << endl;
- } else if (ttype->is_set()) {
- indent(out) << "oprot.WriteSetEnd();" << endl;
- } else if (ttype->is_list()) {
- indent(out) << "oprot.WriteListEnd();" << endl;
- }
-
- scope_down(out);
-}
-
-void t_csharp_generator::generate_serialize_map_element(ostream& out,
- t_map* tmap,
- string iter,
- string map) {
- t_field kfield(tmap->get_key_type(), iter);
- generate_serialize_field(out, &kfield, "", true);
- t_field vfield(tmap->get_val_type(), map + "[" + iter + "]");
- generate_serialize_field(out, &vfield, "", true);
-}
-
-void t_csharp_generator::generate_serialize_set_element(ostream& out, t_set* tset, string iter) {
- t_field efield(tset->get_elem_type(), iter);
- generate_serialize_field(out, &efield, "", true);
-}
-
-void t_csharp_generator::generate_serialize_list_element(ostream& out,
- t_list* tlist,
- string iter) {
- t_field efield(tlist->get_elem_type(), iter);
- generate_serialize_field(out, &efield, "", true);
-}
-
-void t_csharp_generator::generate_property(ostream& out,
- t_field* tfield,
- bool isPublic,
- bool generateIsset) {
- generate_csharp_property(out, tfield, isPublic, generateIsset, "_");
-}
-void t_csharp_generator::generate_csharp_property(ostream& out,
- t_field* tfield,
- bool isPublic,
- bool generateIsset,
- std::string fieldPrefix) {
- if ((serialize_ || wcf_) && isPublic) {
- indent(out) << "[DataMember(Order = 0)]" << endl;
- }
- bool has_default = field_has_default(tfield);
- bool is_required = field_is_required(tfield);
- if ((nullable_ && !has_default) || (is_required)) {
- indent(out) << (isPublic ? "public " : "private ")
- << type_name(tfield->get_type(), false, false, true, is_required) << " "
- << prop_name(tfield) << " { get; set; }" << endl;
- } else {
- indent(out) << (isPublic ? "public " : "private ")
- << type_name(tfield->get_type(), false, false, true) << " " << prop_name(tfield)
- << endl;
- scope_up(out);
- indent(out) << "get" << endl;
- scope_up(out);
- bool use_nullable = false;
- if (nullable_) {
- t_type* ttype = tfield->get_type();
- while (ttype->is_typedef()) {
- ttype = ((t_typedef*)ttype)->get_type();
- }
- if (ttype->is_base_type()) {
- use_nullable = ((t_base_type*)ttype)->get_base() != t_base_type::TYPE_STRING;
- } else if (ttype->is_enum()) {
- use_nullable = true;
- }
- }
- indent(out) << "return " << fieldPrefix + tfield->get_name() << ";" << endl;
- scope_down(out);
- indent(out) << "set" << endl;
- scope_up(out);
- if (use_nullable) {
- if (generateIsset) {
- indent(out) << "__isset." << normalize_name(tfield->get_name()) << " = value.HasValue;"
- << endl;
- }
- indent(out) << "if (value.HasValue) this." << fieldPrefix + tfield->get_name()
- << " = value.Value;" << endl;
- } else {
- if (generateIsset) {
- indent(out) << "__isset." << normalize_name(tfield->get_name()) << " = true;" << endl;
- }
- indent(out) << "this." << fieldPrefix + tfield->get_name() << " = value;" << endl;
- }
- scope_down(out);
- scope_down(out);
- }
- out << endl;
-}
-
-std::string t_csharp_generator::make_valid_csharp_identifier(std::string const& fromName) {
- std::string str = fromName;
- if (str.empty()) {
- return str;
- }
-
- // tests rely on this
- assert(('A' < 'Z') && ('a' < 'z') && ('0' < '9'));
-
- // if the first letter is a number, we add an additional underscore in front of it
- char c = str.at(0);
- if (('0' <= c) && (c <= '9')) {
- str = "_" + str;
- }
-
- // following chars: letter, number or underscore
- for (size_t i = 0; i < str.size(); ++i) {
- c = str.at(i);
- if ((('A' > c) || (c > 'Z')) && (('a' > c) || (c > 'z')) && (('0' > c) || (c > '9'))
- && ('_' != c)) {
- str.replace(i, 1, "_");
- }
- }
-
- return str;
-}
-
-void t_csharp_generator::cleanup_member_name_mapping(void* scope) {
- if( member_mapping_scopes.empty()) {
- throw "internal error: cleanup_member_name_mapping() no scope active";
- }
-
- member_mapping_scope& active = member_mapping_scopes.back();
- if (active.scope_member != scope) {
- throw "internal error: cleanup_member_name_mapping() called for wrong struct";
- }
-
- member_mapping_scopes.pop_back();
-}
-
-string t_csharp_generator::get_mapped_member_name(string name) {
- if( ! member_mapping_scopes.empty()) {
- member_mapping_scope& active = member_mapping_scopes.back();
- map<string, string>::iterator iter = active.mapping_table.find(name);
- if (active.mapping_table.end() != iter) {
- return iter->second;
- }
- }
-
- pverbose("no mapping for member %s\n", name.c_str());
- return name;
-}
-
-void t_csharp_generator::prepare_member_name_mapping(t_struct* tstruct) {
- prepare_member_name_mapping(tstruct, tstruct->get_members(), tstruct->get_name());
-}
-
-void t_csharp_generator::prepare_member_name_mapping(void* scope,
- const vector<t_field*>& members,
- const string& structname) {
- // begin new scope
- member_mapping_scope dummy;
- dummy.scope_member = 0;
- member_mapping_scopes.push_back(dummy);
- member_mapping_scope& active = member_mapping_scopes.back();
- active.scope_member = scope;
-
- // current C# generator policy:
- // - prop names are always rendered with an Uppercase first letter
- // - struct names are used as given
- std::set<std::string> used_member_names;
- vector<t_field*>::const_iterator iter;
-
- // prevent name conflicts with struct (CS0542 error)
- used_member_names.insert(structname);
-
- // prevent name conflicts with known methods (THRIFT-2942)
- used_member_names.insert("Read");
- used_member_names.insert("Write");
-
- for (iter = members.begin(); iter != members.end(); ++iter) {
- string oldname = (*iter)->get_name();
- string newname = prop_name(*iter, true);
- while (true) {
-
- // new name conflicts with another member
- if (used_member_names.find(newname) != used_member_names.end()) {
- pverbose("struct %s: member %s conflicts with another member\n",
- structname.c_str(),
- newname.c_str());
- newname += '_';
- continue;
- }
-
- // add always, this helps us to detect edge cases like
- // different spellings ("foo" and "Foo") within the same struct
- pverbose("struct %s: member mapping %s => %s\n",
- structname.c_str(),
- oldname.c_str(),
- newname.c_str());
- active.mapping_table[oldname] = newname;
- used_member_names.insert(newname);
- break;
- }
- }
-}
-
-std::string t_csharp_generator::prop_name(t_field* tfield, bool suppress_mapping) {
- string name(tfield->get_name());
- if (suppress_mapping) {
- name[0] = toupper(name[0]);
- } else {
- name = get_mapped_member_name(name);
- }
- return name;
-}
-
-string t_csharp_generator::type_name(t_type* ttype,
- bool in_container,
- bool in_init,
- bool in_param,
- bool is_required) {
- (void)in_init;
- while (ttype->is_typedef()) {
- ttype = ((t_typedef*)ttype)->get_type();
- }
-
- if (ttype->is_base_type()) {
- return base_type_name((t_base_type*)ttype, in_container, in_param, is_required);
- } else if (ttype->is_map()) {
- t_map* tmap = (t_map*)ttype;
- return "Dictionary<" + type_name(tmap->get_key_type(), true) + ", "
- + type_name(tmap->get_val_type(), true) + ">";
- } else if (ttype->is_set()) {
- t_set* tset = (t_set*)ttype;
- return "THashSet<" + type_name(tset->get_elem_type(), true) + ">";
- } else if (ttype->is_list()) {
- t_list* tlist = (t_list*)ttype;
- return "List<" + type_name(tlist->get_elem_type(), true) + ">";
- }
-
- t_program* program = ttype->get_program();
- string postfix = (!is_required && nullable_ && in_param && ttype->is_enum()) ? "?" : "";
- if (program != NULL && program != program_) {
- string ns = program->get_namespace("csharp");
- if (!ns.empty()) {
- return ns + "." + normalize_name(ttype->get_name()) + postfix;
- }
- }
-
- return normalize_name(ttype->get_name()) + postfix;
-}
-
-string t_csharp_generator::base_type_name(t_base_type* tbase,
- bool in_container,
- bool in_param,
- bool is_required) {
- (void)in_container;
- string postfix = (!is_required && nullable_ && in_param) ? "?" : "";
- switch (tbase->get_base()) {
- case t_base_type::TYPE_VOID:
- return "void";
- case t_base_type::TYPE_STRING:
- if (tbase->is_binary()) {
- return "byte[]";
- } else {
- return "string";
- }
- case t_base_type::TYPE_BOOL:
- return "bool" + postfix;
- case t_base_type::TYPE_I8:
- return "sbyte" + postfix;
- case t_base_type::TYPE_I16:
- return "short" + postfix;
- case t_base_type::TYPE_I32:
- return "int" + postfix;
- case t_base_type::TYPE_I64:
- return "long" + postfix;
- case t_base_type::TYPE_DOUBLE:
- return "double" + postfix;
- default:
- throw "compiler error: no C# name for base type " + t_base_type::t_base_name(tbase->get_base());
- }
-}
-
-string t_csharp_generator::declare_field(t_field* tfield, bool init, std::string prefix) {
- string result = type_name(tfield->get_type()) + " " + prefix + tfield->get_name();
- if (init) {
- t_type* ttype = tfield->get_type();
- while (ttype->is_typedef()) {
- ttype = ((t_typedef*)ttype)->get_type();
- }
- if (ttype->is_base_type() && field_has_default(tfield)) {
- std::ofstream dummy;
- result += " = " + render_const_value(dummy, tfield->get_name(), ttype, tfield->get_value());
- } else if (ttype->is_base_type()) {
- t_base_type::t_base tbase = ((t_base_type*)ttype)->get_base();
- switch (tbase) {
- case t_base_type::TYPE_VOID:
- throw "NO T_VOID CONSTRUCT";
- case t_base_type::TYPE_STRING:
- result += " = null";
- break;
- case t_base_type::TYPE_BOOL:
- result += " = false";
- break;
- case t_base_type::TYPE_I8:
- case t_base_type::TYPE_I16:
- case t_base_type::TYPE_I32:
- case t_base_type::TYPE_I64:
- result += " = 0";
- break;
- case t_base_type::TYPE_DOUBLE:
- result += " = (double)0";
- break;
- }
- } else if (ttype->is_enum()) {
- result += " = (" + type_name(ttype, false, true) + ")0";
- } else if (ttype->is_container()) {
- result += " = new " + type_name(ttype, false, true) + "()";
- } else {
- result += " = new " + type_name(ttype, false, true) + "()";
- }
- }
- return result + ";";
-}
-
-string t_csharp_generator::function_signature(t_function* tfunction, string prefix) {
- t_type* ttype = tfunction->get_returntype();
- return type_name(ttype) + " " + normalize_name(prefix + tfunction->get_name()) + "("
- + argument_list(tfunction->get_arglist()) + ")";
-}
-
-string t_csharp_generator::function_signature_async_begin(t_function* tfunction, string prefix) {
- string comma = (tfunction->get_arglist()->get_members().size() > 0 ? ", " : "");
- return "IAsyncResult " + normalize_name(prefix + tfunction->get_name())
- + "(AsyncCallback callback, object state" + comma + argument_list(tfunction->get_arglist())
- + ")";
-}
-
-string t_csharp_generator::function_signature_async_end(t_function* tfunction, string prefix) {
- t_type* ttype = tfunction->get_returntype();
- return type_name(ttype) + " " + normalize_name(prefix + tfunction->get_name())
- + "(IAsyncResult asyncResult)";
-}
-
-string t_csharp_generator::function_signature_async(t_function* tfunction, string prefix) {
- t_type* ttype = tfunction->get_returntype();
- string task = "Task";
- if (!ttype->is_void())
- task += "<" + type_name(ttype) + ">";
- return task + " " + normalize_name(prefix + tfunction->get_name()) + "Async("
- + argument_list(tfunction->get_arglist()) + ")";
-}
-
-string t_csharp_generator::argument_list(t_struct* tstruct) {
- string result = "";
- const vector<t_field*>& fields = tstruct->get_members();
- vector<t_field*>::const_iterator f_iter;
- bool first = true;
- for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
- if (first) {
- first = false;
- } else {
- result += ", ";
- }
- result += type_name((*f_iter)->get_type()) + " " + normalize_name((*f_iter)->get_name());
- }
- return result;
-}
-
-string t_csharp_generator::type_to_enum(t_type* type) {
- while (type->is_typedef()) {
- type = ((t_typedef*)type)->get_type();
- }
-
- if (type->is_base_type()) {
- t_base_type::t_base tbase = ((t_base_type*)type)->get_base();
- switch (tbase) {
- case t_base_type::TYPE_VOID:
- throw "NO T_VOID CONSTRUCT";
- case t_base_type::TYPE_STRING:
- return "TType.String";
- case t_base_type::TYPE_BOOL:
- return "TType.Bool";
- case t_base_type::TYPE_I8:
- return "TType.Byte";
- case t_base_type::TYPE_I16:
- return "TType.I16";
- case t_base_type::TYPE_I32:
- return "TType.I32";
- case t_base_type::TYPE_I64:
- return "TType.I64";
- case t_base_type::TYPE_DOUBLE:
- return "TType.Double";
- }
- } else if (type->is_enum()) {
- return "TType.I32";
- } else if (type->is_struct() || type->is_xception()) {
- return "TType.Struct";
- } else if (type->is_map()) {
- return "TType.Map";
- } else if (type->is_set()) {
- return "TType.Set";
- } else if (type->is_list()) {
- return "TType.List";
- }
-
- throw "INVALID TYPE IN type_to_enum: " + type->get_name();
-}
-
-void t_csharp_generator::generate_csharp_docstring_comment(ostream& out, string contents) {
- generate_docstring_comment(out, "/// <summary>\n", "/// ", contents, "/// </summary>\n");
-}
-
-void t_csharp_generator::generate_csharp_doc(ostream& out, t_field* field) {
- if (field->get_type()->is_enum()) {
- string combined_message = field->get_doc() + "\n<seealso cref=\""
- + get_enum_class_name(field->get_type()) + "\"/>";
- generate_csharp_docstring_comment(out, combined_message);
- } else {
- generate_csharp_doc(out, (t_doc*)field);
- }
-}
-
-void t_csharp_generator::generate_csharp_doc(ostream& out, t_doc* tdoc) {
- if (tdoc->has_doc()) {
- generate_csharp_docstring_comment(out, tdoc->get_doc());
- }
-}
-
-void t_csharp_generator::generate_csharp_doc(ostream& out, t_function* tfunction) {
- if (tfunction->has_doc()) {
- stringstream ps;
- const vector<t_field*>& fields = tfunction->get_arglist()->get_members();
- vector<t_field*>::const_iterator p_iter;
- for (p_iter = fields.begin(); p_iter != fields.end(); ++p_iter) {
- t_field* p = *p_iter;
- ps << "\n<param name=\"" << p->get_name() << "\">";
- if (p->has_doc()) {
- std::string str = p->get_doc();
- str.erase(std::remove(str.begin(), str.end(), '\n'),
- str.end()); // remove the newlines that appear from the parser
- ps << str;
- }
- ps << "</param>";
- }
- generate_docstring_comment(out,
- "",
- "/// ",
- "<summary>\n" + tfunction->get_doc() + "</summary>" + ps.str(),
- "");
- }
-}
-
-std::string t_csharp_generator::get_enum_class_name(t_type* type) {
- string package = "";
- t_program* program = type->get_program();
- if (program != NULL && program != program_) {
- package = program->get_namespace("csharp") + ".";
- }
- return package + type->get_name();
-}
-
-
-THRIFT_REGISTER_GENERATOR(
- csharp,
- "C#",
- " async: Adds Async support using Task.Run.\n"
- " wcf: Adds bindings for WCF to generated classes.\n"
- " serial: Add serialization support to generated classes.\n"
- " nullable: Use nullable types for properties.\n"
- " hashcode: Generate a hashcode and equals implementation for classes.\n"
- " union: Use new union typing, which includes a static read function for union "
- "types.\n")
diff --git a/compiler/cpp/src/thrift/generate/t_generator.cc b/compiler/cpp/src/thrift/generate/t_generator.cc
index 77afeba7f..3059fb141 100644
--- a/compiler/cpp/src/thrift/generate/t_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_generator.cc
@@ -234,10 +234,7 @@ t_generator* t_generator_registry::get_generator(t_program* program,
gen_map_t& the_map = get_generator_map();
gen_map_t::iterator iter = the_map.find(language);
- if (language == "csharp") {
- pwarning(1, "The '%s' target is deprecated. Consider moving to 'netstd' instead.", language.c_str());
- }
- else if (language == "netcore") {
+ if ((language == "csharp") || (language == "netcore")) {
failure("The '%s' target is no longer available. Use 'netstd' instead.", language.c_str());
}
else if (language == "as3") {
diff --git a/compiler/cpp/src/thrift/main.cc b/compiler/cpp/src/thrift/main.cc
index 1ba8234a2..50bdcea46 100644
--- a/compiler/cpp/src/thrift/main.cc
+++ b/compiler/cpp/src/thrift/main.cc
@@ -656,7 +656,7 @@ void error_unsupported_namespace_decl(const char* old_form, const char* new_form
* Prints the version number
*/
void version() {
- printf("Thrift version %s (custom build)\n", THRIFT_VERSION);
+ printf("Thrift version %s\n", THRIFT_VERSION);
}
/**
diff --git a/compiler/cpp/src/thrift/thriftl.ll b/compiler/cpp/src/thrift/thriftl.ll
index bdb4fb040..377351649 100644
--- a/compiler/cpp/src/thrift/thriftl.ll
+++ b/compiler/cpp/src/thrift/thriftl.ll
@@ -207,7 +207,6 @@ literal_begin (['\"])
"cpp_include" { return tok_cpp_include; }
"cpp_type" { return tok_cpp_type; }
"java_package" { error_unsupported_namespace_decl("java_package", "java"); /* do nothing */ }
-"csharp_namespace" { error_unsupported_namespace_decl("csharp"); /* do nothing */ }
"delphi_namespace" { error_unsupported_namespace_decl("delphi"); /* do nothing */ }
"php_namespace" { error_unsupported_namespace_decl("php"); /* do nothing */ }
"py_module" { error_unsupported_namespace_decl("py_module", "py"); /* do nothing */ }
diff --git a/compiler/cpp/tests/CMakeLists.txt b/compiler/cpp/tests/CMakeLists.txt
index 7798c15f1..924e1675c 100644
--- a/compiler/cpp/tests/CMakeLists.txt
+++ b/compiler/cpp/tests/CMakeLists.txt
@@ -101,7 +101,6 @@ THRIFT_ADD_COMPILER(as3 "Enable compiler for ActionScript 3" OFF)
THRIFT_ADD_COMPILER(c_glib "Enable compiler for C with Glib" OFF)
THRIFT_ADD_COMPILER(cl "Enable compiler for Common LISP" OFF)
THRIFT_ADD_COMPILER(cpp "Enable compiler for C++" OFF)
-THRIFT_ADD_COMPILER(csharp "Enable compiler for C#" OFF)
THRIFT_ADD_COMPILER(d "Enable compiler for D" OFF)
THRIFT_ADD_COMPILER(dart "Enable compiler for Dart" OFF)
THRIFT_ADD_COMPILER(delphi "Enable compiler for Delphi" OFF)
diff --git a/lib/csharp/Makefile.am b/lib/csharp/Makefile.am
deleted file mode 100644
index cc2bbc96c..000000000
--- a/lib/csharp/Makefile.am
+++ /dev/null
@@ -1,114 +0,0 @@
-#
-# 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.
-#
-
-SUBDIRS = . test/Multiplex
-
-THRIFTCODE = \
- src/Collections/THashSet.cs \
- src/Collections/TCollections.cs \
- src/Properties/AssemblyInfo.cs \
- src/Protocol/TAbstractBase.cs \
- src/Protocol/TBase.cs \
- src/Protocol/TBase64Utils.cs \
- src/Protocol/TJSONProtocol.cs \
- src/Protocol/TProtocolException.cs \
- src/Protocol/TProtocolFactory.cs \
- src/Protocol/TList.cs \
- src/Protocol/TSet.cs \
- src/Protocol/TMap.cs \
- src/Protocol/TProtocolUtil.cs \
- src/Protocol/TMessageType.cs \
- src/Protocol/TProtocol.cs \
- src/Protocol/TProtocolDecorator.cs \
- src/Protocol/TMultiplexedProtocol.cs \
- src/Protocol/TMultiplexedProcessor.cs \
- src/Protocol/TType.cs \
- src/Protocol/TField.cs \
- src/Protocol/TMessage.cs \
- src/Protocol/TStruct.cs \
- src/Protocol/TBinaryProtocol.cs \
- src/Protocol/TCompactProtocol.cs \
- src/Server/TThreadedServer.cs \
- src/Server/TThreadPoolServer.cs \
- src/Server/TSimpleServer.cs \
- src/Server/TServer.cs \
- src/Server/TServerEventHandler.cs \
- src/Transport/TBufferedTransport.cs \
- src/Transport/TTransport.cs \
- src/Transport/TSocket.cs \
- src/Transport/TSocketVersionizer.cs \
- src/Transport/TTransportException.cs \
- src/Transport/TStreamTransport.cs \
- src/Transport/TFramedTransport.cs \
- src/Transport/TServerTransport.cs \
- src/Transport/TServerSocket.cs \
- src/Transport/TTransportFactory.cs \
- src/Transport/THttpClient.cs \
- src/Transport/THttpHandler.cs \
- src/Transport/TMemoryBuffer.cs \
- src/Transport/TNamedPipeClientTransport.cs \
- src/Transport/TNamedPipeServerTransport.cs \
- src/Transport/TTLSSocket.cs \
- src/Transport/TTLSServerSocket.cs \
- src/TProcessor.cs \
- src/TProcessorFactory.cs \
- src/TSingletonProcessorFactory.cs \
- src/TPrototypeProcessorFactory.cs \
- src/TControllingHandler.cs \
- src/TException.cs \
- src/TApplicationException.cs
-
-if MONO_MCS
-export CSC = mcs
-else
-export CSC = gmcs
-endif
-
-if NET_2_0
-export CSC_DEFINES = -d:NET_2_0
-endif
-
-all-local: Thrift.dll Thrift.45.dll
-
-Thrift.dll: $(THRIFTCODE)
- $(CSC) $(CSC_DEFINES) -out:$@ -target:library -reference:System.Web $(THRIFTCODE)
-
-Thrift.45.dll: $(THRIFTCODE)
- $(CSC) $(CSC_DEFINES) -out:$@ -target:library -reference:System.Web $(THRIFTCODE)
-
-CLEANFILES = \
- Thrift.dll \
- Thrift.45.dll
-
-DISTCLEANFILES = \
- Makefile.in
-
-EXTRA_DIST = \
- $(THRIFTCODE) \
- ThriftMSBuildTask \
- src/Thrift.csproj \
- src/Thrift.45.csproj \
- src/Thrift.sln \
- src/Net35/ExtensionsNet35.cs \
- src/Transport/TSilverlightSocket.cs \
- src/Transport/THttpTaskAsyncHandler.cs \
- src/TAsyncProcessor.cs \
- test \
- coding_standards.md \
- README.md
diff --git a/lib/csharp/README.md b/lib/csharp/README.md
deleted file mode 100644
index 5fc14cb3c..000000000
--- a/lib/csharp/README.md
+++ /dev/null
@@ -1,32 +0,0 @@
-Thrift C# Software Library
-
-Deprecation notice
-=======
-
-Per [THRIFT-4723](https://issues.apache.org/jira/browse/THRIFT-4723), both CSharp and Netcore targets are deprecated
-and will be removed with the next release. Migrate to the [NetStd language target](../netstd/README.md) instead.
-
-License
-=======
-
-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 Thrift with C#
-====================
-
-Thrift requires Mono >= 1.2.6 or .NET framework >= 3.5
diff --git a/lib/csharp/ThriftMSBuildTask/Properties/AssemblyInfo.cs b/lib/csharp/ThriftMSBuildTask/Properties/AssemblyInfo.cs
deleted file mode 100644
index f5f000059..000000000
--- a/lib/csharp/ThriftMSBuildTask/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * 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.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-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("ThriftMSBuildTask")]
-[assembly: AssemblyDescription("MSBuild Task to generate csharp from .thrift files, and compile the code into a library: ThriftImpl.dll")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("The Apache Software Foundation")]
-[assembly: AssemblyProduct("ThriftMSBuildTask")]
-[assembly: AssemblyCopyright("The Apache Software Foundation")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-//@TODO where to put License information?
-
-// 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("5095e09d-7b95-4be1-b250-e1c1db1c485e")]
-
-// 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("0.14.0.*")]
-[assembly: AssemblyFileVersion("0.14.0.*")]
diff --git a/lib/csharp/ThriftMSBuildTask/ThriftBuild.cs b/lib/csharp/ThriftMSBuildTask/ThriftBuild.cs
deleted file mode 100644
index 4e6d30112..000000000
--- a/lib/csharp/ThriftMSBuildTask/ThriftBuild.cs
+++ /dev/null
@@ -1,246 +0,0 @@
-/**
- * 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.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using Microsoft.Build.Framework;
-using Microsoft.Build.Utilities;
-using Microsoft.Build.Tasks;
-using System.IO;
-using System.Diagnostics;
-
-namespace ThriftMSBuildTask
-{
- /// <summary>
- /// MSBuild Task to generate csharp from .thrift files, and compile the code into a library: ThriftImpl.dll
- /// </summary>
- public class ThriftBuild : Task
- {
- /// <summary>
- /// The full path to the thrift.exe compiler
- /// </summary>
- [Required]
- public ITaskItem ThriftExecutable
- {
- get;
- set;
- }
-
- /// <summary>
- /// The full path to a thrift.dll C# library
- /// </summary>
- [Required]
- public ITaskItem ThriftLibrary
- {
- get;
- set;
- }
-
- /// <summary>
- /// A direcotry containing .thrift files
- /// </summary>
- [Required]
- public ITaskItem ThriftDefinitionDir
- {
- get;
- set;
- }
-
- /// <summary>
- /// The name of the auto-gen and compiled thrift library. It will placed in
- /// the same directory as ThriftLibrary
- /// </summary>
- [Required]
- public ITaskItem OutputName
- {
- get;
- set;
- }
-
- /// <summary>
- /// The full path to the compiled ThriftLibrary. This allows msbuild tasks to use this
- /// output as a variable for use elsewhere.
- /// </summary>
- [Output]
- public ITaskItem ThriftImplementation
- {
- get { return thriftImpl; }
- }
-
- private ITaskItem thriftImpl;
- private const string lastCompilationName = "LAST_COMP_TIMESTAMP";
-
- //use the Message Build Task to write something to build log
- private void LogMessage(string text, MessageImportance importance)
- {
- Message m = new Message();
- m.Text = text;
- m.Importance = importance.ToString();
- m.BuildEngine = this.BuildEngine;
- m.Execute();
- }
-
- //recursively find .cs files in srcDir, paths should initially be non-null and empty
- private void FindSourcesHelper(string srcDir, List<string> paths)
- {
- string[] files = Directory.GetFiles(srcDir, "*.cs");
- foreach (string f in files)
- {
- paths.Add(f);
- }
- string[] dirs = Directory.GetDirectories(srcDir);
- foreach (string dir in dirs)
- {
- FindSourcesHelper(dir, paths);
- }
- }
-
- /// <summary>
- /// Quote paths with spaces
- /// </summary>
- private string SafePath(string path)
- {
- if (path.Contains(' ') && !path.StartsWith("\""))
- {
- return "\"" + path + "\"";
- }
- return path;
- }
-
- private ITaskItem[] FindSources(string srcDir)
- {
- List<string> files = new List<string>();
- FindSourcesHelper(srcDir, files);
- ITaskItem[] items = new ITaskItem[files.Count];
- for (int i = 0; i < items.Length; i++)
- {
- items[i] = new TaskItem(files[i]);
- }
- return items;
- }
-
- private string LastWriteTime(string defDir)
- {
- string[] files = Directory.GetFiles(defDir, "*.thrift");
- DateTime d = (new DirectoryInfo(defDir)).LastWriteTime;
- foreach(string file in files)
- {
- FileInfo f = new FileInfo(file);
- DateTime curr = f.LastWriteTime;
- if (DateTime.Compare(curr, d) > 0)
- {
- d = curr;
- }
- }
- return d.ToFileTimeUtc().ToString();
- }
-
- public override bool Execute()
- {
- string defDir = SafePath(ThriftDefinitionDir.ItemSpec);
- //look for last compilation timestamp
- string lastBuildPath = Path.Combine(defDir, lastCompilationName);
- DirectoryInfo defDirInfo = new DirectoryInfo(defDir);
- string lastWrite = LastWriteTime(defDir);
- if (File.Exists(lastBuildPath))
- {
- string lastComp = File.ReadAllText(lastBuildPath);
- //don't recompile if the thrift library has been updated since lastComp
- FileInfo f = new FileInfo(ThriftLibrary.ItemSpec);
- string thriftLibTime = f.LastWriteTimeUtc.ToFileTimeUtc().ToString();
- if (lastComp.CompareTo(thriftLibTime) < 0)
- {
- //new thrift library, do a compile
- lastWrite = thriftLibTime;
- }
- else if (lastComp == lastWrite || (lastComp == thriftLibTime && lastComp.CompareTo(lastWrite) > 0))
- {
- //the .thrift dir hasn't been written to since last compilation, don't need to do anything
- LogMessage("ThriftImpl up-to-date", MessageImportance.High);
- return true;
- }
- }
-
- //find the directory of the thriftlibrary (that's where output will go)
- FileInfo thriftLibInfo = new FileInfo(SafePath(ThriftLibrary.ItemSpec));
- string thriftDir = thriftLibInfo.Directory.FullName;
-
- string genDir = Path.Combine(thriftDir, "gen-csharp");
- if (Directory.Exists(genDir))
- {
- try
- {
- Directory.Delete(genDir, true);
- }
- catch { /*eh i tried, just over-write now*/}
- }
-
- //run the thrift executable to generate C#
- foreach (string thriftFile in Directory.GetFiles(defDir, "*.thrift"))
- {
- LogMessage("Generating code for: " + thriftFile, MessageImportance.Normal);
- Process p = new Process();
- p.StartInfo.FileName = SafePath(ThriftExecutable.ItemSpec);
- p.StartInfo.Arguments = "--gen csharp -o " + SafePath(thriftDir) + " -r " + thriftFile;
- p.StartInfo.UseShellExecute = false;
- p.StartInfo.CreateNoWindow = true;
- p.StartInfo.RedirectStandardOutput = false;
- p.Start();
- p.WaitForExit();
- if (p.ExitCode != 0)
- {
- LogMessage("thrift.exe failed to compile " + thriftFile, MessageImportance.High);
- return false;
- }
- if (p.ExitCode != 0)
- {
- LogMessage("thrift.exe failed to compile " + thriftFile, MessageImportance.High);
- return false;
- }
- }
-
- Csc csc = new Csc();
- csc.TargetType = "library";
- csc.References = new ITaskItem[] { new TaskItem(ThriftLibrary.ItemSpec) };
- csc.EmitDebugInformation = true;
- string outputPath = Path.Combine(thriftDir, OutputName.ItemSpec);
- csc.OutputAssembly = new TaskItem(outputPath);
- csc.Sources = FindSources(Path.Combine(thriftDir, "gen-csharp"));
- csc.BuildEngine = this.BuildEngine;
- LogMessage("Compiling generated cs...", MessageImportance.Normal);
- if (!csc.Execute())
- {
- return false;
- }
-
- //write file to defDir to indicate a build was successfully completed
- File.WriteAllText(lastBuildPath, lastWrite);
-
- thriftImpl = new TaskItem(outputPath);
-
- return true;
- }
- }
-}
diff --git a/lib/csharp/ThriftMSBuildTask/ThriftMSBuildTask.csproj b/lib/csharp/ThriftMSBuildTask/ThriftMSBuildTask.csproj
deleted file mode 100644
index 25899705c..000000000
--- a/lib/csharp/ThriftMSBuildTask/ThriftMSBuildTask.csproj
+++ /dev/null
@@ -1,118 +0,0 @@
-<?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="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProductVersion>9.0.21022</ProductVersion>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{EC0A0231-66EA-4593-A792-C6CA3BB8668E}</ProjectGuid>
- <OutputType>Library</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <RootNamespace>ThriftMSBuildTask</RootNamespace>
- <AssemblyName>ThriftMSBuildTask</AssemblyName>
- <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
- <FileAlignment>512</FileAlignment>
- <FileUpgradeFlags>
- </FileUpgradeFlags>
- <OldToolsVersion>3.5</OldToolsVersion>
- <UpgradeBackupLocation />
- <PublishUrl>publish\</PublishUrl>
- <Install>true</Install>
- <InstallFrom>Disk</InstallFrom>
- <UpdateEnabled>false</UpdateEnabled>
- <UpdateMode>Foreground</UpdateMode>
- <UpdateInterval>7</UpdateInterval>
- <UpdateIntervalUnits>Days</UpdateIntervalUnits>
- <UpdatePeriodically>false</UpdatePeriodically>
- <UpdateRequired>false</UpdateRequired>
- <MapFileExtensions>true</MapFileExtensions>
- <ApplicationRevision>0</ApplicationRevision>
- <ApplicationVersion>0.14.0.0</ApplicationVersion>
- <IsWebBootstrapper>false</IsWebBootstrapper>
- <UseApplicationTrust>false</UseApplicationTrust>
- <BootstrapperEnabled>true</BootstrapperEnabled>
- </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>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </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>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <ItemGroup>
- <Reference Include="Microsoft.Build.Framework" />
- <Reference Include="Microsoft.Build.Tasks" />
- <Reference Include="Microsoft.Build.Utilities" />
- <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" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="ThriftBuild.cs" />
- <Compile Include="Properties\AssemblyInfo.cs" />
- </ItemGroup>
- <ItemGroup>
- <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
- <Install>false</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5 SP1</ProductName>
- <Install>true</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
- <Visible>False</Visible>
- <ProductName>Windows Installer 3.1</ProductName>
- <Install>true</Install>
- </BootstrapperPackage>
- </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>
diff --git a/lib/csharp/coding_standards.md b/lib/csharp/coding_standards.md
deleted file mode 100644
index dc87190bf..000000000
--- a/lib/csharp/coding_standards.md
+++ /dev/null
@@ -1,6 +0,0 @@
-## C# Coding Standards
-
-Please follow:
- * [Thrift General Coding Standards](/doc/coding_standards.md)
- * [MSDN C# Coding Conventions](http://msdn.microsoft.com/en-us/library/ff926074.aspx)
- * [C# Coding Guidelines](http://csharpguidelines.codeplex.com/)
diff --git a/lib/csharp/src/Collections/TCollections.cs b/lib/csharp/src/Collections/TCollections.cs
deleted file mode 100644
index 84afb6a62..000000000
--- a/lib/csharp/src/Collections/TCollections.cs
+++ /dev/null
@@ -1,94 +0,0 @@
-/**
- * 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;
-
-namespace Thrift.Collections
-{
- public class TCollections
- {
- /// <summary>
- /// This will return true if the two collections are value-wise the same.
- /// If the collection contains a collection, the collections will be compared using this method.
- /// </summary>
- public static bool Equals (IEnumerable first, IEnumerable second)
- {
- if (first == null && second == null)
- {
- return true;
- }
- if (first == null || second == null)
- {
- return false;
- }
- IEnumerator fiter = first.GetEnumerator ();
- IEnumerator siter = second.GetEnumerator ();
-
- bool fnext = fiter.MoveNext ();
- bool snext = siter.MoveNext ();
- while (fnext && snext)
- {
- IEnumerable fenum = fiter.Current as IEnumerable;
- IEnumerable senum = siter.Current as IEnumerable;
- if (fenum != null && senum != null)
- {
- if (!Equals(fenum, senum))
- {
- return false;
- }
- }
- else if (fenum == null ^ senum == null)
- {
- return false;
- }
- else if (!Equals(fiter.Current, siter.Current))
- {
- return false;
- }
- fnext = fiter.MoveNext();
- snext = siter.MoveNext();
- }
-
- return fnext == snext;
- }
-
- /// <summary>
- /// This returns a hashcode based on the value of the enumerable.
- /// </summary>
- public static int GetHashCode (IEnumerable enumerable)
- {
- if (enumerable == null)
- {
- return 0;
- }
-
- int hashcode = 0;
- foreach (object obj in enumerable)
- {
- IEnumerable enum2 = obj as IEnumerable;
- int objHash = enum2 == null ? obj.GetHashCode () : GetHashCode (enum2);
- unchecked
- {
- hashcode = (hashcode * 397) ^ (objHash);
- }
- }
- return hashcode;
- }
- }
-}
diff --git a/lib/csharp/src/Collections/THashSet.cs b/lib/csharp/src/Collections/THashSet.cs
deleted file mode 100644
index e29271a93..000000000
--- a/lib/csharp/src/Collections/THashSet.cs
+++ /dev/null
@@ -1,160 +0,0 @@
-/**
- * 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;
-using System.Collections.Generic;
-
-#if SILVERLIGHT
-using System.Runtime.Serialization;
-#endif
-
-namespace Thrift.Collections
-{
-#if SILVERLIGHT
- [DataContract]
-#else
- [Serializable]
-#endif
- public class THashSet<T> : ICollection<T>
- {
-#if NET_2_0 || SILVERLIGHT
-#if SILVERLIGHT
- [DataMember]
-#endif
- TDictSet<T> set = new TDictSet<T>();
-#else
- HashSet<T> set = new HashSet<T>();
-#endif
- public int Count
- {
- get { return set.Count; }
- }
-
- public bool IsReadOnly
- {
- get { return false; }
- }
-
- public void Add(T item)
- {
- set.Add(item);
- }
-
- public void Clear()
- {
- set.Clear();
- }
-
- public bool Contains(T item)
- {
- return set.Contains(item);
- }
-
- public void CopyTo(T[] array, int arrayIndex)
- {
- set.CopyTo(array, arrayIndex);
- }
-
- public IEnumerator GetEnumerator()
- {
- return set.GetEnumerator();
- }
-
- IEnumerator<T> IEnumerable<T>.GetEnumerator()
- {
- return ((IEnumerable<T>)set).GetEnumerator();
- }
-
- public bool Remove(T item)
- {
- return set.Remove(item);
- }
-
-#if NET_2_0 || SILVERLIGHT
-#if SILVERLIGHT
- [DataContract]
-#endif
- private class TDictSet<V> : ICollection<V>
- {
-#if SILVERLIGHT
- [DataMember]
-#endif
- Dictionary<V, TDictSet<V>> dict = new Dictionary<V, TDictSet<V>>();
-
- public int Count
- {
- get { return dict.Count; }
- }
-
- public bool IsReadOnly
- {
- get { return false; }
- }
-
- public IEnumerator GetEnumerator()
- {
- return ((IEnumerable)dict.Keys).GetEnumerator();
- }
-
- IEnumerator<V> IEnumerable<V>.GetEnumerator()
- {
- return dict.Keys.GetEnumerator();
- }
-
- public bool Add(V item)
- {
- if (!dict.ContainsKey(item))
- {
- dict[item] = this;
- return true;
- }
-
- return false;
- }
-
- void ICollection<V>.Add(V item)
- {
- Add(item);
- }
-
- public void Clear()
- {
- dict.Clear();
- }
-
- public bool Contains(V item)
- {
- return dict.ContainsKey(item);
- }
-
- public void CopyTo(V[] array, int arrayIndex)
- {
- dict.Keys.CopyTo(array, arrayIndex);
- }
-
- public bool Remove(V item)
- {
- return dict.Remove(item);
- }
- }
-#endif
- }
-
-}
diff --git a/lib/csharp/src/Net35/ExtensionsNet35.cs b/lib/csharp/src/Net35/ExtensionsNet35.cs
deleted file mode 100644
index 73a423288..000000000
--- a/lib/csharp/src/Net35/ExtensionsNet35.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Text;
-
-#if (!NET45)
-namespace Thrift
-{
- static class StreamExtensionsNet35
- {
- // CopyTo() has been added in 4.0
- public static long CopyTo(this Stream source, Stream target)
- {
- byte[] buffer = new byte[8192]; // multiple of 4096
- long nTotal = 0;
- while (true)
- {
- int nRead = source.Read(buffer, 0, buffer.Length);
- if (nRead <= 0) // done?
- return nTotal;
-
- target.Write(buffer, 0, nRead);
- nTotal += nRead;
- }
- }
- }
-
-}
-#endif
-
diff --git a/lib/csharp/src/Properties/AssemblyInfo.cs b/lib/csharp/src/Properties/AssemblyInfo.cs
deleted file mode 100644
index c8f51b5c0..000000000
--- a/lib/csharp/src/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * 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("Thrift")]
-[assembly: AssemblyDescription("C# bindings for the Apache Thrift RPC system")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("The Apache Software Foundation")]
-[assembly: AssemblyProduct("Thrift")]
-[assembly: AssemblyCopyright("The Apache Software Foundation")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-//@TODO where to put License information?
-
-// 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("df3f8ef0-e0a3-4c86-a65b-8ec84e016b1d")]
-
-// 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("0.14.0.0")]
-[assembly: AssemblyFileVersion("0.14.0.0")]
diff --git a/lib/csharp/src/Protocol/TAbstractBase.cs b/lib/csharp/src/Protocol/TAbstractBase.cs
deleted file mode 100644
index f5a61cd44..000000000
--- a/lib/csharp/src/Protocol/TAbstractBase.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * 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.
- */
-
-namespace Thrift.Protocol
-{
- public interface TAbstractBase
- {
- /// <summary>
- /// Writes the objects out to the protocol.
- /// </summary>
- void Write(TProtocol tProtocol);
- }
-}
diff --git a/lib/csharp/src/Protocol/TBase.cs b/lib/csharp/src/Protocol/TBase.cs
deleted file mode 100644
index 411e4d95f..000000000
--- a/lib/csharp/src/Protocol/TBase.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * 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.
- */
-
-namespace Thrift.Protocol
-{
- public interface TBase : TAbstractBase
- {
- /// <summary>
- /// Reads the TObject from the given input protocol.
- /// </summary>
- void Read(TProtocol tProtocol);
- }
-}
diff --git a/lib/csharp/src/Protocol/TBase64Utils.cs b/lib/csharp/src/Protocol/TBase64Utils.cs
deleted file mode 100644
index 9eaaebdda..000000000
--- a/lib/csharp/src/Protocol/TBase64Utils.cs
+++ /dev/null
@@ -1,100 +0,0 @@
-/**
- * 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;
-
-namespace Thrift.Protocol
-{
- internal static class TBase64Utils
- {
- internal const string ENCODE_TABLE =
- "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-
- internal static void encode(byte[] src, int srcOff, int len, byte[] dst,
- int dstOff)
- {
- dst[dstOff] = (byte)ENCODE_TABLE[(src[srcOff] >> 2) & 0x3F];
- if (len == 3)
- {
- dst[dstOff + 1] =
- (byte)ENCODE_TABLE[
- ((src[srcOff] << 4) & 0x30) | ((src[srcOff + 1] >> 4) & 0x0F)];
- dst[dstOff + 2] =
- (byte)ENCODE_TABLE[
- ((src[srcOff + 1] << 2) & 0x3C) | ((src[srcOff + 2] >> 6) & 0x03)];
- dst[dstOff + 3] =
- (byte)ENCODE_TABLE[src[srcOff + 2] & 0x3F];
- }
- else if (len == 2)
- {
- dst[dstOff + 1] =
- (byte)ENCODE_TABLE[
- ((src[srcOff] << 4) & 0x30) | ((src[srcOff + 1] >> 4) & 0x0F)];
- dst[dstOff + 2] =
- (byte)ENCODE_TABLE[(src[srcOff + 1] << 2) & 0x3C];
-
- }
- else
- { // len == 1) {
- dst[dstOff + 1] =
- (byte)ENCODE_TABLE[(src[srcOff] << 4) & 0x30];
- }
- }
-
- private static int[] DECODE_TABLE = {
- -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
- -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
- -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63,
- 52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1,
- -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,
- 15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,
- -1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,
- 41,42,43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1,
- -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
- -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
- -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
- -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
- -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
- -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
- -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
- -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
- };
-
- internal static void decode(byte[] src, int srcOff, int len, byte[] dst,
- int dstOff)
- {
- dst[dstOff] = (byte)
- ((DECODE_TABLE[src[srcOff] & 0x0FF] << 2) |
- (DECODE_TABLE[src[srcOff + 1] & 0x0FF] >> 4));
- if (len > 2)
- {
- dst[dstOff + 1] = (byte)
- (((DECODE_TABLE[src[srcOff + 1] & 0x0FF] << 4) & 0xF0) |
- (DECODE_TABLE[src[srcOff + 2] & 0x0FF] >> 2));
- if (len > 3)
- {
- dst[dstOff + 2] = (byte)
- (((DECODE_TABLE[src[srcOff + 2] & 0x0FF] << 6) & 0xC0) |
- DECODE_TABLE[src[srcOff + 3] & 0x0FF]);
- }
- }
- }
-
- }
-}
diff --git a/lib/csharp/src/Protocol/TBinaryProtocol.cs b/lib/csharp/src/Protocol/TBinaryProtocol.cs
deleted file mode 100644
index a4faa946f..000000000
--- a/lib/csharp/src/Protocol/TBinaryProtocol.cs
+++ /dev/null
@@ -1,395 +0,0 @@
-/**
- * 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.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using System.Text;
-using Thrift.Transport;
-
-namespace Thrift.Protocol
-{
- public class TBinaryProtocol : TProtocol
- {
- protected const uint VERSION_MASK = 0xffff0000;
- protected const uint VERSION_1 = 0x80010000;
-
- protected bool strictRead_ = false;
- protected bool strictWrite_ = true;
-
- #region BinaryProtocol Factory
-
- public class Factory : TProtocolFactory
- {
- protected bool strictRead_ = false;
- protected bool strictWrite_ = true;
-
- public Factory()
- : this(false, true)
- {
- }
-
- public Factory(bool strictRead, bool strictWrite)
- {
- strictRead_ = strictRead;
- strictWrite_ = strictWrite;
- }
-
- public TProtocol GetProtocol(TTransport trans)
- {
- return new TBinaryProtocol(trans, strictRead_, strictWrite_);
- }
- }
-
- #endregion
-
- public TBinaryProtocol(TTransport trans)
- : this(trans, false, true)
- {
- }
-
- public TBinaryProtocol(TTransport trans, bool strictRead, bool strictWrite)
- : base(trans)
- {
- strictRead_ = strictRead;
- strictWrite_ = strictWrite;
- }
-
- #region Write Methods
-
- public override void WriteMessageBegin(TMessage message)
- {
- if (strictWrite_)
- {
- uint version = VERSION_1 | (uint)(message.Type);
- WriteI32((int)version);
- WriteString(message.Name);
- WriteI32(message.SeqID);
- }
- else
- {
- WriteString(message.Name);
- WriteByte((sbyte)message.Type);
- WriteI32(message.SeqID);
- }
- }
-
- public override void WriteMessageEnd()
- {
- }
-
- public override void WriteStructBegin(TStruct struc)
- {
- }
-
- public override void WriteStructEnd()
- {
- }
-
- public override void WriteFieldBegin(TField field)
- {
- WriteByte((sbyte)field.Type);
- WriteI16(field.ID);
- }
-
- public override void WriteFieldEnd()
- {
- }
-
- public override void WriteFieldStop()
- {
- WriteByte((sbyte)TType.Stop);
- }
-
- public override void WriteMapBegin(TMap map)
- {
- WriteByte((sbyte)map.KeyType);
- WriteByte((sbyte)map.ValueType);
- WriteI32(map.Count);
- }
-
- public override void WriteMapEnd()
- {
- }
-
- public override void WriteListBegin(TList list)
- {
- WriteByte((sbyte)list.ElementType);
- WriteI32(list.Count);
- }
-
- public override void WriteListEnd()
- {
- }
-
- public override void WriteSetBegin(TSet set)
- {
- WriteByte((sbyte)set.ElementType);
- WriteI32(set.Count);
- }
-
- public override void WriteSetEnd()
- {
- }
-
- public override void WriteBool(bool b)
- {
- WriteByte(b ? (sbyte)1 : (sbyte)0);
- }
-
- private byte[] bout = new byte[1];
- public override void WriteByte(sbyte b)
- {
- bout[0] = (byte)b;
- trans.Write(bout, 0, 1);
- }
-
- private byte[] i16out = new byte[2];
- public override void WriteI16(short s)
- {
- i16out[0] = (byte)(0xff & (s >> 8));
- i16out[1] = (byte)(0xff & s);
- trans.Write(i16out, 0, 2);
- }
-
- private byte[] i32out = new byte[4];
- public override void WriteI32(int i32)
- {
- i32out[0] = (byte)(0xff & (i32 >> 24));
- i32out[1] = (byte)(0xff & (i32 >> 16));
- i32out[2] = (byte)(0xff & (i32 >> 8));
- i32out[3] = (byte)(0xff & i32);
- trans.Write(i32out, 0, 4);
- }
-
- private byte[] i64out = new byte[8];
- public override void WriteI64(long i64)
- {
- i64out[0] = (byte)(0xff & (i64 >> 56));
- i64out[1] = (byte)(0xff & (i64 >> 48));
- i64out[2] = (byte)(0xff & (i64 >> 40));
- i64out[3] = (byte)(0xff & (i64 >> 32));
- i64out[4] = (byte)(0xff & (i64 >> 24));
- i64out[5] = (byte)(0xff & (i64 >> 16));
- i64out[6] = (byte)(0xff & (i64 >> 8));
- i64out[7] = (byte)(0xff & i64);
- trans.Write(i64out, 0, 8);
- }
-
- public override void WriteDouble(double d)
- {
-#if !SILVERLIGHT
- WriteI64(BitConverter.DoubleToInt64Bits(d));
-#else
- var bytes = BitConverter.GetBytes(d);
- WriteI64(BitConverter.ToInt64(bytes, 0));
-#endif
- }
-
- public override void WriteBinary(byte[] b)
- {
- WriteI32(b.Length);
- trans.Write(b, 0, b.Length);
- }
-
- #endregion
-
- #region ReadMethods
-
- public override TMessage ReadMessageBegin()
- {
- TMessage message = new TMessage();
- int size = ReadI32();
- if (size < 0)
- {
- uint version = (uint)size & VERSION_MASK;
- if (version != VERSION_1)
- {
- throw new TProtocolException(TProtocolException.BAD_VERSION, "Bad version in ReadMessageBegin: " + version);
- }
- message.Type = (TMessageType)(size & 0x000000ff);
- message.Name = ReadString();
- message.SeqID = ReadI32();
- }
- else
- {
- if (strictRead_)
- {
- throw new TProtocolException(TProtocolException.BAD_VERSION, "Missing version in readMessageBegin, old client?");
- }
- message.Name = ReadStringBody(size);
- message.Type = (TMessageType)ReadByte();
- message.SeqID = ReadI32();
- }
- return message;
- }
-
- public override void ReadMessageEnd()
- {
- }
-
- public override TStruct ReadStructBegin()
- {
- return new TStruct();
- }
-
- public override void ReadStructEnd()
- {
- }
-
- public override TField ReadFieldBegin()
- {
- TField field = new TField();
- field.Type = (TType)ReadByte();
-
- if (field.Type != TType.Stop)
- {
- field.ID = ReadI16();
- }
-
- return field;
- }
-
- public override void ReadFieldEnd()
- {
- }
-
- public override TMap ReadMapBegin()
- {
- TMap map = new TMap();
- map.KeyType = (TType)ReadByte();
- map.ValueType = (TType)ReadByte();
- map.Count = ReadI32();
-
- return map;
- }
-
- public override void ReadMapEnd()
- {
- }
-
- public override TList ReadListBegin()
- {
- TList list = new TList();
- list.ElementType = (TType)ReadByte();
- list.Count = ReadI32();
-
- return list;
- }
-
- public override void ReadListEnd()
- {
- }
-
- public override TSet ReadSetBegin()
- {
- TSet set = new TSet();
- set.ElementType = (TType)ReadByte();
- set.Count = ReadI32();
-
- return set;
- }
-
- public override void ReadSetEnd()
- {
- }
-
- public override bool ReadBool()
- {
- return ReadByte() == 1;
- }
-
- private byte[] bin = new byte[1];
- public override sbyte ReadByte()
- {
- ReadAll(bin, 0, 1);
- return (sbyte)bin[0];
- }
-
- private byte[] i16in = new byte[2];
- public override short ReadI16()
- {
- ReadAll(i16in, 0, 2);
- return (short)(((i16in[0] & 0xff) << 8) | ((i16in[1] & 0xff)));
- }
-
- private byte[] i32in = new byte[4];
- public override int ReadI32()
- {
- ReadAll(i32in, 0, 4);
- return (int)(((i32in[0] & 0xff) << 24) | ((i32in[1] & 0xff) << 16) | ((i32in[2] & 0xff) << 8) | ((i32in[3] & 0xff)));
- }
-
-#pragma warning disable 675
-
- private byte[] i64in = new byte[8];
- public override long ReadI64()
- {
- ReadAll(i64in, 0, 8);
- unchecked
- {
- return (long)(
- ((long)(i64in[0] & 0xff) << 56) |
- ((long)(i64in[1] & 0xff) << 48) |
- ((long)(i64in[2] & 0xff) << 40) |
- ((long)(i64in[3] & 0xff) << 32) |
- ((long)(i64in[4] & 0xff) << 24) |
- ((long)(i64in[5] & 0xff) << 16) |
- ((long)(i64in[6] & 0xff) << 8) |
- ((long)(i64in[7] & 0xff)));
- }
- }
-
-#pragma warning restore 675
-
- public override double ReadDouble()
- {
-#if !SILVERLIGHT
- return BitConverter.Int64BitsToDouble(ReadI64());
-#else
- var value = ReadI64();
- var bytes = BitConverter.GetBytes(value);
- return BitConverter.ToDouble(bytes, 0);
-#endif
- }
-
- public override byte[] ReadBinary()
- {
- int size = ReadI32();
- byte[] buf = new byte[size];
- trans.ReadAll(buf, 0, size);
- return buf;
- }
- private string ReadStringBody(int size)
- {
- byte[] buf = new byte[size];
- trans.ReadAll(buf, 0, size);
- return Encoding.UTF8.GetString(buf, 0, buf.Length);
- }
-
- private int ReadAll(byte[] buf, int off, int len)
- {
- return trans.ReadAll(buf, off, len);
- }
-
- #endregion
- }
-}
diff --git a/lib/csharp/src/Protocol/TCompactProtocol.cs b/lib/csharp/src/Protocol/TCompactProtocol.cs
deleted file mode 100644
index ff673975e..000000000
--- a/lib/csharp/src/Protocol/TCompactProtocol.cs
+++ /dev/null
@@ -1,849 +0,0 @@
-/**
- * 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.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using System.Text;
-using Thrift.Transport;
-using System.Collections;
-using System.IO;
-using System.Collections.Generic;
-
-namespace Thrift.Protocol
-{
- public class TCompactProtocol : TProtocol
- {
- private static TStruct ANONYMOUS_STRUCT = new TStruct("");
- private static TField TSTOP = new TField("", TType.Stop, (short)0);
-
- private static byte[] ttypeToCompactType = new byte[16];
-
- private const byte PROTOCOL_ID = 0x82;
- private const byte VERSION = 1;
- private const byte VERSION_MASK = 0x1f; // 0001 1111
- private const byte TYPE_MASK = 0xE0; // 1110 0000
- private const byte TYPE_BITS = 0x07; // 0000 0111
- private const int TYPE_SHIFT_AMOUNT = 5;
-
- /// <summary>
- /// All of the on-wire type codes.
- /// </summary>
- private static class Types
- {
- public const byte STOP = 0x00;
- public const byte BOOLEAN_TRUE = 0x01;
- public const byte BOOLEAN_FALSE = 0x02;
- public const byte BYTE = 0x03;
- public const byte I16 = 0x04;
- public const byte I32 = 0x05;
- public const byte I64 = 0x06;
- public const byte DOUBLE = 0x07;
- public const byte BINARY = 0x08;
- public const byte LIST = 0x09;
- public const byte SET = 0x0A;
- public const byte MAP = 0x0B;
- public const byte STRUCT = 0x0C;
- }
-
- /// <summary>
- /// Used to keep track of the last field for the current and previous structs,
- /// so we can do the delta stuff.
- /// </summary>
- private Stack<short> lastField_ = new Stack<short>(15);
-
- private short lastFieldId_ = 0;
-
- /// <summary>
- /// If we encounter a boolean field begin, save the TField here so it can
- /// have the value incorporated.
- /// </summary>
- private Nullable<TField> booleanField_;
-
- /// <summary>
- /// If we Read a field header, and it's a boolean field, save the boolean
- /// value here so that ReadBool can use it.
- /// </summary>
- private Nullable<Boolean> boolValue_;
-
-
- #region CompactProtocol Factory
-
- public class Factory : TProtocolFactory
- {
- public Factory() { }
-
- public TProtocol GetProtocol(TTransport trans)
- {
- return new TCompactProtocol(trans);
- }
- }
-
- #endregion
-
- public TCompactProtocol(TTransport trans)
- : base(trans)
- {
- ttypeToCompactType[(int)TType.Stop] = Types.STOP;
- ttypeToCompactType[(int)TType.Bool] = Types.BOOLEAN_TRUE;
- ttypeToCompactType[(int)TType.Byte] = Types.BYTE;
- ttypeToCompactType[(int)TType.I16] = Types.I16;
- ttypeToCompactType[(int)TType.I32] = Types.I32;
- ttypeToCompactType[(int)TType.I64] = Types.I64;
- ttypeToCompactType[(int)TType.Double] = Types.DOUBLE;
- ttypeToCompactType[(int)TType.String] = Types.BINARY;
- ttypeToCompactType[(int)TType.List] = Types.LIST;
- ttypeToCompactType[(int)TType.Set] = Types.SET;
- ttypeToCompactType[(int)TType.Map] = Types.MAP;
- ttypeToCompactType[(int)TType.Struct] = Types.STRUCT;
- }
-
- public void reset()
- {
- lastField_.Clear();
- lastFieldId_ = 0;
- }
-
- #region Write Methods
-
- /// <summary>
- /// Writes a byte without any possibility of all that field header nonsense.
- /// Used internally by other writing methods that know they need to Write a byte.
- /// </summary>
- private byte[] byteDirectBuffer = new byte[1];
-
- private void WriteByteDirect(byte b)
- {
- byteDirectBuffer[0] = b;
- trans.Write(byteDirectBuffer);
- }
-
- /// <summary>
- /// Writes a byte without any possibility of all that field header nonsense.
- /// </summary>
- private void WriteByteDirect(int n)
- {
- WriteByteDirect((byte)n);
- }
-
- /// <summary>
- /// Write an i32 as a varint. Results in 1-5 bytes on the wire.
- /// TODO: make a permanent buffer like WriteVarint64?
- /// </summary>
- byte[] i32buf = new byte[5];
-
- private void WriteVarint32(uint n)
- {
- int idx = 0;
- while (true)
- {
- if ((n & ~0x7F) == 0)
- {
- i32buf[idx++] = (byte)n;
- // WriteByteDirect((byte)n);
- break;
- // return;
- }
- else
- {
- i32buf[idx++] = (byte)((n & 0x7F) | 0x80);
- // WriteByteDirect((byte)((n & 0x7F) | 0x80));
- n >>= 7;
- }
- }
- trans.Write(i32buf, 0, idx);
- }
-
- /// <summary>
- /// Write a message header to the wire. Compact Protocol messages contain the
- /// protocol version so we can migrate forwards in the future if need be.
- /// </summary>
- public override void WriteMessageBegin(TMessage message)
- {
- WriteByteDirect(PROTOCOL_ID);
- WriteByteDirect((byte)((VERSION & VERSION_MASK) | ((((uint)message.Type) << TYPE_SHIFT_AMOUNT) & TYPE_MASK)));
- WriteVarint32((uint)message.SeqID);
- WriteString(message.Name);
- }
-
- /// <summary>
- /// Write a struct begin. This doesn't actually put anything on the wire. We
- /// use it as an opportunity to put special placeholder markers on the field
- /// stack so we can get the field id deltas correct.
- /// </summary>
- public override void WriteStructBegin(TStruct strct)
- {
- lastField_.Push(lastFieldId_);
- lastFieldId_ = 0;
- }
-
- /// <summary>
- /// Write a struct end. This doesn't actually put anything on the wire. We use
- /// this as an opportunity to pop the last field from the current struct off
- /// of the field stack.
- /// </summary>
- public override void WriteStructEnd()
- {
- lastFieldId_ = lastField_.Pop();
- }
-
- /// <summary>
- /// Write a field header containing the field id and field type. If the
- /// difference between the current field id and the last one is small (&lt; 15),
- /// then the field id will be encoded in the 4 MSB as a delta. Otherwise, the
- /// field id will follow the type header as a zigzag varint.
- /// </summary>
- public override void WriteFieldBegin(TField field)
- {
- if (field.Type == TType.Bool)
- {
- // we want to possibly include the value, so we'll wait.
- booleanField_ = field;
- }
- else
- {
- WriteFieldBeginInternal(field, 0xFF);
- }
- }
-
- /// <summary>
- /// The workhorse of WriteFieldBegin. It has the option of doing a
- /// 'type override' of the type header. This is used specifically in the
- /// boolean field case.
- /// </summary>
- private void WriteFieldBeginInternal(TField field, byte typeOverride)
- {
- // short lastField = lastField_.Pop();
-
- // if there's a type override, use that.
- byte typeToWrite = typeOverride == 0xFF ? getCompactType(field.Type) : typeOverride;
-
- // check if we can use delta encoding for the field id
- if (field.ID > lastFieldId_ && field.ID - lastFieldId_ <= 15)
- {
- // Write them together
- WriteByteDirect((field.ID - lastFieldId_) << 4 | typeToWrite);
- }
- else
- {
- // Write them separate
- WriteByteDirect(typeToWrite);
- WriteI16(field.ID);
- }
-
- lastFieldId_ = field.ID;
- // lastField_.push(field.id);
- }
-
- /// <summary>
- /// Write the STOP symbol so we know there are no more fields in this struct.
- /// </summary>
- public override void WriteFieldStop()
- {
- WriteByteDirect(Types.STOP);
- }
-
- /// <summary>
- /// Write a map header. If the map is empty, omit the key and value type
- /// headers, as we don't need any additional information to skip it.
- /// </summary>
- public override void WriteMapBegin(TMap map)
- {
- if (map.Count == 0)
- {
- WriteByteDirect(0);
- }
- else
- {
- WriteVarint32((uint)map.Count);
- WriteByteDirect(getCompactType(map.KeyType) << 4 | getCompactType(map.ValueType));
- }
- }
-
- /// <summary>
- /// Write a list header.
- /// </summary>
- public override void WriteListBegin(TList list)
- {
- WriteCollectionBegin(list.ElementType, list.Count);
- }
-
- /// <summary>
- /// Write a set header.
- /// </summary>
- public override void WriteSetBegin(TSet set)
- {
- WriteCollectionBegin(set.ElementType, set.Count);
- }
-
- /// <summary>
- /// Write a boolean value. Potentially, this could be a boolean field, in
- /// which case the field header info isn't written yet. If so, decide what the
- /// right type header is for the value and then Write the field header.
- /// Otherwise, Write a single byte.
- /// </summary>
- public override void WriteBool(Boolean b)
- {
- if (booleanField_ != null)
- {
- // we haven't written the field header yet
- WriteFieldBeginInternal(booleanField_.Value, b ? Types.BOOLEAN_TRUE : Types.BOOLEAN_FALSE);
- booleanField_ = null;
- }
- else
- {
- // we're not part of a field, so just Write the value.
- WriteByteDirect(b ? Types.BOOLEAN_TRUE : Types.BOOLEAN_FALSE);
- }
- }
-
- /// <summary>
- /// Write a byte. Nothing to see here!
- /// </summary>
- public override void WriteByte(sbyte b)
- {
- WriteByteDirect((byte)b);
- }
-
- /// <summary>
- /// Write an I16 as a zigzag varint.
- /// </summary>
- public override void WriteI16(short i16)
- {
- WriteVarint32(intToZigZag(i16));
- }
-
- /// <summary>
- /// Write an i32 as a zigzag varint.
- /// </summary>
- public override void WriteI32(int i32)
- {
- WriteVarint32(intToZigZag(i32));
- }
-
- /// <summary>
- /// Write an i64 as a zigzag varint.
- /// </summary>
- public override void WriteI64(long i64)
- {
- WriteVarint64(longToZigzag(i64));
- }
-
- /// <summary>
- /// Write a double to the wire as 8 bytes.
- /// </summary>
- public override void WriteDouble(double dub)
- {
- byte[] data = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 };
- fixedLongToBytes(BitConverter.DoubleToInt64Bits(dub), data, 0);
- trans.Write(data);
- }
-
- /// <summary>
- /// Write a string to the wire with a varint size preceding.
- /// </summary>
- public override void WriteString(string str)
- {
- byte[] bytes = UTF8Encoding.UTF8.GetBytes(str);
- WriteBinary(bytes, 0, bytes.Length);
- }
-
- /// <summary>
- /// Write a byte array, using a varint for the size.
- /// </summary>
- public override void WriteBinary(byte[] bin)
- {
- WriteBinary(bin, 0, bin.Length);
- }
-
- private void WriteBinary(byte[] buf, int offset, int length)
- {
- WriteVarint32((uint)length);
- trans.Write(buf, offset, length);
- }
-
- //
- // These methods are called by structs, but don't actually have any wire
- // output or purpose.
- //
-
- public override void WriteMessageEnd() { }
- public override void WriteMapEnd() { }
- public override void WriteListEnd() { }
- public override void WriteSetEnd() { }
- public override void WriteFieldEnd() { }
-
- //
- // Internal writing methods
- //
-
- /// <summary>
- /// Abstract method for writing the start of lists and sets. List and sets on
- /// the wire differ only by the type indicator.
- /// </summary>
- protected void WriteCollectionBegin(TType elemType, int size)
- {
- if (size <= 14)
- {
- WriteByteDirect(size << 4 | getCompactType(elemType));
- }
- else
- {
- WriteByteDirect(0xf0 | getCompactType(elemType));
- WriteVarint32((uint)size);
- }
- }
-
- /// <summary>
- /// Write an i64 as a varint. Results in 1-10 bytes on the wire.
- /// </summary>
- byte[] varint64out = new byte[10];
- private void WriteVarint64(ulong n)
- {
- int idx = 0;
- while (true)
- {
- if ((n & ~(ulong)0x7FL) == 0)
- {
- varint64out[idx++] = (byte)n;
- break;
- }
- else
- {
- varint64out[idx++] = ((byte)((n & 0x7F) | 0x80));
- n >>= 7;
- }
- }
- trans.Write(varint64out, 0, idx);
- }
-
- /// <summary>
- /// Convert l into a zigzag long. This allows negative numbers to be
- /// represented compactly as a varint.
- /// </summary>
- private ulong longToZigzag(long n)
- {
- return (ulong)(n << 1) ^ (ulong)(n >> 63);
- }
-
- /// <summary>
- /// Convert n into a zigzag int. This allows negative numbers to be
- /// represented compactly as a varint.
- /// </summary>
- private uint intToZigZag(int n)
- {
- return (uint)(n << 1) ^ (uint)(n >> 31);
- }
-
- /// <summary>
- /// Convert a long into little-endian bytes in buf starting at off and going
- /// until off+7.
- /// </summary>
- private void fixedLongToBytes(long n, byte[] buf, int off)
- {
- buf[off + 0] = (byte)(n & 0xff);
- buf[off + 1] = (byte)((n >> 8) & 0xff);
- buf[off + 2] = (byte)((n >> 16) & 0xff);
- buf[off + 3] = (byte)((n >> 24) & 0xff);
- buf[off + 4] = (byte)((n >> 32) & 0xff);
- buf[off + 5] = (byte)((n >> 40) & 0xff);
- buf[off + 6] = (byte)((n >> 48) & 0xff);
- buf[off + 7] = (byte)((n >> 56) & 0xff);
- }
-
- #endregion
-
- #region ReadMethods
-
- /// <summary>
- /// Read a message header.
- /// </summary>
- public override TMessage ReadMessageBegin()
- {
- byte protocolId = (byte)ReadByte();
- if (protocolId != PROTOCOL_ID)
- {
- throw new TProtocolException("Expected protocol id " + PROTOCOL_ID.ToString("X") + " but got " + protocolId.ToString("X"));
- }
- byte versionAndType = (byte)ReadByte();
- byte version = (byte)(versionAndType & VERSION_MASK);
- if (version != VERSION)
- {
- throw new TProtocolException("Expected version " + VERSION + " but got " + version);
- }
- byte type = (byte)((versionAndType >> TYPE_SHIFT_AMOUNT) & TYPE_BITS);
- int seqid = (int)ReadVarint32();
- string messageName = ReadString();
- return new TMessage(messageName, (TMessageType)type, seqid);
- }
-
- /// <summary>
- /// Read a struct begin. There's nothing on the wire for this, but it is our
- /// opportunity to push a new struct begin marker onto the field stack.
- /// </summary>
- public override TStruct ReadStructBegin()
- {
- lastField_.Push(lastFieldId_);
- lastFieldId_ = 0;
- return ANONYMOUS_STRUCT;
- }
-
- /// <summary>
- /// Doesn't actually consume any wire data, just removes the last field for
- /// this struct from the field stack.
- /// </summary>
- public override void ReadStructEnd()
- {
- // consume the last field we Read off the wire.
- lastFieldId_ = lastField_.Pop();
- }
-
- /// <summary>
- /// Read a field header off the wire.
- /// </summary>
- public override TField ReadFieldBegin()
- {
- byte type = (byte)ReadByte();
-
- // if it's a stop, then we can return immediately, as the struct is over.
- if (type == Types.STOP)
- {
- return TSTOP;
- }
-
- short fieldId;
-
- // mask off the 4 MSB of the type header. it could contain a field id delta.
- short modifier = (short)((type & 0xf0) >> 4);
- if (modifier == 0)
- {
- // not a delta. look ahead for the zigzag varint field id.
- fieldId = ReadI16();
- }
- else
- {
- // has a delta. add the delta to the last Read field id.
- fieldId = (short)(lastFieldId_ + modifier);
- }
-
- TField field = new TField("", getTType((byte)(type & 0x0f)), fieldId);
-
- // if this happens to be a boolean field, the value is encoded in the type
- if (isBoolType(type))
- {
- // save the boolean value in a special instance variable.
- boolValue_ = (byte)(type & 0x0f) == Types.BOOLEAN_TRUE ? true : false;
- }
-
- // push the new field onto the field stack so we can keep the deltas going.
- lastFieldId_ = field.ID;
- return field;
- }
-
- /// <summary>
- /// Read a map header off the wire. If the size is zero, skip Reading the key
- /// and value type. This means that 0-length maps will yield TMaps without the
- /// "correct" types.
- /// </summary>
- public override TMap ReadMapBegin()
- {
- int size = (int)ReadVarint32();
- byte keyAndValueType = size == 0 ? (byte)0 : (byte)ReadByte();
- return new TMap(getTType((byte)(keyAndValueType >> 4)), getTType((byte)(keyAndValueType & 0xf)), size);
- }
-
- /// <summary>
- /// Read a list header off the wire. If the list size is 0-14, the size will
- /// be packed into the element type header. If it's a longer list, the 4 MSB
- /// of the element type header will be 0xF, and a varint will follow with the
- /// true size.
- /// </summary>
- public override TList ReadListBegin()
- {
- byte size_and_type = (byte)ReadByte();
- int size = (size_and_type >> 4) & 0x0f;
- if (size == 15)
- {
- size = (int)ReadVarint32();
- }
- TType type = getTType(size_and_type);
- return new TList(type, size);
- }
-
- /// <summary>
- /// Read a set header off the wire. If the set size is 0-14, the size will
- /// be packed into the element type header. If it's a longer set, the 4 MSB
- /// of the element type header will be 0xF, and a varint will follow with the
- /// true size.
- /// </summary>
- public override TSet ReadSetBegin()
- {
- return new TSet(ReadListBegin());
- }
-
- /// <summary>
- /// Read a boolean off the wire. If this is a boolean field, the value should
- /// already have been Read during ReadFieldBegin, so we'll just consume the
- /// pre-stored value. Otherwise, Read a byte.
- /// </summary>
- public override Boolean ReadBool()
- {
- if (boolValue_ != null)
- {
- bool result = boolValue_.Value;
- boolValue_ = null;
- return result;
- }
- return ReadByte() == Types.BOOLEAN_TRUE;
- }
-
- byte[] byteRawBuf = new byte[1];
- /// <summary>
- /// Read a single byte off the wire. Nothing interesting here.
- /// </summary>
- public override sbyte ReadByte()
- {
- trans.ReadAll(byteRawBuf, 0, 1);
- return (sbyte)byteRawBuf[0];
- }
-
- /// <summary>
- /// Read an i16 from the wire as a zigzag varint.
- /// </summary>
- public override short ReadI16()
- {
- return (short)zigzagToInt(ReadVarint32());
- }
-
- /// <summary>
- /// Read an i32 from the wire as a zigzag varint.
- /// </summary>
- public override int ReadI32()
- {
- return zigzagToInt(ReadVarint32());
- }
-
- /// <summary>
- /// Read an i64 from the wire as a zigzag varint.
- /// </summary>
- public override long ReadI64()
- {
- return zigzagToLong(ReadVarint64());
- }
-
- /// <summary>
- /// No magic here - just Read a double off the wire.
- /// </summary>
- public override double ReadDouble()
- {
- byte[] longBits = new byte[8];
- trans.ReadAll(longBits, 0, 8);
- return BitConverter.Int64BitsToDouble(bytesToLong(longBits));
- }
-
- /// <summary>
- /// Reads a byte[] (via ReadBinary), and then UTF-8 decodes it.
- /// </summary>
- public override string ReadString()
- {
- int length = (int)ReadVarint32();
-
- if (length == 0)
- {
- return "";
- }
-
- return Encoding.UTF8.GetString(ReadBinary(length));
- }
-
- /// <summary>
- /// Read a byte[] from the wire.
- /// </summary>
- public override byte[] ReadBinary()
- {
- int length = (int)ReadVarint32();
- if (length == 0) return new byte[0];
-
- byte[] buf = new byte[length];
- trans.ReadAll(buf, 0, length);
- return buf;
- }
-
- /// <summary>
- /// Read a byte[] of a known length from the wire.
- /// </summary>
- private byte[] ReadBinary(int length)
- {
- if (length == 0) return new byte[0];
-
- byte[] buf = new byte[length];
- trans.ReadAll(buf, 0, length);
- return buf;
- }
-
- //
- // These methods are here for the struct to call, but don't have any wire
- // encoding.
- //
- public override void ReadMessageEnd() { }
- public override void ReadFieldEnd() { }
- public override void ReadMapEnd() { }
- public override void ReadListEnd() { }
- public override void ReadSetEnd() { }
-
- //
- // Internal Reading methods
- //
-
- /// <summary>
- /// Read an i32 from the wire as a varint. The MSB of each byte is set
- /// if there is another byte to follow. This can Read up to 5 bytes.
- /// </summary>
- private uint ReadVarint32()
- {
- uint result = 0;
- int shift = 0;
- while (true)
- {
- byte b = (byte)ReadByte();
- result |= (uint)(b & 0x7f) << shift;
- if ((b & 0x80) != 0x80) break;
- shift += 7;
- }
- return result;
- }
-
- /// <summary>
- /// Read an i64 from the wire as a proper varint. The MSB of each byte is set
- /// if there is another byte to follow. This can Read up to 10 bytes.
- /// </summary>
- private ulong ReadVarint64()
- {
- int shift = 0;
- ulong result = 0;
- while (true)
- {
- byte b = (byte)ReadByte();
- result |= (ulong)(b & 0x7f) << shift;
- if ((b & 0x80) != 0x80) break;
- shift += 7;
- }
-
- return result;
- }
-
- #endregion
-
- //
- // encoding helpers
- //
-
- /// <summary>
- /// Convert from zigzag int to int.
- /// </summary>
- private int zigzagToInt(uint n)
- {
- return (int)(n >> 1) ^ (-(int)(n & 1));
- }
-
- /// <summary>
- /// Convert from zigzag long to long.
- /// </summary>
- private long zigzagToLong(ulong n)
- {
- return (long)(n >> 1) ^ (-(long)(n & 1));
- }
-
- /// <summary>
- /// Note that it's important that the mask bytes are long literals,
- /// otherwise they'll default to ints, and when you shift an int left 56 bits,
- /// you just get a messed up int.
- /// </summary>
- private long bytesToLong(byte[] bytes)
- {
- return
- ((bytes[7] & 0xffL) << 56) |
- ((bytes[6] & 0xffL) << 48) |
- ((bytes[5] & 0xffL) << 40) |
- ((bytes[4] & 0xffL) << 32) |
- ((bytes[3] & 0xffL) << 24) |
- ((bytes[2] & 0xffL) << 16) |
- ((bytes[1] & 0xffL) << 8) |
- ((bytes[0] & 0xffL));
- }
-
- //
- // type testing and converting
- //
-
- private Boolean isBoolType(byte b)
- {
- int lowerNibble = b & 0x0f;
- return lowerNibble == Types.BOOLEAN_TRUE || lowerNibble == Types.BOOLEAN_FALSE;
- }
-
- /// <summary>
- /// Given a TCompactProtocol.Types constant, convert it to its corresponding
- /// TType value.
- /// </summary>
- private TType getTType(byte type)
- {
- switch ((byte)(type & 0x0f))
- {
- case Types.STOP:
- return TType.Stop;
- case Types.BOOLEAN_FALSE:
- case Types.BOOLEAN_TRUE:
- return TType.Bool;
- case Types.BYTE:
- return TType.Byte;
- case Types.I16:
- return TType.I16;
- case Types.I32:
- return TType.I32;
- case Types.I64:
- return TType.I64;
- case Types.DOUBLE:
- return TType.Double;
- case Types.BINARY:
- return TType.String;
- case Types.LIST:
- return TType.List;
- case Types.SET:
- return TType.Set;
- case Types.MAP:
- return TType.Map;
- case Types.STRUCT:
- return TType.Struct;
- default:
- throw new TProtocolException("don't know what type: " + (byte)(type & 0x0f));
- }
- }
-
- /// <summary>
- /// Given a TType value, find the appropriate TCompactProtocol.Types constant.
- /// </summary>
- private byte getCompactType(TType ttype)
- {
- return ttypeToCompactType[(int)ttype];
- }
- }
-}
diff --git a/lib/csharp/src/Protocol/TField.cs b/lib/csharp/src/Protocol/TField.cs
deleted file mode 100644
index 81795577e..000000000
--- a/lib/csharp/src/Protocol/TField.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * 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.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace Thrift.Protocol
-{
- public struct TField
- {
- private string name;
- private TType type;
- private short id;
-
- public TField(string name, TType type, short id)
- :this()
- {
- this.name = name;
- this.type = type;
- this.id = id;
- }
-
- public string Name
- {
- get { return name; }
- set { name = value; }
- }
-
- public TType Type
- {
- get { return type; }
- set { type = value; }
- }
-
- public short ID
- {
- get { return id; }
- set { id = value; }
- }
- }
-}
diff --git a/lib/csharp/src/Protocol/TJSONProtocol.cs b/lib/csharp/src/Protocol/TJSONProtocol.cs
deleted file mode 100644
index 9dbdea9aa..000000000
--- a/lib/csharp/src/Protocol/TJSONProtocol.cs
+++ /dev/null
@@ -1,1124 +0,0 @@
-/**
- * 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.IO;
-using System.Text;
-using System.Collections.Generic;
-
-using Thrift.Transport;
-using System.Globalization;
-
-namespace Thrift.Protocol
-{
- /// <summary>
- /// JSON protocol implementation for thrift.
- /// <para/>
- /// This is a full-featured protocol supporting Write and Read.
- /// <para/>
- /// Please see the C++ class header for a detailed description of the
- /// protocol's wire format.
- /// <para/>
- /// Adapted from the Java version.
- /// </summary>
- public class TJSONProtocol : TProtocol
- {
- /// <summary>
- /// Factory for JSON protocol objects.
- /// </summary>
- public class Factory : TProtocolFactory
- {
- public TProtocol GetProtocol(TTransport trans)
- {
- return new TJSONProtocol(trans);
- }
- }
-
- private static byte[] COMMA = new byte[] { (byte)',' };
- private static byte[] COLON = new byte[] { (byte)':' };
- private static byte[] LBRACE = new byte[] { (byte)'{' };
- private static byte[] RBRACE = new byte[] { (byte)'}' };
- private static byte[] LBRACKET = new byte[] { (byte)'[' };
- private static byte[] RBRACKET = new byte[] { (byte)']' };
- private static byte[] QUOTE = new byte[] { (byte)'"' };
- private static byte[] BACKSLASH = new byte[] { (byte)'\\' };
-
- private byte[] ESCSEQ = new byte[] { (byte)'\\', (byte)'u', (byte)'0', (byte)'0' };
-
- private const long VERSION = 1;
- private byte[] JSON_CHAR_TABLE = {
- 0, 0, 0, 0, 0, 0, 0, 0,(byte)'b',(byte)'t',(byte)'n', 0,(byte)'f',(byte)'r', 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1,(byte)'"', 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- };
-
- private char[] ESCAPE_CHARS = "\"\\/bfnrt".ToCharArray();
-
- private byte[] ESCAPE_CHAR_VALS = {
- (byte)'"', (byte)'\\', (byte)'/', (byte)'\b', (byte)'\f', (byte)'\n', (byte)'\r', (byte)'\t',
- };
-
- private const int DEF_STRING_SIZE = 16;
-
- private static byte[] NAME_BOOL = new byte[] { (byte)'t', (byte)'f' };
- private static byte[] NAME_BYTE = new byte[] { (byte)'i', (byte)'8' };
- private static byte[] NAME_I16 = new byte[] { (byte)'i', (byte)'1', (byte)'6' };
- private static byte[] NAME_I32 = new byte[] { (byte)'i', (byte)'3', (byte)'2' };
- private static byte[] NAME_I64 = new byte[] { (byte)'i', (byte)'6', (byte)'4' };
- private static byte[] NAME_DOUBLE = new byte[] { (byte)'d', (byte)'b', (byte)'l' };
- private static byte[] NAME_STRUCT = new byte[] { (byte)'r', (byte)'e', (byte)'c' };
- private static byte[] NAME_STRING = new byte[] { (byte)'s', (byte)'t', (byte)'r' };
- private static byte[] NAME_MAP = new byte[] { (byte)'m', (byte)'a', (byte)'p' };
- private static byte[] NAME_LIST = new byte[] { (byte)'l', (byte)'s', (byte)'t' };
- private static byte[] NAME_SET = new byte[] { (byte)'s', (byte)'e', (byte)'t' };
-
- private static byte[] GetTypeNameForTypeID(TType typeID)
- {
- switch (typeID)
- {
- case TType.Bool:
- return NAME_BOOL;
- case TType.Byte:
- return NAME_BYTE;
- case TType.I16:
- return NAME_I16;
- case TType.I32:
- return NAME_I32;
- case TType.I64:
- return NAME_I64;
- case TType.Double:
- return NAME_DOUBLE;
- case TType.String:
- return NAME_STRING;
- case TType.Struct:
- return NAME_STRUCT;
- case TType.Map:
- return NAME_MAP;
- case TType.Set:
- return NAME_SET;
- case TType.List:
- return NAME_LIST;
- default:
- throw new TProtocolException(TProtocolException.NOT_IMPLEMENTED,
- "Unrecognized type");
- }
- }
-
- private static TType GetTypeIDForTypeName(byte[] name)
- {
- TType result = TType.Stop;
- if (name.Length > 1)
- {
- switch (name[0])
- {
- case (byte)'d':
- result = TType.Double;
- break;
- case (byte)'i':
- switch (name[1])
- {
- case (byte)'8':
- result = TType.Byte;
- break;
- case (byte)'1':
- result = TType.I16;
- break;
- case (byte)'3':
- result = TType.I32;
- break;
- case (byte)'6':
- result = TType.I64;
- break;
- }
- break;
- case (byte)'l':
- result = TType.List;
- break;
- case (byte)'m':
- result = TType.Map;
- break;
- case (byte)'r':
- result = TType.Struct;
- break;
- case (byte)'s':
- if (name[1] == (byte)'t')
- {
- result = TType.String;
- }
- else if (name[1] == (byte)'e')
- {
- result = TType.Set;
- }
- break;
- case (byte)'t':
- result = TType.Bool;
- break;
- }
- }
- if (result == TType.Stop)
- {
- throw new TProtocolException(TProtocolException.NOT_IMPLEMENTED,
- "Unrecognized type");
- }
- return result;
- }
-
- /// <summary>
- /// Base class for tracking JSON contexts that may require
- /// inserting/Reading additional JSON syntax characters
- /// This base context does nothing.
- /// </summary>
- protected class JSONBaseContext
- {
- protected TJSONProtocol proto;
-
- public JSONBaseContext(TJSONProtocol proto)
- {
- this.proto = proto;
- }
-
- public virtual void Write() { }
-
- public virtual void Read() { }
-
- public virtual bool EscapeNumbers() { return false; }
- }
-
- /// <summary>
- /// Context for JSON lists. Will insert/Read commas before each item except
- /// for the first one
- /// </summary>
- protected class JSONListContext : JSONBaseContext
- {
- public JSONListContext(TJSONProtocol protocol)
- : base(protocol)
- {
-
- }
-
- private bool first = true;
-
- public override void Write()
- {
- if (first)
- {
- first = false;
- }
- else
- {
- proto.trans.Write(COMMA);
- }
- }
-
- public override void Read()
- {
- if (first)
- {
- first = false;
- }
- else
- {
- proto.ReadJSONSyntaxChar(COMMA);
- }
- }
- }
-
- /// <summary>
- /// Context for JSON records. Will insert/Read colons before the value portion
- /// of each record pair, and commas before each key except the first. In
- /// addition, will indicate that numbers in the key position need to be
- /// escaped in quotes (since JSON keys must be strings).
- /// </summary>
- protected class JSONPairContext : JSONBaseContext
- {
- public JSONPairContext(TJSONProtocol proto)
- : base(proto)
- {
-
- }
-
- private bool first = true;
- private bool colon = true;
-
- public override void Write()
- {
- if (first)
- {
- first = false;
- colon = true;
- }
- else
- {
- proto.trans.Write(colon ? COLON : COMMA);
- colon = !colon;
- }
- }
-
- public override void Read()
- {
- if (first)
- {
- first = false;
- colon = true;
- }
- else
- {
- proto.ReadJSONSyntaxChar(colon ? COLON : COMMA);
- colon = !colon;
- }
- }
-
- public override bool EscapeNumbers()
- {
- return colon;
- }
- }
-
- /// <summary>
- /// Holds up to one byte from the transport
- /// </summary>
- protected class LookaheadReader
- {
- protected TJSONProtocol proto;
-
- public LookaheadReader(TJSONProtocol proto)
- {
- this.proto = proto;
- }
-
- private bool hasData;
- private byte[] data = new byte[1];
-
- /// <summary>
- /// Return and consume the next byte to be Read, either taking it from the
- /// data buffer if present or getting it from the transport otherwise.
- /// </summary>
- public byte Read()
- {
- if (hasData)
- {
- hasData = false;
- }
- else
- {
- proto.trans.ReadAll(data, 0, 1);
- }
- return data[0];
- }
-
- /// <summary>
- /// Return the next byte to be Read without consuming, filling the data
- /// buffer if it has not been filled alReady.
- /// </summary>
- public byte Peek()
- {
- if (!hasData)
- {
- proto.trans.ReadAll(data, 0, 1);
- }
- hasData = true;
- return data[0];
- }
- }
-
- // Default encoding
- protected Encoding utf8Encoding = UTF8Encoding.UTF8;
-
- // Stack of nested contexts that we may be in
- protected Stack<JSONBaseContext> contextStack = new Stack<JSONBaseContext>();
-
- // Current context that we are in
- protected JSONBaseContext context;
-
- // Reader that manages a 1-byte buffer
- protected LookaheadReader reader;
-
- /// <summary>
- /// Push a new JSON context onto the stack.
- /// </summary>
- protected void PushContext(JSONBaseContext c)
- {
- contextStack.Push(context);
- context = c;
- }
-
- /// <summary>
- /// Pop the last JSON context off the stack
- /// </summary>
- protected void PopContext()
- {
- context = contextStack.Pop();
- }
-
- /// <summary>
- /// TJSONProtocol Constructor
- /// </summary>
- public TJSONProtocol(TTransport trans)
- : base(trans)
- {
- context = new JSONBaseContext(this);
- reader = new LookaheadReader(this);
- }
-
- // Temporary buffer used by several methods
- private byte[] tempBuffer = new byte[4];
-
- /// <summary>
- /// Read a byte that must match b[0]; otherwise an exception is thrown.
- /// Marked protected to avoid synthetic accessor in JSONListContext.Read
- /// and JSONPairContext.Read
- /// </summary>
- protected void ReadJSONSyntaxChar(byte[] b)
- {
- byte ch = reader.Read();
- if (ch != b[0])
- {
- throw new TProtocolException(TProtocolException.INVALID_DATA,
- "Unexpected character:" + (char)ch);
- }
- }
-
- /// <summary>
- /// Convert a byte containing a hex char ('0'-'9' or 'a'-'f') into its
- /// corresponding hex value
- /// </summary>
- private static byte HexVal(byte ch)
- {
- if ((ch >= '0') && (ch <= '9'))
- {
- return (byte)((char)ch - '0');
- }
- else if ((ch >= 'a') && (ch <= 'f'))
- {
- ch += 10;
- return (byte)((char)ch - 'a');
- }
- else
- {
- throw new TProtocolException(TProtocolException.INVALID_DATA,
- "Expected hex character");
- }
- }
-
- /// <summary>
- /// Convert a byte containing a hex value to its corresponding hex character
- /// </summary>
- private static byte HexChar(byte val)
- {
- val &= 0x0F;
- if (val < 10)
- {
- return (byte)((char)val + '0');
- }
- else
- {
- val -= 10;
- return (byte)((char)val + 'a');
- }
- }
-
- /// <summary>
- /// Write the bytes in array buf as a JSON characters, escaping as needed
- /// </summary>
- private void WriteJSONString(byte[] b)
- {
- context.Write();
- trans.Write(QUOTE);
- int len = b.Length;
- for (int i = 0; i < len; i++)
- {
- if ((b[i] & 0x00FF) >= 0x30)
- {
- if (b[i] == BACKSLASH[0])
- {
- trans.Write(BACKSLASH);
- trans.Write(BACKSLASH);
- }
- else
- {
- trans.Write(b, i, 1);
- }
- }
- else
- {
- tempBuffer[0] = JSON_CHAR_TABLE[b[i]];
- if (tempBuffer[0] == 1)
- {
- trans.Write(b, i, 1);
- }
- else if (tempBuffer[0] > 1)
- {
- trans.Write(BACKSLASH);
- trans.Write(tempBuffer, 0, 1);
- }
- else
- {
- trans.Write(ESCSEQ);
- tempBuffer[0] = HexChar((byte)(b[i] >> 4));
- tempBuffer[1] = HexChar(b[i]);
- trans.Write(tempBuffer, 0, 2);
- }
- }
- }
- trans.Write(QUOTE);
- }
-
- /// <summary>
- /// Write out number as a JSON value. If the context dictates so, it will be
- /// wrapped in quotes to output as a JSON string.
- /// </summary>
- private void WriteJSONInteger(long num)
- {
- context.Write();
- string str = num.ToString();
-
- bool escapeNum = context.EscapeNumbers();
- if (escapeNum)
- trans.Write(QUOTE);
-
- trans.Write(utf8Encoding.GetBytes(str));
-
- if (escapeNum)
- trans.Write(QUOTE);
- }
-
- /// <summary>
- /// Write out a double as a JSON value. If it is NaN or infinity or if the
- /// context dictates escaping, Write out as JSON string.
- /// </summary>
- private void WriteJSONDouble(double num)
- {
- context.Write();
- string str = num.ToString("G17", CultureInfo.InvariantCulture);
- bool special = false;
-
- switch (str[0])
- {
- case 'N': // NaN
- case 'I': // Infinity
- special = true;
- break;
- case '-':
- if (str[1] == 'I')
- { // -Infinity
- special = true;
- }
- break;
- }
-
- bool escapeNum = special || context.EscapeNumbers();
-
- if (escapeNum)
- trans.Write(QUOTE);
-
- trans.Write(utf8Encoding.GetBytes(str));
-
- if (escapeNum)
- trans.Write(QUOTE);
- }
- /// <summary>
- /// Write out contents of byte array b as a JSON string with base-64 encoded
- /// data
- /// </summary>
- private void WriteJSONBase64(byte[] b)
- {
- context.Write();
- trans.Write(QUOTE);
-
- int len = b.Length;
- int off = 0;
-
- while (len >= 3)
- {
- // Encode 3 bytes at a time
- TBase64Utils.encode(b, off, 3, tempBuffer, 0);
- trans.Write(tempBuffer, 0, 4);
- off += 3;
- len -= 3;
- }
- if (len > 0)
- {
- // Encode remainder
- TBase64Utils.encode(b, off, len, tempBuffer, 0);
- trans.Write(tempBuffer, 0, len + 1);
- }
-
- trans.Write(QUOTE);
- }
-
- private void WriteJSONObjectStart()
- {
- context.Write();
- trans.Write(LBRACE);
- PushContext(new JSONPairContext(this));
- }
-
- private void WriteJSONObjectEnd()
- {
- PopContext();
- trans.Write(RBRACE);
- }
-
- private void WriteJSONArrayStart()
- {
- context.Write();
- trans.Write(LBRACKET);
- PushContext(new JSONListContext(this));
- }
-
- private void WriteJSONArrayEnd()
- {
- PopContext();
- trans.Write(RBRACKET);
- }
-
- public override void WriteMessageBegin(TMessage message)
- {
- WriteJSONArrayStart();
- WriteJSONInteger(VERSION);
-
- byte[] b = utf8Encoding.GetBytes(message.Name);
- WriteJSONString(b);
-
- WriteJSONInteger((long)message.Type);
- WriteJSONInteger(message.SeqID);
- }
-
- public override void WriteMessageEnd()
- {
- WriteJSONArrayEnd();
- }
-
- public override void WriteStructBegin(TStruct str)
- {
- WriteJSONObjectStart();
- }
-
- public override void WriteStructEnd()
- {
- WriteJSONObjectEnd();
- }
-
- public override void WriteFieldBegin(TField field)
- {
- WriteJSONInteger(field.ID);
- WriteJSONObjectStart();
- WriteJSONString(GetTypeNameForTypeID(field.Type));
- }
-
- public override void WriteFieldEnd()
- {
- WriteJSONObjectEnd();
- }
-
- public override void WriteFieldStop() { }
-
- public override void WriteMapBegin(TMap map)
- {
- WriteJSONArrayStart();
- WriteJSONString(GetTypeNameForTypeID(map.KeyType));
- WriteJSONString(GetTypeNameForTypeID(map.ValueType));
- WriteJSONInteger(map.Count);
- WriteJSONObjectStart();
- }
-
- public override void WriteMapEnd()
- {
- WriteJSONObjectEnd();
- WriteJSONArrayEnd();
- }
-
- public override void WriteListBegin(TList list)
- {
- WriteJSONArrayStart();
- WriteJSONString(GetTypeNameForTypeID(list.ElementType));
- WriteJSONInteger(list.Count);
- }
-
- public override void WriteListEnd()
- {
- WriteJSONArrayEnd();
- }
-
- public override void WriteSetBegin(TSet set)
- {
- WriteJSONArrayStart();
- WriteJSONString(GetTypeNameForTypeID(set.ElementType));
- WriteJSONInteger(set.Count);
- }
-
- public override void WriteSetEnd()
- {
- WriteJSONArrayEnd();
- }
-
- public override void WriteBool(bool b)
- {
- WriteJSONInteger(b ? (long)1 : (long)0);
- }
-
- public override void WriteByte(sbyte b)
- {
- WriteJSONInteger((long)b);
- }
-
- public override void WriteI16(short i16)
- {
- WriteJSONInteger((long)i16);
- }
-
- public override void WriteI32(int i32)
- {
- WriteJSONInteger((long)i32);
- }
-
- public override void WriteI64(long i64)
- {
- WriteJSONInteger(i64);
- }
-
- public override void WriteDouble(double dub)
- {
- WriteJSONDouble(dub);
- }
-
- public override void WriteString(string str)
- {
- byte[] b = utf8Encoding.GetBytes(str);
- WriteJSONString(b);
- }
-
- public override void WriteBinary(byte[] bin)
- {
- WriteJSONBase64(bin);
- }
-
- /**
- * Reading methods.
- */
-
- /// <summary>
- /// Read in a JSON string, unescaping as appropriate.. Skip Reading from the
- /// context if skipContext is true.
- /// </summary>
- private byte[] ReadJSONString(bool skipContext)
- {
- MemoryStream buffer = new MemoryStream();
- List<char> codeunits = new List<char>();
-
-
- if (!skipContext)
- {
- context.Read();
- }
- ReadJSONSyntaxChar(QUOTE);
- while (true)
- {
- byte ch = reader.Read();
- if (ch == QUOTE[0])
- {
- break;
- }
-
- // escaped?
- if (ch != ESCSEQ[0])
- {
- buffer.Write(new byte[] { (byte)ch }, 0, 1);
- continue;
- }
-
- // distinguish between \uXXXX and \?
- ch = reader.Read();
- if (ch != ESCSEQ[1]) // control chars like \n
- {
- int off = Array.IndexOf(ESCAPE_CHARS, (char)ch);
- if (off == -1)
- {
- throw new TProtocolException(TProtocolException.INVALID_DATA,
- "Expected control char");
- }
- ch = ESCAPE_CHAR_VALS[off];
- buffer.Write(new byte[] { (byte)ch }, 0, 1);
- continue;
- }
-
-
- // it's \uXXXX
- trans.ReadAll(tempBuffer, 0, 4);
- var wch = (short)((HexVal((byte)tempBuffer[0]) << 12) +
- (HexVal((byte)tempBuffer[1]) << 8) +
- (HexVal((byte)tempBuffer[2]) << 4) +
- HexVal(tempBuffer[3]));
- if (Char.IsHighSurrogate((char)wch))
- {
- if (codeunits.Count > 0)
- {
- throw new TProtocolException(TProtocolException.INVALID_DATA,
- "Expected low surrogate char");
- }
- codeunits.Add((char)wch);
- }
- else if (Char.IsLowSurrogate((char)wch))
- {
- if (codeunits.Count == 0)
- {
- throw new TProtocolException(TProtocolException.INVALID_DATA,
- "Expected high surrogate char");
- }
- codeunits.Add((char)wch);
- var tmp = utf8Encoding.GetBytes(codeunits.ToArray());
- buffer.Write(tmp, 0, tmp.Length);
- codeunits.Clear();
- }
- else
- {
- var tmp = utf8Encoding.GetBytes(new char[] { (char)wch });
- buffer.Write(tmp, 0, tmp.Length);
- }
- }
-
-
- if (codeunits.Count > 0)
- {
- throw new TProtocolException(TProtocolException.INVALID_DATA,
- "Expected low surrogate char");
- }
-
- return buffer.ToArray();
- }
-
- /// <summary>
- /// Return true if the given byte could be a valid part of a JSON number.
- /// </summary>
- private bool IsJSONNumeric(byte b)
- {
- switch (b)
- {
- case (byte)'+':
- case (byte)'-':
- case (byte)'.':
- case (byte)'0':
- case (byte)'1':
- case (byte)'2':
- case (byte)'3':
- case (byte)'4':
- case (byte)'5':
- case (byte)'6':
- case (byte)'7':
- case (byte)'8':
- case (byte)'9':
- case (byte)'E':
- case (byte)'e':
- return true;
- }
- return false;
- }
-
- /// <summary>
- /// Read in a sequence of characters that are all valid in JSON numbers. Does
- /// not do a complete regex check to validate that this is actually a number.
- /// </summary>
- private string ReadJSONNumericChars()
- {
- StringBuilder strbld = new StringBuilder();
- while (true)
- {
- byte ch = reader.Peek();
- if (!IsJSONNumeric(ch))
- {
- break;
- }
- strbld.Append((char)reader.Read());
- }
- return strbld.ToString();
- }
-
- /// <summary>
- /// Read in a JSON number. If the context dictates, Read in enclosing quotes.
- /// </summary>
- private long ReadJSONInteger()
- {
- context.Read();
- if (context.EscapeNumbers())
- {
- ReadJSONSyntaxChar(QUOTE);
- }
-
- string str = ReadJSONNumericChars();
- if (context.EscapeNumbers())
- {
- ReadJSONSyntaxChar(QUOTE);
- }
-
- try
- {
- return Int64.Parse(str);
- }
- catch (FormatException fex)
- {
- throw new TProtocolException(TProtocolException.INVALID_DATA,
- "Bad data encounted in numeric data", fex);
- }
- }
-
- /// <summary>
- /// Read in a JSON double value. Throw if the value is not wrapped in quotes
- /// when expected or if wrapped in quotes when not expected.
- /// </summary>
- private double ReadJSONDouble()
- {
- context.Read();
- if (reader.Peek() == QUOTE[0])
- {
- byte[] arr = ReadJSONString(true);
- double dub = Double.Parse(utf8Encoding.GetString(arr, 0, arr.Length), CultureInfo.InvariantCulture);
-
- if (!context.EscapeNumbers() && !Double.IsNaN(dub) && !Double.IsInfinity(dub))
- {
- // Throw exception -- we should not be in a string in this case
- throw new TProtocolException(TProtocolException.INVALID_DATA,
- "Numeric data unexpectedly quoted");
- }
- return dub;
- }
- else
- {
- if (context.EscapeNumbers())
- {
- // This will throw - we should have had a quote if escapeNum == true
- ReadJSONSyntaxChar(QUOTE);
- }
- try
- {
- return Double.Parse(ReadJSONNumericChars(), CultureInfo.InvariantCulture);
- }
- catch (FormatException fex)
- {
- throw new TProtocolException(TProtocolException.INVALID_DATA,
- "Bad data encounted in numeric data", fex);
- }
- }
- }
-
- /// <summary>
- /// Read in a JSON string containing base-64 encoded data and decode it.
- /// </summary>
- private byte[] ReadJSONBase64()
- {
- byte[] b = ReadJSONString(false);
- int len = b.Length;
- int off = 0;
- int size = 0;
- // reduce len to ignore fill bytes
- while ((len > 0) && (b[len - 1] == '='))
- {
- --len;
- }
- // read & decode full byte triplets = 4 source bytes
- while (len > 4)
- {
- // Decode 4 bytes at a time
- TBase64Utils.decode(b, off, 4, b, size); // NB: decoded in place
- off += 4;
- len -= 4;
- size += 3;
- }
- // Don't decode if we hit the end or got a single leftover byte (invalid
- // base64 but legal for skip of regular string type)
- if (len > 1)
- {
- // Decode remainder
- TBase64Utils.decode(b, off, len, b, size); // NB: decoded in place
- size += len - 1;
- }
- // Sadly we must copy the byte[] (any way around this?)
- byte[] result = new byte[size];
- Array.Copy(b, 0, result, 0, size);
- return result;
- }
-
- private void ReadJSONObjectStart()
- {
- context.Read();
- ReadJSONSyntaxChar(LBRACE);
- PushContext(new JSONPairContext(this));
- }
-
- private void ReadJSONObjectEnd()
- {
- ReadJSONSyntaxChar(RBRACE);
- PopContext();
- }
-
- private void ReadJSONArrayStart()
- {
- context.Read();
- ReadJSONSyntaxChar(LBRACKET);
- PushContext(new JSONListContext(this));
- }
-
- private void ReadJSONArrayEnd()
- {
- ReadJSONSyntaxChar(RBRACKET);
- PopContext();
- }
-
- public override TMessage ReadMessageBegin()
- {
- TMessage message = new TMessage();
- ReadJSONArrayStart();
- if (ReadJSONInteger() != VERSION)
- {
- throw new TProtocolException(TProtocolException.BAD_VERSION,
- "Message contained bad version.");
- }
-
- var buf = ReadJSONString(false);
- message.Name = utf8Encoding.GetString(buf, 0, buf.Length);
- message.Type = (TMessageType)ReadJSONInteger();
- message.SeqID = (int)ReadJSONInteger();
- return message;
- }
-
- public override void ReadMessageEnd()
- {
- ReadJSONArrayEnd();
- }
-
- public override TStruct ReadStructBegin()
- {
- ReadJSONObjectStart();
- return new TStruct();
- }
-
- public override void ReadStructEnd()
- {
- ReadJSONObjectEnd();
- }
-
- public override TField ReadFieldBegin()
- {
- TField field = new TField();
- byte ch = reader.Peek();
- if (ch == RBRACE[0])
- {
- field.Type = TType.Stop;
- }
- else
- {
- field.ID = (short)ReadJSONInteger();
- ReadJSONObjectStart();
- field.Type = GetTypeIDForTypeName(ReadJSONString(false));
- }
- return field;
- }
-
- public override void ReadFieldEnd()
- {
- ReadJSONObjectEnd();
- }
-
- public override TMap ReadMapBegin()
- {
- TMap map = new TMap();
- ReadJSONArrayStart();
- map.KeyType = GetTypeIDForTypeName(ReadJSONString(false));
- map.ValueType = GetTypeIDForTypeName(ReadJSONString(false));
- map.Count = (int)ReadJSONInteger();
- ReadJSONObjectStart();
- return map;
- }
-
- public override void ReadMapEnd()
- {
- ReadJSONObjectEnd();
- ReadJSONArrayEnd();
- }
-
- public override TList ReadListBegin()
- {
- TList list = new TList();
- ReadJSONArrayStart();
- list.ElementType = GetTypeIDForTypeName(ReadJSONString(false));
- list.Count = (int)ReadJSONInteger();
- return list;
- }
-
- public override void ReadListEnd()
- {
- ReadJSONArrayEnd();
- }
-
- public override TSet ReadSetBegin()
- {
- TSet set = new TSet();
- ReadJSONArrayStart();
- set.ElementType = GetTypeIDForTypeName(ReadJSONString(false));
- set.Count = (int)ReadJSONInteger();
- return set;
- }
-
- public override void ReadSetEnd()
- {
- ReadJSONArrayEnd();
- }
-
- public override bool ReadBool()
- {
- return (ReadJSONInteger() == 0 ? false : true);
- }
-
- public override sbyte ReadByte()
- {
- return (sbyte)ReadJSONInteger();
- }
-
- public override short ReadI16()
- {
- return (short)ReadJSONInteger();
- }
-
- public override int ReadI32()
- {
- return (int)ReadJSONInteger();
- }
-
- public override long ReadI64()
- {
- return (long)ReadJSONInteger();
- }
-
- public override double ReadDouble()
- {
- return ReadJSONDouble();
- }
-
- public override string ReadString()
- {
- var buf = ReadJSONString(false);
- return utf8Encoding.GetString(buf, 0, buf.Length);
- }
-
- public override byte[] ReadBinary()
- {
- return ReadJSONBase64();
- }
-
- }
-}
diff --git a/lib/csharp/src/Protocol/TList.cs b/lib/csharp/src/Protocol/TList.cs
deleted file mode 100644
index 0c8f2144a..000000000
--- a/lib/csharp/src/Protocol/TList.cs
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * 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.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace Thrift.Protocol
-{
- public struct TList
- {
- private TType elementType;
- private int count;
-
- public TList(TType elementType, int count)
- :this()
- {
- this.elementType = elementType;
- this.count = count;
- }
-
- public TType ElementType
- {
- get { return elementType; }
- set { elementType = value; }
- }
-
- public int Count
- {
- get { return count; }
- set { count = value; }
- }
- }
-}
diff --git a/lib/csharp/src/Protocol/TMap.cs b/lib/csharp/src/Protocol/TMap.cs
deleted file mode 100644
index aba9d3a95..000000000
--- a/lib/csharp/src/Protocol/TMap.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * 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.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace Thrift.Protocol
-{
- public struct TMap
- {
- private TType keyType;
- private TType valueType;
- private int count;
-
- public TMap(TType keyType, TType valueType, int count)
- :this()
- {
- this.keyType = keyType;
- this.valueType = valueType;
- this.count = count;
- }
-
- public TType KeyType
- {
- get { return keyType; }
- set { keyType = value; }
- }
-
- public TType ValueType
- {
- get { return valueType; }
- set { valueType = value; }
- }
-
- public int Count
- {
- get { return count; }
- set { count = value; }
- }
- }
-}
diff --git a/lib/csharp/src/Protocol/TMessage.cs b/lib/csharp/src/Protocol/TMessage.cs
deleted file mode 100644
index 348263c37..000000000
--- a/lib/csharp/src/Protocol/TMessage.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * 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.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace Thrift.Protocol
-{
- public struct TMessage
- {
- private string name;
- private TMessageType type;
- private int seqID;
-
- public TMessage(string name, TMessageType type, int seqid)
- :this()
- {
- this.name = name;
- this.type = type;
- this.seqID = seqid;
- }
-
- public string Name
- {
- get { return name; }
- set { name = value; }
- }
-
- public TMessageType Type
- {
- get { return type; }
- set { type = value; }
- }
-
- public int SeqID
- {
- get { return seqID; }
- set { seqID = value; }
- }
- }
-}
diff --git a/lib/csharp/src/Protocol/TMessageType.cs b/lib/csharp/src/Protocol/TMessageType.cs
deleted file mode 100644
index c7091fede..000000000
--- a/lib/csharp/src/Protocol/TMessageType.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * 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;
-
-namespace Thrift.Protocol
-{
- public enum TMessageType
- {
- Call = 1,
- Reply = 2,
- Exception = 3,
- Oneway = 4
- }
-}
diff --git a/lib/csharp/src/Protocol/TMultiplexedProcessor.cs b/lib/csharp/src/Protocol/TMultiplexedProcessor.cs
deleted file mode 100644
index aa91c527f..000000000
--- a/lib/csharp/src/Protocol/TMultiplexedProcessor.cs
+++ /dev/null
@@ -1,183 +0,0 @@
-/**
- * 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.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using System.Text;
-using Thrift.Transport;
-using System.Collections.Generic;
-using System.IO;
-
-namespace Thrift.Protocol
-{
- /// <summary>
- /// <see cref="TMultiplexedProcessor"/> is a <see cref="TProcessor"/> allowing a single <see cref="Thrift.Server.TServer"/>
- /// to provide multiple services.
- /// <para/>
- /// To do so, you instantiate the processor and then register additional processors with it,
- /// as shown in the following example:
- /// <para/>
- /// <code>
- /// TMultiplexedProcessor processor = new TMultiplexedProcessor();
- ///
- /// processor.registerProcessor(
- /// "Calculator",
- /// new Calculator.Processor(new CalculatorHandler()));
- ///
- /// processor.registerProcessor(
- /// "WeatherReport",
- /// new WeatherReport.Processor(new WeatherReportHandler()));
- ///
- /// TServerTransport t = new TServerSocket(9090);
- /// TSimpleServer server = new TSimpleServer(processor, t);
- ///
- /// server.serve();
- /// </code>
- /// </summary>
- public class TMultiplexedProcessor : TProcessor
- {
- private Dictionary<string, TProcessor> ServiceProcessorMap = new Dictionary<string, TProcessor>();
-
- /// <summary>
- /// 'Register' a service with this TMultiplexedProcessor. This allows us to broker
- /// requests to individual services by using the service name to select them at request time.
- ///
- /// Args:
- /// - serviceName Name of a service, has to be identical to the name
- /// declared in the Thrift IDL, e.g. "WeatherReport".
- /// - processor Implementation of a service, usually referred to as "handlers",
- /// e.g. WeatherReportHandler implementing WeatherReport.Iface.
- /// </summary>
- public void RegisterProcessor(string serviceName, TProcessor processor)
- {
- ServiceProcessorMap.Add(serviceName, processor);
- }
-
-
- private void Fail(TProtocol oprot, TMessage message, TApplicationException.ExceptionType extype, string etxt)
- {
- TApplicationException appex = new TApplicationException(extype, etxt);
-
- TMessage newMessage = new TMessage(message.Name, TMessageType.Exception, message.SeqID);
-
- oprot.WriteMessageBegin(newMessage);
- appex.Write(oprot);
- oprot.WriteMessageEnd();
- oprot.Transport.Flush();
- }
-
-
- /// <summary>
- /// This implementation of process performs the following steps:
- ///
- /// - Read the beginning of the message.
- /// - Extract the service name from the message.
- /// - Using the service name to locate the appropriate processor.
- /// - Dispatch to the processor, with a decorated instance of TProtocol
- /// that allows readMessageBegin() to return the original TMessage.
- /// <para/>
- /// Throws an exception if
- /// - the message type is not CALL or ONEWAY,
- /// - the service name was not found in the message, or
- /// - the service name has not been RegisterProcessor()ed.
- /// </summary>
- public bool Process(TProtocol iprot, TProtocol oprot)
- {
- /* Use the actual underlying protocol (e.g. TBinaryProtocol) to read the
- message header. This pulls the message "off the wire", which we'll
- deal with at the end of this method. */
-
- try
- {
- TMessage message = iprot.ReadMessageBegin();
-
- if ((message.Type != TMessageType.Call) && (message.Type != TMessageType.Oneway))
- {
- Fail(oprot, message,
- TApplicationException.ExceptionType.InvalidMessageType,
- "Message type CALL or ONEWAY expected");
- return false;
- }
-
- // Extract the service name
- int index = message.Name.IndexOf(TMultiplexedProtocol.SEPARATOR);
- if (index < 0)
- {
- Fail(oprot, message,
- TApplicationException.ExceptionType.InvalidProtocol,
- "Service name not found in message name: " + message.Name + ". " +
- "Did you forget to use a TMultiplexProtocol in your client?");
- return false;
- }
-
- // Create a new TMessage, something that can be consumed by any TProtocol
- string serviceName = message.Name.Substring(0, index);
- TProcessor actualProcessor;
- if (!ServiceProcessorMap.TryGetValue(serviceName, out actualProcessor))
- {
- Fail(oprot, message,
- TApplicationException.ExceptionType.InternalError,
- "Service name not found: " + serviceName + ". " +
- "Did you forget to call RegisterProcessor()?");
- return false;
- }
-
- // Create a new TMessage, removing the service name
- TMessage newMessage = new TMessage(
- message.Name.Substring(serviceName.Length + TMultiplexedProtocol.SEPARATOR.Length),
- message.Type,
- message.SeqID);
-
- // Dispatch processing to the stored processor
- return actualProcessor.Process(new StoredMessageProtocol(iprot, newMessage), oprot);
-
- }
- catch (IOException)
- {
- return false; // similar to all other processors
- }
-
- }
-
- /// <summary>
- /// Our goal was to work with any protocol. In order to do that, we needed
- /// to allow them to call readMessageBegin() and get a TMessage in exactly
- /// the standard format, without the service name prepended to TMessage.name.
- /// </summary>
- private class StoredMessageProtocol : TProtocolDecorator
- {
- TMessage MsgBegin;
-
- public StoredMessageProtocol(TProtocol protocol, TMessage messageBegin)
- : base(protocol)
- {
- this.MsgBegin = messageBegin;
- }
-
- public override TMessage ReadMessageBegin()
- {
- return MsgBegin;
- }
- }
-
- }
-}
diff --git a/lib/csharp/src/Protocol/TMultiplexedProtocol.cs b/lib/csharp/src/Protocol/TMultiplexedProtocol.cs
deleted file mode 100644
index 1bd420fcc..000000000
--- a/lib/csharp/src/Protocol/TMultiplexedProtocol.cs
+++ /dev/null
@@ -1,103 +0,0 @@
-/**
- * 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.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using System.Text;
-using Thrift.Transport;
-using System.Collections.Generic;
-
-namespace Thrift.Protocol
-{
-
- /// <summary>
- /// TMultiplexedProtocol is a protocol-independent concrete decorator that allows a Thrift
- /// client to communicate with a multiplexing Thrift server, by prepending the service name
- /// to the function name during function calls.
- /// <para/>
- /// NOTE: THIS IS NOT TO BE USED BY SERVERS.
- /// On the server, use TMultiplexedProcessor to handle requests from a multiplexing client.
- /// <para/>
- /// This example uses a single socket transport to invoke two services:
- /// <code>
- /// TSocket transport = new TSocket("localhost", 9090);
- /// transport.open();
- ///
- /// TBinaryProtocol protocol = new TBinaryProtocol(transport);
- ///
- /// TMultiplexedProtocol mp = new TMultiplexedProtocol(protocol, "Calculator");
- /// Calculator.Client service = new Calculator.Client(mp);
- ///
- /// TMultiplexedProtocol mp2 = new TMultiplexedProtocol(protocol, "WeatherReport");
- /// WeatherReport.Client service2 = new WeatherReport.Client(mp2);
- ///
- /// System.out.println(service.add(2,2));
- /// System.out.println(service2.getTemperature());
- /// </code>
- /// </summary>
- public class TMultiplexedProtocol : TProtocolDecorator
- {
-
- /// <summary>
- /// Used to delimit the service name from the function name.
- /// </summary>
- public static string SEPARATOR = ":";
-
- private string ServiceName;
-
- /// <summary>
- /// Wrap the specified protocol, allowing it to be used to communicate with a
- /// multiplexing server. The <paramref name="serviceName"/> is required as it is
- /// prepended to the message header so that the multiplexing server can broker
- /// the function call to the proper service.
- /// </summary>
- /// <param name="protocol">Your communication protocol of choice, e.g. <see cref="TBinaryProtocol"/>.</param>
- /// <param name="serviceName">The service name of the service communicating via this protocol.</param>
- public TMultiplexedProtocol(TProtocol protocol, string serviceName)
- : base(protocol)
- {
- ServiceName = serviceName;
- }
-
- /// <summary>
- /// Prepends the service name to the function name, separated by TMultiplexedProtocol.SEPARATOR.
- /// </summary>
- /// <param name="tMessage">The original message.</param>
- public override void WriteMessageBegin(TMessage tMessage)
- {
- switch (tMessage.Type)
- {
- case TMessageType.Call:
- case TMessageType.Oneway:
- base.WriteMessageBegin(new TMessage(
- ServiceName + SEPARATOR + tMessage.Name,
- tMessage.Type,
- tMessage.SeqID));
- break;
-
- default:
- base.WriteMessageBegin(tMessage);
- break;
- }
- }
- }
-}
diff --git a/lib/csharp/src/Protocol/TProtocol.cs b/lib/csharp/src/Protocol/TProtocol.cs
deleted file mode 100644
index dd7a6e062..000000000
--- a/lib/csharp/src/Protocol/TProtocol.cs
+++ /dev/null
@@ -1,142 +0,0 @@
-/**
- * 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.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using System.Text;
-using Thrift.Transport;
-
-namespace Thrift.Protocol
-{
- public abstract class TProtocol : IDisposable
- {
- private const int DEFAULT_RECURSION_DEPTH = 64;
-
- protected TTransport trans;
- protected int recursionLimit;
- protected int recursionDepth;
-
- protected TProtocol(TTransport trans)
- {
- this.trans = trans;
- this.recursionLimit = DEFAULT_RECURSION_DEPTH;
- this.recursionDepth = 0;
- }
-
- public TTransport Transport
- {
- get { return trans; }
- }
-
- public int RecursionLimit
- {
- get { return recursionLimit; }
- set { recursionLimit = value; }
- }
-
- public void IncrementRecursionDepth()
- {
- if (recursionDepth < recursionLimit)
- ++recursionDepth;
- else
- throw new TProtocolException(TProtocolException.DEPTH_LIMIT, "Depth limit exceeded");
- }
-
- public void DecrementRecursionDepth()
- {
- --recursionDepth;
- }
-
- #region " IDisposable Support "
- private bool _IsDisposed;
-
- // IDisposable
- public void Dispose()
- {
- Dispose(true);
- }
-
- protected virtual void Dispose(bool disposing)
- {
- if (!_IsDisposed)
- {
- if (disposing)
- {
- if (trans is IDisposable)
- (trans as IDisposable).Dispose();
- }
- }
- _IsDisposed = true;
- }
- #endregion
-
- public abstract void WriteMessageBegin(TMessage message);
- public abstract void WriteMessageEnd();
- public abstract void WriteStructBegin(TStruct struc);
- public abstract void WriteStructEnd();
- public abstract void WriteFieldBegin(TField field);
- public abstract void WriteFieldEnd();
- public abstract void WriteFieldStop();
- public abstract void WriteMapBegin(TMap map);
- public abstract void WriteMapEnd();
- public abstract void WriteListBegin(TList list);
- public abstract void WriteListEnd();
- public abstract void WriteSetBegin(TSet set);
- public abstract void WriteSetEnd();
- public abstract void WriteBool(bool b);
- public abstract void WriteByte(sbyte b);
- public abstract void WriteI16(short i16);
- public abstract void WriteI32(int i32);
- public abstract void WriteI64(long i64);
- public abstract void WriteDouble(double d);
- public virtual void WriteString(string s)
- {
- WriteBinary(Encoding.UTF8.GetBytes(s));
- }
- public abstract void WriteBinary(byte[] b);
-
- public abstract TMessage ReadMessageBegin();
- public abstract void ReadMessageEnd();
- public abstract TStruct ReadStructBegin();
- public abstract void ReadStructEnd();
- public abstract TField ReadFieldBegin();
- public abstract void ReadFieldEnd();
- public abstract TMap ReadMapBegin();
- public abstract void ReadMapEnd();
- public abstract TList ReadListBegin();
- public abstract void ReadListEnd();
- public abstract TSet ReadSetBegin();
- public abstract void ReadSetEnd();
- public abstract bool ReadBool();
- public abstract sbyte ReadByte();
- public abstract short ReadI16();
- public abstract int ReadI32();
- public abstract long ReadI64();
- public abstract double ReadDouble();
- public virtual string ReadString()
- {
- var buf = ReadBinary();
- return Encoding.UTF8.GetString(buf, 0, buf.Length);
- }
- public abstract byte[] ReadBinary();
- }
-}
diff --git a/lib/csharp/src/Protocol/TProtocolDecorator.cs b/lib/csharp/src/Protocol/TProtocolDecorator.cs
deleted file mode 100644
index 86000027f..000000000
--- a/lib/csharp/src/Protocol/TProtocolDecorator.cs
+++ /dev/null
@@ -1,261 +0,0 @@
-/**
- * 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.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using System.Text;
-using Thrift.Transport;
-using System.Collections.Generic;
-
-namespace Thrift.Protocol
-{
- /// <summary>
- /// <see cref="TProtocolDecorator"/> forwards all requests to an enclosed <see cref="TProtocol"/> instance,
- /// providing a way to author concise concrete decorator subclasses. While it has
- /// no abstract methods, it is marked abstract as a reminder that by itself,
- /// it does not modify the behaviour of the enclosed <see cref="TProtocol"/>.
- /// <para/>
- /// See p.175 of Design Patterns (by Gamma et al.)
- /// </summary>
- /// <seealso cref="TMultiplexedProtocol"/>
- public abstract class TProtocolDecorator : TProtocol
- {
- private TProtocol WrappedProtocol;
-
- /// <summary>
- /// Encloses the specified protocol.
- /// </summary>
- /// <param name="protocol">All operations will be forward to this protocol. Must be non-null.</param>
- public TProtocolDecorator(TProtocol protocol)
- : base(protocol.Transport)
- {
-
- WrappedProtocol = protocol;
- }
-
- public override void WriteMessageBegin(TMessage tMessage)
- {
- WrappedProtocol.WriteMessageBegin(tMessage);
- }
-
- public override void WriteMessageEnd()
- {
- WrappedProtocol.WriteMessageEnd();
- }
-
- public override void WriteStructBegin(TStruct tStruct)
- {
- WrappedProtocol.WriteStructBegin(tStruct);
- }
-
- public override void WriteStructEnd()
- {
- WrappedProtocol.WriteStructEnd();
- }
-
- public override void WriteFieldBegin(TField tField)
- {
- WrappedProtocol.WriteFieldBegin(tField);
- }
-
- public override void WriteFieldEnd()
- {
- WrappedProtocol.WriteFieldEnd();
- }
-
- public override void WriteFieldStop()
- {
- WrappedProtocol.WriteFieldStop();
- }
-
- public override void WriteMapBegin(TMap tMap)
- {
- WrappedProtocol.WriteMapBegin(tMap);
- }
-
- public override void WriteMapEnd()
- {
- WrappedProtocol.WriteMapEnd();
- }
-
- public override void WriteListBegin(TList tList)
- {
- WrappedProtocol.WriteListBegin(tList);
- }
-
- public override void WriteListEnd()
- {
- WrappedProtocol.WriteListEnd();
- }
-
- public override void WriteSetBegin(TSet tSet)
- {
- WrappedProtocol.WriteSetBegin(tSet);
- }
-
- public override void WriteSetEnd()
- {
- WrappedProtocol.WriteSetEnd();
- }
-
- public override void WriteBool(bool b)
- {
- WrappedProtocol.WriteBool(b);
- }
-
- public override void WriteByte(sbyte b)
- {
- WrappedProtocol.WriteByte(b);
- }
-
- public override void WriteI16(short i)
- {
- WrappedProtocol.WriteI16(i);
- }
-
- public override void WriteI32(int i)
- {
- WrappedProtocol.WriteI32(i);
- }
-
- public override void WriteI64(long l)
- {
- WrappedProtocol.WriteI64(l);
- }
-
- public override void WriteDouble(double v)
- {
- WrappedProtocol.WriteDouble(v);
- }
-
- public override void WriteString(string s)
- {
- WrappedProtocol.WriteString(s);
- }
-
- public override void WriteBinary(byte[] bytes)
- {
- WrappedProtocol.WriteBinary(bytes);
- }
-
- public override TMessage ReadMessageBegin()
- {
- return WrappedProtocol.ReadMessageBegin();
- }
-
- public override void ReadMessageEnd()
- {
- WrappedProtocol.ReadMessageEnd();
- }
-
- public override TStruct ReadStructBegin()
- {
- return WrappedProtocol.ReadStructBegin();
- }
-
- public override void ReadStructEnd()
- {
- WrappedProtocol.ReadStructEnd();
- }
-
- public override TField ReadFieldBegin()
- {
- return WrappedProtocol.ReadFieldBegin();
- }
-
- public override void ReadFieldEnd()
- {
- WrappedProtocol.ReadFieldEnd();
- }
-
- public override TMap ReadMapBegin()
- {
- return WrappedProtocol.ReadMapBegin();
- }
-
- public override void ReadMapEnd()
- {
- WrappedProtocol.ReadMapEnd();
- }
-
- public override TList ReadListBegin()
- {
- return WrappedProtocol.ReadListBegin();
- }
-
- public override void ReadListEnd()
- {
- WrappedProtocol.ReadListEnd();
- }
-
- public override TSet ReadSetBegin()
- {
- return WrappedProtocol.ReadSetBegin();
- }
-
- public override void ReadSetEnd()
- {
- WrappedProtocol.ReadSetEnd();
- }
-
- public override bool ReadBool()
- {
- return WrappedProtocol.ReadBool();
- }
-
- public override sbyte ReadByte()
- {
- return WrappedProtocol.ReadByte();
- }
-
- public override short ReadI16()
- {
- return WrappedProtocol.ReadI16();
- }
-
- public override int ReadI32()
- {
- return WrappedProtocol.ReadI32();
- }
-
- public override long ReadI64()
- {
- return WrappedProtocol.ReadI64();
- }
-
- public override double ReadDouble()
- {
- return WrappedProtocol.ReadDouble();
- }
-
- public override string ReadString()
- {
- return WrappedProtocol.ReadString();
- }
-
- public override byte[] ReadBinary()
- {
- return WrappedProtocol.ReadBinary();
- }
- }
-
-}
diff --git a/lib/csharp/src/Protocol/TProtocolException.cs b/lib/csharp/src/Protocol/TProtocolException.cs
deleted file mode 100644
index 7bef23685..000000000
--- a/lib/csharp/src/Protocol/TProtocolException.cs
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- * 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.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-
-namespace Thrift.Protocol
-{
- public class TProtocolException : TException
- {
- public const int UNKNOWN = 0;
- public const int INVALID_DATA = 1;
- public const int NEGATIVE_SIZE = 2;
- public const int SIZE_LIMIT = 3;
- public const int BAD_VERSION = 4;
- public const int NOT_IMPLEMENTED = 5;
- public const int DEPTH_LIMIT = 6;
-
- protected int type_ = UNKNOWN;
-
- public TProtocolException()
- : base()
- {
- }
-
- public TProtocolException(int type, Exception inner = null)
- : base(string.Empty, inner)
- {
- type_ = type;
- }
-
- public TProtocolException(int type, string message, Exception inner = null)
- : base(message, inner)
- {
- type_ = type;
- }
-
- public TProtocolException(string message, Exception inner = null)
- : base(message, inner)
- {
- }
-
- public int getType()
- {
- return type_;
- }
- }
-}
diff --git a/lib/csharp/src/Protocol/TProtocolFactory.cs b/lib/csharp/src/Protocol/TProtocolFactory.cs
deleted file mode 100644
index 71360a19a..000000000
--- a/lib/csharp/src/Protocol/TProtocolFactory.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * 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.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using Thrift.Transport;
-
-namespace Thrift.Protocol
-{
- public interface TProtocolFactory
- {
- TProtocol GetProtocol(TTransport trans);
- }
-}
diff --git a/lib/csharp/src/Protocol/TProtocolUtil.cs b/lib/csharp/src/Protocol/TProtocolUtil.cs
deleted file mode 100644
index d995c6ce7..000000000
--- a/lib/csharp/src/Protocol/TProtocolUtil.cs
+++ /dev/null
@@ -1,108 +0,0 @@
-/**
- * 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.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-
-namespace Thrift.Protocol
-{
- public static class TProtocolUtil
- {
- public static void Skip(TProtocol prot, TType type)
- {
- prot.IncrementRecursionDepth();
- try
- {
- switch (type)
- {
- case TType.Bool:
- prot.ReadBool();
- break;
- case TType.Byte:
- prot.ReadByte();
- break;
- case TType.I16:
- prot.ReadI16();
- break;
- case TType.I32:
- prot.ReadI32();
- break;
- case TType.I64:
- prot.ReadI64();
- break;
- case TType.Double:
- prot.ReadDouble();
- break;
- case TType.String:
- // Don't try to decode the string, just skip it.
- prot.ReadBinary();
- break;
- case TType.Struct:
- prot.ReadStructBegin();
- while (true)
- {
- TField field = prot.ReadFieldBegin();
- if (field.Type == TType.Stop)
- {
- break;
- }
- Skip(prot, field.Type);
- prot.ReadFieldEnd();
- }
- prot.ReadStructEnd();
- break;
- case TType.Map:
- TMap map = prot.ReadMapBegin();
- for (int i = 0; i < map.Count; i++)
- {
- Skip(prot, map.KeyType);
- Skip(prot, map.ValueType);
- }
- prot.ReadMapEnd();
- break;
- case TType.Set:
- TSet set = prot.ReadSetBegin();
- for (int i = 0; i < set.Count; i++)
- {
- Skip(prot, set.ElementType);
- }
- prot.ReadSetEnd();
- break;
- case TType.List:
- TList list = prot.ReadListBegin();
- for (int i = 0; i < list.Count; i++)
- {
- Skip(prot, list.ElementType);
- }
- prot.ReadListEnd();
- break;
- default:
- throw new TProtocolException(TProtocolException.INVALID_DATA, "Unknown data type " + type.ToString("d"));
- }
- }
- finally
- {
- prot.DecrementRecursionDepth();
- }
- }
- }
-}
diff --git a/lib/csharp/src/Protocol/TSet.cs b/lib/csharp/src/Protocol/TSet.cs
deleted file mode 100644
index a918ab537..000000000
--- a/lib/csharp/src/Protocol/TSet.cs
+++ /dev/null
@@ -1,59 +0,0 @@
-/**
- * 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.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace Thrift.Protocol
-{
- public struct TSet
- {
- private TType elementType;
- private int count;
-
- public TSet(TType elementType, int count)
- :this()
- {
- this.elementType = elementType;
- this.count = count;
- }
-
- public TSet(TList list)
- : this(list.ElementType, list.Count)
- {
- }
-
- public TType ElementType
- {
- get { return elementType; }
- set { elementType = value; }
- }
-
- public int Count
- {
- get { return count; }
- set { count = value; }
- }
- }
-}
diff --git a/lib/csharp/src/Protocol/TStruct.cs b/lib/csharp/src/Protocol/TStruct.cs
deleted file mode 100644
index f4844a4c9..000000000
--- a/lib/csharp/src/Protocol/TStruct.cs
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * 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.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace Thrift.Protocol
-{
- public struct TStruct
- {
- private string name;
-
- public TStruct(string name)
- :this()
- {
- this.name = name;
- }
-
- public string Name
- {
- get { return name; }
- set { name = value; }
- }
- }
-}
diff --git a/lib/csharp/src/Protocol/TType.cs b/lib/csharp/src/Protocol/TType.cs
deleted file mode 100644
index 9ce915e08..000000000
--- a/lib/csharp/src/Protocol/TType.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * 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.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-
-namespace Thrift.Protocol
-{
- public enum TType : byte
- {
- Stop = 0,
- Void = 1,
- Bool = 2,
- Byte = 3,
- Double = 4,
- I16 = 6,
- I32 = 8,
- I64 = 10,
- String = 11,
- Struct = 12,
- Map = 13,
- Set = 14,
- List = 15
- }
-}
diff --git a/lib/csharp/src/Server/TServer.cs b/lib/csharp/src/Server/TServer.cs
deleted file mode 100644
index 2bc04f3a0..000000000
--- a/lib/csharp/src/Server/TServer.cs
+++ /dev/null
@@ -1,155 +0,0 @@
-/**
- * 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.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using Thrift.Protocol;
-using Thrift.Transport;
-using System.IO;
-
-namespace Thrift.Server
-{
- public abstract class TServer
- {
- //Attributes
- protected TProcessorFactory processorFactory;
- protected TServerTransport serverTransport;
- protected TTransportFactory inputTransportFactory;
- protected TTransportFactory outputTransportFactory;
- protected TProtocolFactory inputProtocolFactory;
- protected TProtocolFactory outputProtocolFactory;
- protected TServerEventHandler serverEventHandler = null;
-
- //Methods
- public void setEventHandler(TServerEventHandler seh)
- {
- serverEventHandler = seh;
- }
- public TServerEventHandler getEventHandler()
- {
- return serverEventHandler;
- }
-
- //Log delegation
- public delegate void LogDelegate(string str);
- private LogDelegate _logDelegate;
- protected LogDelegate logDelegate
- {
- get { return _logDelegate; }
- set { _logDelegate = (value != null) ? value : DefaultLogDelegate; }
- }
- protected static void DefaultLogDelegate(string s)
- {
- Console.Error.WriteLine(s);
- }
-
- //Construction
- public TServer(TProcessor processor,
- TServerTransport serverTransport)
- : this(processor, serverTransport,
- new TTransportFactory(),
- new TTransportFactory(),
- new TBinaryProtocol.Factory(),
- new TBinaryProtocol.Factory(),
- DefaultLogDelegate)
- {
- }
-
- public TServer(TProcessor processor,
- TServerTransport serverTransport,
- LogDelegate logDelegate)
- : this(processor,
- serverTransport,
- new TTransportFactory(),
- new TTransportFactory(),
- new TBinaryProtocol.Factory(),
- new TBinaryProtocol.Factory(),
- logDelegate)
- {
- }
-
- public TServer(TProcessor processor,
- TServerTransport serverTransport,
- TTransportFactory transportFactory)
- : this(processor,
- serverTransport,
- transportFactory,
- transportFactory,
- new TBinaryProtocol.Factory(),
- new TBinaryProtocol.Factory(),
- DefaultLogDelegate)
- {
- }
-
- public TServer(TProcessor processor,
- TServerTransport serverTransport,
- TTransportFactory transportFactory,
- TProtocolFactory protocolFactory)
- : this(processor,
- serverTransport,
- transportFactory,
- transportFactory,
- protocolFactory,
- protocolFactory,
- DefaultLogDelegate)
- {
- }
-
- public TServer(TProcessor processor,
- TServerTransport serverTransport,
- TTransportFactory inputTransportFactory,
- TTransportFactory outputTransportFactory,
- TProtocolFactory inputProtocolFactory,
- TProtocolFactory outputProtocolFactory,
- LogDelegate logDelegate)
- {
- this.processorFactory = new TSingletonProcessorFactory(processor);
- this.serverTransport = serverTransport;
- this.inputTransportFactory = inputTransportFactory;
- this.outputTransportFactory = outputTransportFactory;
- this.inputProtocolFactory = inputProtocolFactory;
- this.outputProtocolFactory = outputProtocolFactory;
- this.logDelegate = (logDelegate != null) ? logDelegate : DefaultLogDelegate;
- }
-
- public TServer(TProcessorFactory processorFactory,
- TServerTransport serverTransport,
- TTransportFactory inputTransportFactory,
- TTransportFactory outputTransportFactory,
- TProtocolFactory inputProtocolFactory,
- TProtocolFactory outputProtocolFactory,
- LogDelegate logDelegate)
- {
- this.processorFactory = processorFactory;
- this.serverTransport = serverTransport;
- this.inputTransportFactory = inputTransportFactory;
- this.outputTransportFactory = outputTransportFactory;
- this.inputProtocolFactory = inputProtocolFactory;
- this.outputProtocolFactory = outputProtocolFactory;
- this.logDelegate = (logDelegate != null) ? logDelegate : DefaultLogDelegate;
- }
-
- //Abstract Interface
- public abstract void Serve();
- public abstract void Stop();
- }
-}
diff --git a/lib/csharp/src/Server/TServerEventHandler.cs b/lib/csharp/src/Server/TServerEventHandler.cs
deleted file mode 100644
index e81efc6af..000000000
--- a/lib/csharp/src/Server/TServerEventHandler.cs
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * 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.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-
-namespace Thrift.Server
-{
- /// <summary>
- /// Interface implemented by server users to handle events from the server.
- /// </summary>
- public interface TServerEventHandler
- {
- /// <summary>
- /// Called before the server begins.
- /// </summary>
- void preServe();
-
- /// <summary>
- /// Called when a new client has connected and is about to being processing.
- /// </summary>
- object createContext(Thrift.Protocol.TProtocol input, Thrift.Protocol.TProtocol output);
-
- /// <summary>
- /// Called when a client has finished request-handling to delete server context.
- /// </summary>
- void deleteContext(object serverContext, Thrift.Protocol.TProtocol input, Thrift.Protocol.TProtocol output);
-
- /// <summary>
- /// Called when a client is about to call the processor.
- /// </summary>
- void processContext(object serverContext, Thrift.Transport.TTransport transport);
- };
-}
diff --git a/lib/csharp/src/Server/TSimpleServer.cs b/lib/csharp/src/Server/TSimpleServer.cs
deleted file mode 100644
index 4e7ea96f4..000000000
--- a/lib/csharp/src/Server/TSimpleServer.cs
+++ /dev/null
@@ -1,180 +0,0 @@
-/**
- * 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.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using Thrift.Transport;
-using Thrift.Protocol;
-
-namespace Thrift.Server
-{
- /// <summary>
- /// Simple single-threaded server for testing.
- /// </summary>
- public class TSimpleServer : TServer
- {
- private bool stop = false;
-
- public TSimpleServer(TProcessor processor,
- TServerTransport serverTransport)
- : base(processor, serverTransport, new TTransportFactory(), new TTransportFactory(), new TBinaryProtocol.Factory(), new TBinaryProtocol.Factory(), DefaultLogDelegate)
- {
- }
-
- public TSimpleServer(TProcessor processor,
- TServerTransport serverTransport,
- LogDelegate logDel)
- : base(processor, serverTransport, new TTransportFactory(), new TTransportFactory(), new TBinaryProtocol.Factory(), new TBinaryProtocol.Factory(), logDel)
- {
- }
-
- public TSimpleServer(TProcessor processor,
- TServerTransport serverTransport,
- TTransportFactory transportFactory)
- : base(processor,
- serverTransport,
- transportFactory,
- transportFactory,
- new TBinaryProtocol.Factory(),
- new TBinaryProtocol.Factory(),
- DefaultLogDelegate)
- {
- }
-
- public TSimpleServer(TProcessor processor,
- TServerTransport serverTransport,
- TTransportFactory transportFactory,
- TProtocolFactory protocolFactory)
- : base(processor,
- serverTransport,
- transportFactory,
- transportFactory,
- protocolFactory,
- protocolFactory,
- DefaultLogDelegate)
- {
- }
-
- public TSimpleServer(TProcessorFactory processorFactory,
- TServerTransport serverTransport,
- TTransportFactory transportFactory,
- TProtocolFactory protocolFactory)
- : base(processorFactory,
- serverTransport,
- transportFactory,
- transportFactory,
- protocolFactory,
- protocolFactory,
- DefaultLogDelegate)
- {
- }
-
- public override void Serve()
- {
- try
- {
- serverTransport.Listen();
- }
- catch (TTransportException ttx)
- {
- logDelegate(ttx.ToString());
- return;
- }
-
- //Fire the preServe server event when server is up but before any client connections
- if (serverEventHandler != null)
- serverEventHandler.preServe();
-
- while (!stop)
- {
- TProcessor processor = null;
- TTransport client = null;
- TTransport inputTransport = null;
- TTransport outputTransport = null;
- TProtocol inputProtocol = null;
- TProtocol outputProtocol = null;
- object connectionContext = null;
- try
- {
- using (client = serverTransport.Accept())
- {
- processor = processorFactory.GetProcessor(client);
- if (client != null)
- {
- using (inputTransport = inputTransportFactory.GetTransport(client))
- {
- using (outputTransport = outputTransportFactory.GetTransport(client))
- {
- inputProtocol = inputProtocolFactory.GetProtocol(inputTransport);
- outputProtocol = outputProtocolFactory.GetProtocol(outputTransport);
-
- //Recover event handler (if any) and fire createContext server event when a client connects
- if (serverEventHandler != null)
- connectionContext = serverEventHandler.createContext(inputProtocol, outputProtocol);
-
- //Process client requests until client disconnects
- while (!stop)
- {
- if (!inputTransport.Peek())
- break;
-
- //Fire processContext server event
- //N.B. This is the pattern implemented in C++ and the event fires provisionally.
- //That is to say it may be many minutes between the event firing and the client request
- //actually arriving or the client may hang up without ever makeing a request.
- if (serverEventHandler != null)
- serverEventHandler.processContext(connectionContext, inputTransport);
- //Process client request (blocks until transport is readable)
- if (!processor.Process(inputProtocol, outputProtocol))
- break;
- }
- }
- }
- }
- }
- }
- catch (TTransportException ttx)
- {
- if (!stop || ttx.Type != TTransportException.ExceptionType.Interrupted)
- {
- logDelegate(ttx.ToString());
- }
- }
- catch (Exception x)
- {
- //Unexpected
- logDelegate(x.ToString());
- }
-
- //Fire deleteContext server event after client disconnects
- if (serverEventHandler != null)
- serverEventHandler.deleteContext(connectionContext, inputProtocol, outputProtocol);
- }
- }
-
- public override void Stop()
- {
- stop = true;
- serverTransport.Close();
- }
- }
-}
diff --git a/lib/csharp/src/Server/TThreadPoolServer.cs b/lib/csharp/src/Server/TThreadPoolServer.cs
deleted file mode 100644
index a494ce7bd..000000000
--- a/lib/csharp/src/Server/TThreadPoolServer.cs
+++ /dev/null
@@ -1,295 +0,0 @@
-/**
- * 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.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using System.Threading;
-using Thrift.Protocol;
-using Thrift.Transport;
-
-namespace Thrift.Server
-{
- /// <summary>
- /// Server that uses C# built-in ThreadPool to spawn threads when handling requests.
- /// </summary>
- public class TThreadPoolServer : TServer
- {
- private const int DEFAULT_MIN_THREADS = -1; // use .NET ThreadPool defaults
- private const int DEFAULT_MAX_THREADS = -1; // use .NET ThreadPool defaults
- private volatile bool stop = false;
-
- public struct Configuration
- {
- public int MinWorkerThreads;
- public int MaxWorkerThreads;
- public int MinIOThreads;
- public int MaxIOThreads;
-
- public Configuration(int min = DEFAULT_MIN_THREADS, int max = DEFAULT_MAX_THREADS)
- {
- MinWorkerThreads = min;
- MaxWorkerThreads = max;
- MinIOThreads = min;
- MaxIOThreads = max;
- }
-
- public Configuration(int minWork, int maxWork, int minIO, int maxIO)
- {
- MinWorkerThreads = minWork;
- MaxWorkerThreads = maxWork;
- MinIOThreads = minIO;
- MaxIOThreads = maxIO;
- }
- }
-
- public TThreadPoolServer(TProcessor processor, TServerTransport serverTransport)
- : this(new TSingletonProcessorFactory(processor), serverTransport,
- new TTransportFactory(), new TTransportFactory(),
- new TBinaryProtocol.Factory(), new TBinaryProtocol.Factory(),
- new Configuration(), DefaultLogDelegate)
- {
- }
-
- public TThreadPoolServer(TProcessor processor, TServerTransport serverTransport, LogDelegate logDelegate)
- : this(new TSingletonProcessorFactory(processor), serverTransport,
- new TTransportFactory(), new TTransportFactory(),
- new TBinaryProtocol.Factory(), new TBinaryProtocol.Factory(),
- new Configuration(), logDelegate)
- {
- }
-
- public TThreadPoolServer(TProcessor processor,
- TServerTransport serverTransport,
- TTransportFactory transportFactory,
- TProtocolFactory protocolFactory)
- : this(new TSingletonProcessorFactory(processor), serverTransport,
- transportFactory, transportFactory,
- protocolFactory, protocolFactory,
- new Configuration(), DefaultLogDelegate)
- {
- }
-
- public TThreadPoolServer(TProcessorFactory processorFactory,
- TServerTransport serverTransport,
- TTransportFactory transportFactory,
- TProtocolFactory protocolFactory)
- : this(processorFactory, serverTransport,
- transportFactory, transportFactory,
- protocolFactory, protocolFactory,
- new Configuration(), DefaultLogDelegate)
- {
- }
-
- public TThreadPoolServer(TProcessorFactory processorFactory,
- TServerTransport serverTransport,
- TTransportFactory inputTransportFactory,
- TTransportFactory outputTransportFactory,
- TProtocolFactory inputProtocolFactory,
- TProtocolFactory outputProtocolFactory,
- int minThreadPoolThreads, int maxThreadPoolThreads, LogDelegate logDel)
- : this(processorFactory, serverTransport, inputTransportFactory, outputTransportFactory,
- inputProtocolFactory, outputProtocolFactory,
- new Configuration(minThreadPoolThreads, maxThreadPoolThreads),
- logDel)
- {
- }
-
- public TThreadPoolServer(TProcessorFactory processorFactory,
- TServerTransport serverTransport,
- TTransportFactory inputTransportFactory,
- TTransportFactory outputTransportFactory,
- TProtocolFactory inputProtocolFactory,
- TProtocolFactory outputProtocolFactory,
- Configuration threadConfig,
- LogDelegate logDel)
- : base(processorFactory, serverTransport, inputTransportFactory, outputTransportFactory,
- inputProtocolFactory, outputProtocolFactory, logDel)
- {
- lock (typeof(TThreadPoolServer))
- {
- if ((threadConfig.MaxWorkerThreads > 0) || (threadConfig.MaxIOThreads > 0))
- {
- int work, comm;
- ThreadPool.GetMaxThreads(out work, out comm);
- if (threadConfig.MaxWorkerThreads > 0)
- work = threadConfig.MaxWorkerThreads;
- if (threadConfig.MaxIOThreads > 0)
- comm = threadConfig.MaxIOThreads;
- if (!ThreadPool.SetMaxThreads(work, comm))
- throw new Exception("Error: could not SetMaxThreads in ThreadPool");
- }
-
- if ((threadConfig.MinWorkerThreads > 0) || (threadConfig.MinIOThreads > 0))
- {
- int work, comm;
- ThreadPool.GetMinThreads(out work, out comm);
- if (threadConfig.MinWorkerThreads > 0)
- work = threadConfig.MinWorkerThreads;
- if (threadConfig.MinIOThreads > 0)
- comm = threadConfig.MinIOThreads;
- if (!ThreadPool.SetMinThreads(work, comm))
- throw new Exception("Error: could not SetMinThreads in ThreadPool");
- }
- }
- }
-
-
- /// <summary>
- /// Use new ThreadPool thread for each new client connection.
- /// </summary>
- public override void Serve()
- {
- try
- {
- serverTransport.Listen();
- }
- catch (TTransportException ttx)
- {
- logDelegate("Error, could not listen on ServerTransport: " + ttx);
- return;
- }
-
- //Fire the preServe server event when server is up but before any client connections
- if (serverEventHandler != null)
- serverEventHandler.preServe();
-
- while (!stop)
- {
- int failureCount = 0;
- try
- {
- TTransport client = serverTransport.Accept();
- ThreadPool.QueueUserWorkItem(this.Execute, client);
- }
- catch (TTransportException ttx)
- {
- if (!stop || ttx.Type != TTransportException.ExceptionType.Interrupted)
- {
- ++failureCount;
- logDelegate(ttx.ToString());
- }
-
- }
- }
-
- if (stop)
- {
- try
- {
- serverTransport.Close();
- }
- catch (TTransportException ttx)
- {
- logDelegate("TServerTransport failed on close: " + ttx.Message);
- }
- stop = false;
- }
- }
-
- /// <summary>
- /// Loops on processing a client forever
- /// threadContext will be a TTransport instance
- /// </summary>
- /// <param name="threadContext"></param>
- private void Execute(object threadContext)
- {
- using (TTransport client = (TTransport)threadContext)
- {
- TProcessor processor = processorFactory.GetProcessor(client, this);
- TTransport inputTransport = null;
- TTransport outputTransport = null;
- TProtocol inputProtocol = null;
- TProtocol outputProtocol = null;
- object connectionContext = null;
- try
- {
- try
- {
- inputTransport = inputTransportFactory.GetTransport(client);
- outputTransport = outputTransportFactory.GetTransport(client);
- inputProtocol = inputProtocolFactory.GetProtocol(inputTransport);
- outputProtocol = outputProtocolFactory.GetProtocol(outputTransport);
-
- //Recover event handler (if any) and fire createContext server event when a client connects
- if (serverEventHandler != null)
- connectionContext = serverEventHandler.createContext(inputProtocol, outputProtocol);
-
- //Process client requests until client disconnects
- while (!stop)
- {
- if (!inputTransport.Peek())
- break;
-
- //Fire processContext server event
- //N.B. This is the pattern implemented in C++ and the event fires provisionally.
- //That is to say it may be many minutes between the event firing and the client request
- //actually arriving or the client may hang up without ever makeing a request.
- if (serverEventHandler != null)
- serverEventHandler.processContext(connectionContext, inputTransport);
- //Process client request (blocks until transport is readable)
- if (!processor.Process(inputProtocol, outputProtocol))
- break;
- }
- }
- catch (TTransportException)
- {
- //Usually a client disconnect, expected
- }
- catch (Exception x)
- {
- //Unexpected
- logDelegate("Error: " + x);
- }
-
- //Fire deleteContext server event after client disconnects
- if (serverEventHandler != null)
- serverEventHandler.deleteContext(connectionContext, inputProtocol, outputProtocol);
-
- }
- finally
- {
- //Close transports
- if (inputTransport != null)
- inputTransport.Close();
- if (outputTransport != null)
- outputTransport.Close();
-
- // disposable stuff should be disposed
- if (inputProtocol != null)
- inputProtocol.Dispose();
- if (outputProtocol != null)
- outputProtocol.Dispose();
- if (inputTransport != null)
- inputTransport.Dispose();
- if (outputTransport != null)
- outputTransport.Dispose();
- }
- }
- }
-
- public override void Stop()
- {
- stop = true;
- serverTransport.Close();
- }
- }
-}
diff --git a/lib/csharp/src/Server/TThreadedServer.cs b/lib/csharp/src/Server/TThreadedServer.cs
deleted file mode 100644
index cc051a33b..000000000
--- a/lib/csharp/src/Server/TThreadedServer.cs
+++ /dev/null
@@ -1,282 +0,0 @@
-/**
- * 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 System.Threading;
-using Thrift.Collections;
-using Thrift.Protocol;
-using Thrift.Transport;
-
-namespace Thrift.Server
-{
- /// <summary>
- /// Server that uses C# threads (as opposed to the ThreadPool) when handling requests.
- /// </summary>
- public class TThreadedServer : TServer
- {
- private const int DEFAULT_MAX_THREADS = 100;
- private volatile bool stop = false;
- private readonly int maxThreads;
-
- private Queue<TTransport> clientQueue;
- private THashSet<Thread> clientThreads;
- private object clientLock;
- private Thread workerThread;
-
- public int ClientThreadsCount
- {
- get { return clientThreads.Count; }
- }
-
- public TThreadedServer(TProcessor processor, TServerTransport serverTransport)
- : this(new TSingletonProcessorFactory(processor), serverTransport,
- new TTransportFactory(), new TTransportFactory(),
- new TBinaryProtocol.Factory(), new TBinaryProtocol.Factory(),
- DEFAULT_MAX_THREADS, DefaultLogDelegate)
- {
- }
-
- public TThreadedServer(TProcessor processor, TServerTransport serverTransport, LogDelegate logDelegate)
- : this(new TSingletonProcessorFactory(processor), serverTransport,
- new TTransportFactory(), new TTransportFactory(),
- new TBinaryProtocol.Factory(), new TBinaryProtocol.Factory(),
- DEFAULT_MAX_THREADS, logDelegate)
- {
- }
-
-
- public TThreadedServer(TProcessor processor,
- TServerTransport serverTransport,
- TTransportFactory transportFactory,
- TProtocolFactory protocolFactory)
- : this(new TSingletonProcessorFactory(processor), serverTransport,
- transportFactory, transportFactory,
- protocolFactory, protocolFactory,
- DEFAULT_MAX_THREADS, DefaultLogDelegate)
- {
- }
-
- public TThreadedServer(TProcessorFactory processorFactory,
- TServerTransport serverTransport,
- TTransportFactory transportFactory,
- TProtocolFactory protocolFactory)
- : this(processorFactory, serverTransport,
- transportFactory, transportFactory,
- protocolFactory, protocolFactory,
- DEFAULT_MAX_THREADS, DefaultLogDelegate)
- {
- }
- public TThreadedServer(TProcessorFactory processorFactory,
- TServerTransport serverTransport,
- TTransportFactory inputTransportFactory,
- TTransportFactory outputTransportFactory,
- TProtocolFactory inputProtocolFactory,
- TProtocolFactory outputProtocolFactory,
- int maxThreads, LogDelegate logDel)
- : base(processorFactory, serverTransport, inputTransportFactory, outputTransportFactory,
- inputProtocolFactory, outputProtocolFactory, logDel)
- {
- this.maxThreads = maxThreads;
- clientQueue = new Queue<TTransport>();
- clientLock = new object();
- clientThreads = new THashSet<Thread>();
- }
-
- /// <summary>
- /// Use new Thread for each new client connection. block until numConnections &lt; maxThreads.
- /// </summary>
- public override void Serve()
- {
- try
- {
- //start worker thread
- workerThread = new Thread(new ThreadStart(Execute));
- workerThread.Start();
- serverTransport.Listen();
- }
- catch (TTransportException ttx)
- {
- logDelegate("Error, could not listen on ServerTransport: " + ttx);
- return;
- }
-
- //Fire the preServe server event when server is up but before any client connections
- if (serverEventHandler != null)
- serverEventHandler.preServe();
-
- while (!stop)
- {
- int failureCount = 0;
- try
- {
- TTransport client = serverTransport.Accept();
- lock (clientLock)
- {
- clientQueue.Enqueue(client);
- Monitor.Pulse(clientLock);
- }
- }
- catch (TTransportException ttx)
- {
- if (!stop || ttx.Type != TTransportException.ExceptionType.Interrupted)
- {
- ++failureCount;
- logDelegate(ttx.ToString());
- }
-
- }
- }
-
- if (stop)
- {
- try
- {
- serverTransport.Close();
- }
- catch (TTransportException ttx)
- {
- logDelegate("TServeTransport failed on close: " + ttx.Message);
- }
- stop = false;
- }
- }
-
- /// <summary>
- /// Loops on processing a client forever
- /// </summary>
- private void Execute()
- {
- while (!stop)
- {
- TTransport client;
- Thread t;
- lock (clientLock)
- {
- //don't dequeue if too many connections
- while (clientThreads.Count >= maxThreads)
- {
- Monitor.Wait(clientLock);
- }
-
- while (clientQueue.Count == 0)
- {
- Monitor.Wait(clientLock);
- }
-
- client = clientQueue.Dequeue();
- t = new Thread(new ParameterizedThreadStart(ClientWorker));
- clientThreads.Add(t);
- }
- //start processing requests from client on new thread
- t.Start(client);
- }
- }
-
- private void ClientWorker(object context)
- {
- using (TTransport client = (TTransport)context)
- {
- TProcessor processor = processorFactory.GetProcessor(client);
- TTransport inputTransport = null;
- TTransport outputTransport = null;
- TProtocol inputProtocol = null;
- TProtocol outputProtocol = null;
- object connectionContext = null;
- try
- {
- try
- {
- inputTransport = inputTransportFactory.GetTransport(client);
- outputTransport = outputTransportFactory.GetTransport(client);
- inputProtocol = inputProtocolFactory.GetProtocol(inputTransport);
- outputProtocol = outputProtocolFactory.GetProtocol(outputTransport);
-
- //Recover event handler (if any) and fire createContext server event when a client connects
- if (serverEventHandler != null)
- connectionContext = serverEventHandler.createContext(inputProtocol, outputProtocol);
-
- //Process client requests until client disconnects
- while (!stop)
- {
- if (!inputTransport.Peek())
- break;
-
- //Fire processContext server event
- //N.B. This is the pattern implemented in C++ and the event fires provisionally.
- //That is to say it may be many minutes between the event firing and the client request
- //actually arriving or the client may hang up without ever makeing a request.
- if (serverEventHandler != null)
- serverEventHandler.processContext(connectionContext, inputTransport);
- //Process client request (blocks until transport is readable)
- if (!processor.Process(inputProtocol, outputProtocol))
- break;
- }
- }
- catch (TTransportException)
- {
- //Usually a client disconnect, expected
- }
- catch (Exception x)
- {
- //Unexpected
- logDelegate("Error: " + x);
- }
-
- //Fire deleteContext server event after client disconnects
- if (serverEventHandler != null)
- serverEventHandler.deleteContext(connectionContext, inputProtocol, outputProtocol);
-
- lock (clientLock)
- {
- clientThreads.Remove(Thread.CurrentThread);
- Monitor.Pulse(clientLock);
- }
-
- }
- finally
- {
- //Close transports
- if (inputTransport != null)
- inputTransport.Close();
- if (outputTransport != null)
- outputTransport.Close();
-
- // disposable stuff should be disposed
- if (inputProtocol != null)
- inputProtocol.Dispose();
- if (outputProtocol != null)
- outputProtocol.Dispose();
- }
- }
- }
-
- public override void Stop()
- {
- stop = true;
- serverTransport.Close();
- //clean up all the threads myself
- workerThread.Abort();
- foreach (Thread t in clientThreads)
- {
- t.Abort();
- }
- }
- }
-}
diff --git a/lib/csharp/src/TApplicationException.cs b/lib/csharp/src/TApplicationException.cs
deleted file mode 100644
index 8dd7ae578..000000000
--- a/lib/csharp/src/TApplicationException.cs
+++ /dev/null
@@ -1,146 +0,0 @@
-/**
- * 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.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using Thrift.Protocol;
-
-namespace Thrift
-{
- public class TApplicationException : TException
- {
- protected ExceptionType type;
-
- public TApplicationException()
- {
- }
-
- public TApplicationException(ExceptionType type)
- {
- this.type = type;
- }
-
- public TApplicationException(ExceptionType type, string message)
- : base(message, null) // TApplicationException is serializable, but we never serialize InnerException
- {
- this.type = type;
- }
-
- public static TApplicationException Read(TProtocol iprot)
- {
- TField field;
-
- string message = null;
- ExceptionType type = ExceptionType.Unknown;
-
- iprot.ReadStructBegin();
- while (true)
- {
- field = iprot.ReadFieldBegin();
- if (field.Type == TType.Stop)
- {
- break;
- }
-
- switch (field.ID)
- {
- case 1:
- if (field.Type == TType.String)
- {
- message = iprot.ReadString();
- }
- else
- {
- TProtocolUtil.Skip(iprot, field.Type);
- }
- break;
- case 2:
- if (field.Type == TType.I32)
- {
- type = (ExceptionType)iprot.ReadI32();
- }
- else
- {
- TProtocolUtil.Skip(iprot, field.Type);
- }
- break;
- default:
- TProtocolUtil.Skip(iprot, field.Type);
- break;
- }
-
- iprot.ReadFieldEnd();
- }
-
- iprot.ReadStructEnd();
-
- return new TApplicationException(type, message);
- }
-
- public void Write(TProtocol oprot)
- {
- TStruct struc = new TStruct("TApplicationException");
- TField field = new TField();
-
- oprot.WriteStructBegin(struc);
-
- if (!string.IsNullOrEmpty(Message))
- {
- field.Name = "message";
- field.Type = TType.String;
- field.ID = 1;
- oprot.WriteFieldBegin(field);
- oprot.WriteString(Message);
- oprot.WriteFieldEnd();
- }
-
- field.Name = "type";
- field.Type = TType.I32;
- field.ID = 2;
- oprot.WriteFieldBegin(field);
- oprot.WriteI32((int)type);
- oprot.WriteFieldEnd();
- oprot.WriteFieldStop();
- oprot.WriteStructEnd();
- }
-
- public enum ExceptionType
- {
- Unknown,
- UnknownMethod,
- InvalidMessageType,
- WrongMethodName,
- BadSequenceID,
- MissingResult,
- InternalError,
- ProtocolError,
- InvalidTransform,
- InvalidProtocol,
- UnsupportedClientType
- }
-
- public ExceptionType Type
- {
- get { return type; }
- }
- }
-}
diff --git a/lib/csharp/src/TAsyncProcessor.cs b/lib/csharp/src/TAsyncProcessor.cs
deleted file mode 100644
index ab432255b..000000000
--- a/lib/csharp/src/TAsyncProcessor.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * 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.Threading.Tasks;
-using Thrift.Protocol;
-
-namespace Thrift
-{
- /// <summary>
- /// Processes a message asynchronously.
- /// </summary>
- public interface TAsyncProcessor
- {
- /// <summary>
- /// Processes the next part of the message.
- /// </summary>
- /// <param name="iprot">The input protocol.</param>
- /// <param name="oprot">The output protocol.</param>
- /// <returns>true if there's more to process, false otherwise.</returns>
- Task<bool> ProcessAsync(TProtocol iprot, TProtocol oprot);
- }
-}
diff --git a/lib/csharp/src/TControllingHandler.cs b/lib/csharp/src/TControllingHandler.cs
deleted file mode 100644
index 7b5203a5f..000000000
--- a/lib/csharp/src/TControllingHandler.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * 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 Thrift.Server;
-
-namespace Thrift
-{
- public interface TControllingHandler
- {
- TServer server { get; set; }
- }
-}
diff --git a/lib/csharp/src/TException.cs b/lib/csharp/src/TException.cs
deleted file mode 100644
index b9fae6e9f..000000000
--- a/lib/csharp/src/TException.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * 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.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-
-namespace Thrift
-{
- public class TException : Exception
- {
- public TException()
- {
- }
-
- public TException(string message, Exception inner = null)
- : base(message, inner)
- {
- }
-
- }
-}
diff --git a/lib/csharp/src/TProcessor.cs b/lib/csharp/src/TProcessor.cs
deleted file mode 100644
index 71ce75508..000000000
--- a/lib/csharp/src/TProcessor.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * 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.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using Thrift.Protocol;
-
-namespace Thrift
-{
- public interface TProcessor
- {
- bool Process(TProtocol iprot, TProtocol oprot);
- }
-}
diff --git a/lib/csharp/src/TProcessorFactory.cs b/lib/csharp/src/TProcessorFactory.cs
deleted file mode 100644
index fdf631bc7..000000000
--- a/lib/csharp/src/TProcessorFactory.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * 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 Thrift.Server;
-using Thrift.Transport;
-
-namespace Thrift
-{
- public interface TProcessorFactory
- {
- TProcessor GetProcessor(TTransport trans, TServer server = null);
- }
-}
diff --git a/lib/csharp/src/TPrototypeProcessorFactory.cs b/lib/csharp/src/TPrototypeProcessorFactory.cs
deleted file mode 100644
index 0b47261fb..000000000
--- a/lib/csharp/src/TPrototypeProcessorFactory.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * 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 System.Linq;
-using System.Text;
-using Thrift.Server;
-using Thrift.Transport;
-
-namespace Thrift
-{
- public class TPrototypeProcessorFactory<P, H> : TProcessorFactory where P : TProcessor
- {
- object[] handlerArgs = null;
-
- public TPrototypeProcessorFactory()
- {
- handlerArgs = new object[0];
- }
-
- public TPrototypeProcessorFactory(params object[] handlerArgs)
- {
- this.handlerArgs = handlerArgs;
- }
-
- public TProcessor GetProcessor(TTransport trans, TServer server = null)
- {
- H handler = (H)Activator.CreateInstance(typeof(H), handlerArgs);
-
- TControllingHandler handlerServerRef = handler as TControllingHandler;
- if (handlerServerRef != null)
- {
- handlerServerRef.server = server;
- }
- return Activator.CreateInstance(typeof(P), new object[] { handler }) as TProcessor;
- }
- }
-}
diff --git a/lib/csharp/src/TSingletonProcessorFactory.cs b/lib/csharp/src/TSingletonProcessorFactory.cs
deleted file mode 100644
index ed2897ba3..000000000
--- a/lib/csharp/src/TSingletonProcessorFactory.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * 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 System.Linq;
-using System.Text;
-using Thrift.Server;
-using Thrift.Transport;
-
-namespace Thrift
-{
- public class TSingletonProcessorFactory : TProcessorFactory
- {
- private readonly TProcessor processor_;
-
- public TSingletonProcessorFactory(TProcessor processor)
- {
- processor_ = processor;
- }
-
- public TProcessor GetProcessor(TTransport trans, TServer server = null)
- {
- return processor_;
- }
- }
-}
diff --git a/lib/csharp/src/Thrift.45.csproj b/lib/csharp/src/Thrift.45.csproj
deleted file mode 100644
index 146e7f8ed..000000000
--- a/lib/csharp/src/Thrift.45.csproj
+++ /dev/null
@@ -1,138 +0,0 @@
-<?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="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProjectGuid>{EBCE35DA-CF6A-42BC-A357-A9C09B534299}</ProjectGuid>
- <OutputType>Library</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <RootNamespace>Thrift</RootNamespace>
- <AssemblyName>Thrift45</AssemblyName>
- <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
- <FileAlignment>512</FileAlignment>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>portable</DebugType>
- <Optimize>false</Optimize>
- <OutputPath>bin\Debug\</OutputPath>
- <DefineConstants>TRACE;DEBUG;NET45</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <DebugType>portable</DebugType>
- <Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
- <DefineConstants>TRACE;NET45</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- </PropertyGroup>
- <PropertyGroup>
- <SignAssembly>true</SignAssembly>
- </PropertyGroup>
- <PropertyGroup>
- <AssemblyOriginatorKeyFile>thrift.snk</AssemblyOriginatorKeyFile>
- </PropertyGroup>
- <ItemGroup>
- <Reference Include="System" />
- <Reference Include="System.Core" />
- <Reference Include="System.Web" />
- <Reference Include="System.Xml.Linq" />
- <Reference Include="System.Data.DataSetExtensions" />
- <Reference Include="Microsoft.CSharp" />
- <Reference Include="System.Data" />
- <Reference Include="System.Xml" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="Collections\TCollections.cs" />
- <Compile Include="Collections\THashSet.cs" />
- <Compile Include="Properties\AssemblyInfo.cs" />
- <Compile Include="Protocol\TAbstractBase.cs" />
- <Compile Include="Protocol\TBase.cs" />
- <Compile Include="Protocol\TBase64Utils.cs" />
- <Compile Include="Protocol\TBinaryProtocol.cs" />
- <Compile Include="Protocol\TCompactProtocol.cs" />
- <Compile Include="Protocol\TField.cs" />
- <Compile Include="Protocol\TJSONProtocol.cs" />
- <Compile Include="Protocol\TList.cs" />
- <Compile Include="Protocol\TMap.cs" />
- <Compile Include="Protocol\TMessage.cs" />
- <Compile Include="Protocol\TMessageType.cs" />
- <Compile Include="Protocol\TMultiplexedProcessor.cs" />
- <Compile Include="Protocol\TMultiplexedProtocol.cs" />
- <Compile Include="Protocol\TProtocol.cs" />
- <Compile Include="Protocol\TProtocolDecorator.cs" />
- <Compile Include="Protocol\TProtocolException.cs" />
- <Compile Include="Protocol\TProtocolFactory.cs" />
- <Compile Include="Protocol\TProtocolUtil.cs" />
- <Compile Include="Protocol\TSet.cs" />
- <Compile Include="Protocol\TStruct.cs" />
- <Compile Include="Protocol\TType.cs" />
- <Compile Include="Server\TServer.cs" />
- <Compile Include="Server\TServerEventHandler.cs" />
- <Compile Include="Server\TSimpleServer.cs" />
- <Compile Include="Server\TThreadedServer.cs" />
- <Compile Include="Server\TThreadPoolServer.cs" />
- <Compile Include="TApplicationException.cs" />
- <Compile Include="TAsyncProcessor.cs" />
- <Compile Include="TControllingHandler.cs" />
- <Compile Include="TException.cs" />
- <Compile Include="TProcessor.cs" />
- <Compile Include="TProcessorFactory.cs" />
- <Compile Include="TPrototypeProcessorFactory.cs" />
- <Compile Include="Transport\TBufferedTransport.cs" />
- <Compile Include="Transport\TFramedTransport.cs" />
- <Compile Include="Transport\THttpClient.cs" />
- <Compile Include="Transport\THttpHandler.cs" />
- <Compile Include="Transport\THttpTaskAsyncHandler.cs" />
- <Compile Include="Transport\TMemoryBuffer.cs" />
- <Compile Include="Transport\TNamedPipeClientTransport.cs" />
- <Compile Include="Transport\TNamedPipeServerTransport.cs" />
- <Compile Include="Transport\TServerSocket.cs" />
- <Compile Include="Transport\TServerTransport.cs" />
- <Compile Include="Transport\TSilverlightSocket.cs" />
- <Compile Include="Transport\TSocket.cs" />
- <Compile Include="Transport\TSocketVersionizer.cs" />
- <Compile Include="Transport\TStreamTransport.cs" />
- <Compile Include="Transport\TTLSServerSocket.cs" />
- <Compile Include="Transport\TTLSSocket.cs" />
- <Compile Include="Transport\TTransport.cs" />
- <Compile Include="Transport\TTransportException.cs" />
- <Compile Include="Transport\TTransportFactory.cs" />
- <Compile Include="TSingletonProcessorFactory.cs" />
- </ItemGroup>
- <ItemGroup>
- <Folder Include="Server\Collections\" />
- <Folder Include="Server\Protocol\" />
- </ItemGroup>
- <ItemGroup>
- <None Include="thrift.snk" />
- </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/lib/csharp/src/Thrift.csproj b/lib/csharp/src/Thrift.csproj
deleted file mode 100644
index 13054821d..000000000
--- a/lib/csharp/src/Thrift.csproj
+++ /dev/null
@@ -1,166 +0,0 @@
-<?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="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProjectGuid>{499EB63C-D74C-47E8-AE48-A2FC94538E9D}</ProjectGuid>
- <ProductVersion>9.0.21022</ProductVersion>
- <SchemaVersion>2.0</SchemaVersion>
- <OutputType>Library</OutputType>
- <NoStandardLibraries>false</NoStandardLibraries>
- <AssemblyName>Thrift</AssemblyName>
- <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
- <FileAlignment>512</FileAlignment>
- <RootNamespace>Thrift</RootNamespace>
- <FileUpgradeFlags>
- </FileUpgradeFlags>
- <OldToolsVersion>3.5</OldToolsVersion>
- <UpgradeBackupLocation />
- <PublishUrl>publish\</PublishUrl>
- <Install>true</Install>
- <InstallFrom>Disk</InstallFrom>
- <UpdateEnabled>false</UpdateEnabled>
- <UpdateMode>Foreground</UpdateMode>
- <UpdateInterval>7</UpdateInterval>
- <UpdateIntervalUnits>Days</UpdateIntervalUnits>
- <UpdatePeriodically>false</UpdatePeriodically>
- <UpdateRequired>false</UpdateRequired>
- <MapFileExtensions>true</MapFileExtensions>
- <ApplicationRevision>0</ApplicationRevision>
- <ApplicationVersion>0.14.0.0</ApplicationVersion>
- <IsWebBootstrapper>false</IsWebBootstrapper>
- <UseApplicationTrust>false</UseApplicationTrust>
- <BootstrapperEnabled>true</BootstrapperEnabled>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>portable</DebugType>
- <Optimize>false</Optimize>
- <OutputPath>bin\Debug\</OutputPath>
- <DefineConstants>TRACE;DEBUG</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <DebugType>portable</DebugType>
- <Optimize>true</Optimize>
- <OutputPath>bin\Release\</OutputPath>
- <DefineConstants>
- </DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <PropertyGroup>
- <SignAssembly>true</SignAssembly>
- </PropertyGroup>
- <PropertyGroup>
- <AssemblyOriginatorKeyFile>thrift.snk</AssemblyOriginatorKeyFile>
- </PropertyGroup>
- <ItemGroup>
- <Reference Include="System" />
- <Reference Include="System.Core">
- <RequiredTargetFramework>3.5</RequiredTargetFramework>
- </Reference>
- <Reference Include="System.Web" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="Collections\TCollections.cs" />
- <Compile Include="Collections\THashSet.cs" />
- <Compile Include="Net35\ExtensionsNet35.cs" />
- <Compile Include="Properties\AssemblyInfo.cs" />
- <Compile Include="Protocol\TAbstractBase.cs" />
- <Compile Include="Protocol\TBase.cs" />
- <Compile Include="Protocol\TBase64Utils.cs" />
- <Compile Include="Protocol\TBinaryProtocol.cs" />
- <Compile Include="Protocol\TCompactProtocol.cs" />
- <Compile Include="Protocol\TField.cs" />
- <Compile Include="Protocol\TJSONProtocol.cs" />
- <Compile Include="Protocol\TList.cs" />
- <Compile Include="Protocol\TMap.cs" />
- <Compile Include="Protocol\TMessage.cs" />
- <Compile Include="Protocol\TMessageType.cs" />
- <Compile Include="Protocol\TMultiplexedProcessor.cs" />
- <Compile Include="Protocol\TMultiplexedProtocol.cs" />
- <Compile Include="Protocol\TProtocol.cs" />
- <Compile Include="Protocol\TProtocolDecorator.cs" />
- <Compile Include="Protocol\TProtocolException.cs" />
- <Compile Include="Protocol\TProtocolFactory.cs" />
- <Compile Include="Protocol\TProtocolUtil.cs" />
- <Compile Include="Protocol\TSet.cs" />
- <Compile Include="Protocol\TStruct.cs" />
- <Compile Include="Protocol\TType.cs" />
- <Compile Include="Server\TServer.cs" />
- <Compile Include="Server\TServerEventHandler.cs" />
- <Compile Include="Server\TSimpleServer.cs" />
- <Compile Include="Server\TThreadedServer.cs" />
- <Compile Include="Server\TThreadPoolServer.cs" />
- <Compile Include="TApplicationException.cs" />
- <Compile Include="TControllingHandler.cs" />
- <Compile Include="TException.cs" />
- <Compile Include="TProcessor.cs" />
- <Compile Include="TProcessorFactory.cs" />
- <Compile Include="TPrototypeProcessorFactory.cs" />
- <Compile Include="Transport\TBufferedTransport.cs" />
- <Compile Include="Transport\TFramedTransport.cs" />
- <Compile Include="Transport\THttpClient.cs" />
- <Compile Include="Transport\THttpHandler.cs" />
- <Compile Include="Transport\TMemoryBuffer.cs" />
- <Compile Include="Transport\TNamedPipeClientTransport.cs" />
- <Compile Include="Transport\TNamedPipeServerTransport.cs" />
- <Compile Include="Transport\TServerSocket.cs" />
- <Compile Include="Transport\TServerTransport.cs" />
- <Compile Include="Transport\TSocket.cs" />
- <Compile Include="Transport\TSocketVersionizer.cs" />
- <Compile Include="Transport\TStreamTransport.cs" />
- <Compile Include="Transport\TTLSServerSocket.cs" />
- <Compile Include="Transport\TTLSSocket.cs" />
- <Compile Include="Transport\TTransport.cs" />
- <Compile Include="Transport\TTransportException.cs" />
- <Compile Include="Transport\TTransportFactory.cs" />
- <Compile Include="TSingletonProcessorFactory.cs" />
- </ItemGroup>
- <ItemGroup>
- <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
- <Install>false</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5 SP1</ProductName>
- <Install>true</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
- <Visible>False</Visible>
- <ProductName>Windows Installer 3.1</ProductName>
- <Install>true</Install>
- </BootstrapperPackage>
- </ItemGroup>
- <ItemGroup>
- <None Include="thrift.snk" />
- </ItemGroup>
- <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" />
- <ProjectExtensions>
- <VisualStudio AllowExistingFolder="true" />
- </ProjectExtensions>
-</Project> \ No newline at end of file
diff --git a/lib/csharp/src/Thrift.sln b/lib/csharp/src/Thrift.sln
deleted file mode 100644
index a29e46882..000000000
--- a/lib/csharp/src/Thrift.sln
+++ /dev/null
@@ -1,47 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Thrift", "Thrift.csproj", "{499EB63C-D74C-47E8-AE48-A2FC94538E9D}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ThriftTest", "..\test\ThriftTest\ThriftTest.csproj", "{48DD757F-CA95-4DD7-BDA4-58DB6F108C2C}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ThriftMSBuildTask", "..\ThriftMSBuildTask\ThriftMSBuildTask.csproj", "{EC0A0231-66EA-4593-A792-C6CA3BB8668E}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Thrift.45", "Thrift.45.csproj", "{EBCE35DA-CF6A-42BC-A357-A9C09B534299}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ThriftMVCTest", "..\test\ThriftMVCTest\ThriftMVCTest.csproj", "{891B4487-C7BA-427E-BBC8-4C596C229A10}"
-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
- {48DD757F-CA95-4DD7-BDA4-58DB6F108C2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {48DD757F-CA95-4DD7-BDA4-58DB6F108C2C}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {48DD757F-CA95-4DD7-BDA4-58DB6F108C2C}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {48DD757F-CA95-4DD7-BDA4-58DB6F108C2C}.Release|Any CPU.Build.0 = Release|Any CPU
- {EC0A0231-66EA-4593-A792-C6CA3BB8668E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {EC0A0231-66EA-4593-A792-C6CA3BB8668E}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {EC0A0231-66EA-4593-A792-C6CA3BB8668E}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {EC0A0231-66EA-4593-A792-C6CA3BB8668E}.Release|Any CPU.Build.0 = Release|Any CPU
- {EBCE35DA-CF6A-42BC-A357-A9C09B534299}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {EBCE35DA-CF6A-42BC-A357-A9C09B534299}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {EBCE35DA-CF6A-42BC-A357-A9C09B534299}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {EBCE35DA-CF6A-42BC-A357-A9C09B534299}.Release|Any CPU.Build.0 = Release|Any CPU
- {891B4487-C7BA-427E-BBC8-4C596C229A10}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {891B4487-C7BA-427E-BBC8-4C596C229A10}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {891B4487-C7BA-427E-BBC8-4C596C229A10}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {891B4487-C7BA-427E-BBC8-4C596C229A10}.Release|Any CPU.Build.0 = Release|Any CPU
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(MonoDevelopProperties) = preSolution
- StartupItem = Thrift.csproj
- EndGlobalSection
-EndGlobal
diff --git a/lib/csharp/src/Transport/TBufferedTransport.cs b/lib/csharp/src/Transport/TBufferedTransport.cs
deleted file mode 100644
index 887098810..000000000
--- a/lib/csharp/src/Transport/TBufferedTransport.cs
+++ /dev/null
@@ -1,194 +0,0 @@
-/**
- * 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.IO;
-
-namespace Thrift.Transport
-{
- public class TBufferedTransport : TTransport, IDisposable
- {
- private readonly int bufSize;
- private readonly MemoryStream inputBuffer = new MemoryStream(0);
- private readonly MemoryStream outputBuffer = new MemoryStream(0);
- private readonly TTransport transport;
-
- public TBufferedTransport(TTransport transport, int bufSize = 1024)
- {
- if (transport == null)
- throw new ArgumentNullException("transport");
- if (bufSize <= 0)
- throw new ArgumentException("bufSize", "Buffer size must be a positive number.");
- this.transport = transport;
- this.bufSize = bufSize;
- }
-
- public TTransport UnderlyingTransport
- {
- get
- {
- CheckNotDisposed();
- return transport;
- }
- }
-
- public override bool IsOpen
- {
- get
- {
- // We can legitimately throw here but be nice a bit.
- // CheckNotDisposed();
- return !_IsDisposed && transport.IsOpen;
- }
- }
-
- public override void Open()
- {
- CheckNotDisposed();
- transport.Open();
- }
-
- public override void Close()
- {
- CheckNotDisposed();
- transport.Close();
- }
-
- public override int Read(byte[] buf, int off, int len)
- {
- CheckNotDisposed();
- ValidateBufferArgs(buf, off, len);
- if (!IsOpen)
- throw new TTransportException(TTransportException.ExceptionType.NotOpen);
-
- if (inputBuffer.Capacity < bufSize)
- inputBuffer.Capacity = bufSize;
-
- while (true)
- {
- int got = inputBuffer.Read(buf, off, len);
- if (got > 0)
- return got;
-
- inputBuffer.Seek(0, SeekOrigin.Begin);
- inputBuffer.SetLength(inputBuffer.Capacity);
- int filled = transport.Read(inputBuffer.GetBuffer(), 0, (int)inputBuffer.Length);
- inputBuffer.SetLength(filled);
- if (filled == 0)
- return 0;
- }
- }
-
- public override void Write(byte[] buf, int off, int len)
- {
- CheckNotDisposed();
- ValidateBufferArgs(buf, off, len);
- if (!IsOpen)
- throw new TTransportException(TTransportException.ExceptionType.NotOpen);
- // Relative offset from "off" argument
- int offset = 0;
- if (outputBuffer.Length > 0)
- {
- int capa = (int)(outputBuffer.Capacity - outputBuffer.Length);
- int writeSize = capa <= len ? capa : len;
- outputBuffer.Write(buf, off, writeSize);
- offset += writeSize;
- if (writeSize == capa)
- {
- transport.Write(outputBuffer.GetBuffer(), 0, (int)outputBuffer.Length);
- outputBuffer.SetLength(0);
- }
- }
- while (len - offset >= bufSize)
- {
- transport.Write(buf, off + offset, bufSize);
- offset += bufSize;
- }
- int remain = len - offset;
- if (remain > 0)
- {
- if (outputBuffer.Capacity < bufSize)
- outputBuffer.Capacity = bufSize;
- outputBuffer.Write(buf, off + offset, remain);
- }
- }
-
- private void InternalFlush()
- {
- if (!IsOpen)
- throw new TTransportException(TTransportException.ExceptionType.NotOpen);
- if (outputBuffer.Length > 0)
- {
- transport.Write(outputBuffer.GetBuffer(), 0, (int)outputBuffer.Length);
- outputBuffer.SetLength(0);
- }
- }
-
- public override void Flush()
- {
- CheckNotDisposed();
- InternalFlush();
-
- transport.Flush();
- }
-
- public override IAsyncResult BeginFlush(AsyncCallback callback, object state)
- {
- CheckNotDisposed();
- InternalFlush();
-
- return transport.BeginFlush( callback, state);
- }
-
- public override void EndFlush(IAsyncResult asyncResult)
- {
- transport.EndFlush( asyncResult);
- }
-
-
-
- protected void CheckNotDisposed()
- {
- if (_IsDisposed)
- throw new ObjectDisposedException("TBufferedTransport");
- }
-
- #region " IDisposable Support "
- protected bool _IsDisposed { get; private set; }
-
- // IDisposable
- protected override void Dispose(bool disposing)
- {
- if (!_IsDisposed)
- {
- if (disposing)
- {
- if (inputBuffer != null)
- inputBuffer.Dispose();
- if (outputBuffer != null)
- outputBuffer.Dispose();
- if (transport != null)
- transport.Dispose();
- }
- }
- _IsDisposed = true;
- }
- #endregion
- }
-}
diff --git a/lib/csharp/src/Transport/TFramedTransport.cs b/lib/csharp/src/Transport/TFramedTransport.cs
deleted file mode 100644
index a746a3223..000000000
--- a/lib/csharp/src/Transport/TFramedTransport.cs
+++ /dev/null
@@ -1,205 +0,0 @@
-/**
- * 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.IO;
-
-namespace Thrift.Transport
-{
- public class TFramedTransport : TTransport, IDisposable
- {
- private readonly TTransport transport;
- private readonly MemoryStream writeBuffer = new MemoryStream(1024);
- private readonly MemoryStream readBuffer = new MemoryStream(1024);
-
- private const int HeaderSize = 4;
- private readonly byte[] headerBuf = new byte[HeaderSize];
-
- public class Factory : TTransportFactory
- {
- public override TTransport GetTransport(TTransport trans)
- {
- return new TFramedTransport(trans);
- }
- }
-
- public TFramedTransport(TTransport transport)
- {
- if (transport == null)
- throw new ArgumentNullException("transport");
- this.transport = transport;
- InitWriteBuffer();
- }
-
- public override void Open()
- {
- CheckNotDisposed();
- transport.Open();
- }
-
- public override bool IsOpen
- {
- get
- {
- // We can legitimately throw here but be nice a bit.
- // CheckNotDisposed();
- return !_IsDisposed && transport.IsOpen;
- }
- }
-
- public override void Close()
- {
- CheckNotDisposed();
- transport.Close();
- }
-
- public override int Read(byte[] buf, int off, int len)
- {
- CheckNotDisposed();
- ValidateBufferArgs(buf, off, len);
- if (!IsOpen)
- throw new TTransportException(TTransportException.ExceptionType.NotOpen);
- int got = readBuffer.Read(buf, off, len);
- if (got > 0)
- {
- return got;
- }
-
- // Read another frame of data
- ReadFrame();
-
- return readBuffer.Read(buf, off, len);
- }
-
- private void ReadFrame()
- {
- transport.ReadAll(headerBuf, 0, HeaderSize);
- int size = DecodeFrameSize(headerBuf);
-
- readBuffer.SetLength(size);
- readBuffer.Seek(0, SeekOrigin.Begin);
- byte[] buff = readBuffer.GetBuffer();
- transport.ReadAll(buff, 0, size);
- }
-
- public override void Write(byte[] buf, int off, int len)
- {
- CheckNotDisposed();
- ValidateBufferArgs(buf, off, len);
- if (!IsOpen)
- throw new TTransportException(TTransportException.ExceptionType.NotOpen);
- if (writeBuffer.Length + (long)len > (long)int.MaxValue)
- Flush();
- writeBuffer.Write(buf, off, len);
- }
-
- private void InternalFlush()
- {
- CheckNotDisposed();
- if (!IsOpen)
- throw new TTransportException(TTransportException.ExceptionType.NotOpen);
- byte[] buf = writeBuffer.GetBuffer();
- int len = (int)writeBuffer.Length;
- int data_len = len - HeaderSize;
- if (data_len < 0)
- throw new System.InvalidOperationException(); // logic error actually
-
- // Inject message header into the reserved buffer space
- EncodeFrameSize(data_len, buf);
-
- // Send the entire message at once
- transport.Write(buf, 0, len);
-
- InitWriteBuffer();
- }
-
- public override void Flush()
- {
- CheckNotDisposed();
- InternalFlush();
-
- transport.Flush();
- }
-
- public override IAsyncResult BeginFlush(AsyncCallback callback, object state)
- {
- CheckNotDisposed();
- InternalFlush();
-
- return transport.BeginFlush( callback, state);
- }
-
- public override void EndFlush(IAsyncResult asyncResult)
- {
- transport.EndFlush( asyncResult);
- }
-
- private void InitWriteBuffer()
- {
- // Reserve space for message header to be put right before sending it out
- writeBuffer.SetLength(HeaderSize);
- writeBuffer.Seek(0, SeekOrigin.End);
- }
-
- private static void EncodeFrameSize(int frameSize, byte[] buf)
- {
- buf[0] = (byte)(0xff & (frameSize >> 24));
- buf[1] = (byte)(0xff & (frameSize >> 16));
- buf[2] = (byte)(0xff & (frameSize >> 8));
- buf[3] = (byte)(0xff & (frameSize));
- }
-
- private static int DecodeFrameSize(byte[] buf)
- {
- return
- ((buf[0] & 0xff) << 24) |
- ((buf[1] & 0xff) << 16) |
- ((buf[2] & 0xff) << 8) |
- ((buf[3] & 0xff));
- }
-
-
- private void CheckNotDisposed()
- {
- if (_IsDisposed)
- throw new ObjectDisposedException("TFramedTransport");
- }
-
- #region " IDisposable Support "
- private bool _IsDisposed;
-
- // IDisposable
- protected override void Dispose(bool disposing)
- {
- if (!_IsDisposed)
- {
- if (disposing)
- {
- if (readBuffer != null)
- readBuffer.Dispose();
- if (writeBuffer != null)
- writeBuffer.Dispose();
- if (transport != null)
- transport.Dispose();
- }
- }
- _IsDisposed = true;
- }
- #endregion
- }
-}
diff --git a/lib/csharp/src/Transport/THttpClient.cs b/lib/csharp/src/Transport/THttpClient.cs
deleted file mode 100644
index 986799cd2..000000000
--- a/lib/csharp/src/Transport/THttpClient.cs
+++ /dev/null
@@ -1,486 +0,0 @@
-/**
- * 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 System.IO;
-using System.Net;
-using System.Threading;
-using System.Linq;
-using System.Security.Cryptography.X509Certificates;
-using System.IO.Compression;
-
-namespace Thrift.Transport
-{
- public class THttpClient : TTransport, IDisposable
- {
- private readonly Uri uri;
- private readonly X509Certificate[] certificates;
- private Stream inputStream;
- private MemoryStream outputStream = new MemoryStream();
-
- // Timeouts in milliseconds
- private int connectTimeout = 30000;
-
- private int readTimeout = 30000;
-
- private IDictionary<string, string> customHeaders = new Dictionary<string, string>();
- private string userAgent = "C#/THttpClient";
-
-#if !SILVERLIGHT
- private IWebProxy proxy = WebRequest.DefaultWebProxy;
-#endif
-
- public THttpClient(Uri u)
- : this(u, Enumerable.Empty<X509Certificate>())
- {
- }
- public THttpClient(Uri u, string userAgent)
- : this(u, userAgent, Enumerable.Empty<X509Certificate>())
- {
- }
-
- public THttpClient(Uri u, IEnumerable<X509Certificate> certificates)
- {
- uri = u;
- this.certificates = (certificates ?? Enumerable.Empty<X509Certificate>()).ToArray();
- }
- public THttpClient(Uri u, string userAgent, IEnumerable<X509Certificate> certificates)
- {
- uri = u;
- this.userAgent = userAgent;
- this.certificates = (certificates ?? Enumerable.Empty<X509Certificate>()).ToArray();
- }
-
- public int ConnectTimeout
- {
- set
- {
- connectTimeout = value;
- }
- }
-
- public int ReadTimeout
- {
- set
- {
- readTimeout = value;
- }
- }
-
- public IDictionary<string, string> CustomHeaders
- {
- get
- {
- return customHeaders;
- }
- }
-
-#if !SILVERLIGHT
- public IWebProxy Proxy
- {
- set
- {
- proxy = value;
- }
- }
-#endif
-
- public override bool IsOpen
- {
- get
- {
- return true;
- }
- }
-
- public override void Open()
- {
- }
-
- public override void Close()
- {
- if (inputStream != null)
- {
- inputStream.Close();
- inputStream = null;
- }
- if (outputStream != null)
- {
- outputStream.Close();
- outputStream = null;
- }
- }
-
- public override int Read(byte[] buf, int off, int len)
- {
- if (inputStream == null)
- {
- throw new TTransportException(TTransportException.ExceptionType.NotOpen, "No request has been sent");
- }
-
- try
- {
- int ret = inputStream.Read(buf, off, len);
-
- if (ret == -1)
- {
- throw new TTransportException(TTransportException.ExceptionType.EndOfFile, "No more data available");
- }
-
- return ret;
- }
- catch (IOException iox)
- {
- throw new TTransportException(TTransportException.ExceptionType.Unknown, iox.ToString(), iox);
- }
- }
-
- public override void Write(byte[] buf, int off, int len)
- {
- outputStream.Write(buf, off, len);
- }
-
-#if !SILVERLIGHT
- public override void Flush()
- {
- try
- {
- SendRequest();
- }
- finally
- {
- outputStream = new MemoryStream();
- }
- }
-
- private void SendRequest()
- {
- try
- {
- HttpWebRequest connection = CreateRequest();
- connection.Headers.Add("Accept-Encoding", "gzip, deflate");
-
- byte[] data = outputStream.ToArray();
- connection.ContentLength = data.Length;
-
- using (Stream requestStream = connection.GetRequestStream())
- {
- requestStream.Write(data, 0, data.Length);
-
- // Resolve HTTP hang that can happens after successive calls by making sure
- // that we release the response and response stream. To support this, we copy
- // the response to a memory stream.
- using (var response = connection.GetResponse())
- {
- using (var responseStream = response.GetResponseStream())
- {
- // Copy the response to a memory stream so that we can
- // cleanly close the response and response stream.
- inputStream = new MemoryStream();
- byte[] buffer = new byte[8192]; // multiple of 4096
- int bytesRead;
- while ((bytesRead = responseStream.Read(buffer, 0, buffer.Length)) > 0)
- {
- inputStream.Write(buffer, 0, bytesRead);
- }
- inputStream.Seek(0, 0);
- }
-
- var encodings = response.Headers.GetValues("Content-Encoding");
- if (encodings != null)
- {
- foreach (var encoding in encodings)
- {
- switch (encoding)
- {
- case "gzip":
- DecompressGZipped(ref inputStream);
- break;
- case "deflate":
- DecompressDeflated(ref inputStream);
- break;
- default:
- break;
- }
- }
- }
- }
- }
- }
- catch (IOException iox)
- {
- throw new TTransportException(TTransportException.ExceptionType.Unknown, iox.ToString(), iox);
- }
- catch (WebException wx)
- {
- throw new TTransportException(TTransportException.ExceptionType.Unknown, "Couldn't connect to server: " + wx, wx);
- }
- }
-
- private void DecompressDeflated(ref Stream inputStream)
- {
- var tmp = new MemoryStream();
- using (var decomp = new DeflateStream(inputStream, CompressionMode.Decompress))
- {
- decomp.CopyTo(tmp);
- }
- inputStream.Dispose();
- inputStream = tmp;
- inputStream.Seek(0, 0);
- }
-
- private void DecompressGZipped(ref Stream inputStream)
- {
- var tmp = new MemoryStream();
- using (var decomp = new GZipStream(inputStream, CompressionMode.Decompress))
- {
- decomp.CopyTo(tmp);
- }
- inputStream.Dispose();
- inputStream = tmp;
- inputStream.Seek(0, 0);
- }
-#endif
- private HttpWebRequest CreateRequest()
- {
- HttpWebRequest connection = (HttpWebRequest)WebRequest.Create(uri);
-
-
-#if !SILVERLIGHT
- // Adding certificates through code is not supported with WP7 Silverlight
- // see "Windows Phone 7 and Certificates_FINAL_121610.pdf"
- connection.ClientCertificates.AddRange(certificates);
-
- if (connectTimeout > 0)
- {
- connection.Timeout = connectTimeout;
- }
- if (readTimeout > 0)
- {
- connection.ReadWriteTimeout = readTimeout;
- }
-#endif
- // Make the request
- connection.ContentType = "application/x-thrift";
- connection.Accept = "application/x-thrift";
- connection.UserAgent = userAgent;
- connection.Method = "POST";
-#if !SILVERLIGHT
- connection.ProtocolVersion = HttpVersion.Version10;
-#endif
-
- //add custom headers here
- foreach (KeyValuePair<string, string> item in customHeaders)
- {
-#if !SILVERLIGHT
- connection.Headers.Add(item.Key, item.Value);
-#else
- connection.Headers[item.Key] = item.Value;
-#endif
- }
-
-#if !SILVERLIGHT
- connection.Proxy = proxy;
-#endif
-
- return connection;
- }
-
- public override IAsyncResult BeginFlush(AsyncCallback callback, object state)
- {
- // Extract request and reset buffer
- var data = outputStream.ToArray();
-
- //requestBuffer_ = new MemoryStream();
-
- try
- {
- // Create connection object
- var flushAsyncResult = new FlushAsyncResult(callback, state);
- flushAsyncResult.Connection = CreateRequest();
-
- flushAsyncResult.Data = data;
-
-
- flushAsyncResult.Connection.BeginGetRequestStream(GetRequestStreamCallback, flushAsyncResult);
- return flushAsyncResult;
-
- }
- catch (IOException iox)
- {
- throw new TTransportException(iox.ToString(), iox);
- }
- }
-
- public override void EndFlush(IAsyncResult asyncResult)
- {
- try
- {
- var flushAsyncResult = (FlushAsyncResult)asyncResult;
-
- if (!flushAsyncResult.IsCompleted)
- {
- var waitHandle = flushAsyncResult.AsyncWaitHandle;
- waitHandle.WaitOne(); // blocking INFINITEly
- waitHandle.Close();
- }
-
- if (flushAsyncResult.AsyncException != null)
- {
- throw flushAsyncResult.AsyncException;
- }
- }
- finally
- {
- outputStream = new MemoryStream();
- }
-
- }
-
- private void GetRequestStreamCallback(IAsyncResult asynchronousResult)
- {
- var flushAsyncResult = (FlushAsyncResult)asynchronousResult.AsyncState;
- try
- {
- var reqStream = flushAsyncResult.Connection.EndGetRequestStream(asynchronousResult);
- reqStream.Write(flushAsyncResult.Data, 0, flushAsyncResult.Data.Length);
- reqStream.Flush();
- reqStream.Close();
-
- // Start the asynchronous operation to get the response
- flushAsyncResult.Connection.BeginGetResponse(GetResponseCallback, flushAsyncResult);
- }
- catch (Exception exception)
- {
- flushAsyncResult.AsyncException = new TTransportException(exception.ToString(), exception);
- flushAsyncResult.UpdateStatusToComplete();
- flushAsyncResult.NotifyCallbackWhenAvailable();
- }
- }
-
- private void GetResponseCallback(IAsyncResult asynchronousResult)
- {
- var flushAsyncResult = (FlushAsyncResult)asynchronousResult.AsyncState;
- try
- {
- inputStream = flushAsyncResult.Connection.EndGetResponse(asynchronousResult).GetResponseStream();
- }
- catch (Exception exception)
- {
- flushAsyncResult.AsyncException = new TTransportException(exception.ToString(), exception);
- }
- flushAsyncResult.UpdateStatusToComplete();
- flushAsyncResult.NotifyCallbackWhenAvailable();
- }
-
- // Based on http://msmvps.com/blogs/luisabreu/archive/2009/06/15/multithreading-implementing-the-iasyncresult-interface.aspx
- class FlushAsyncResult : IAsyncResult
- {
- private volatile Boolean _isCompleted;
- private ManualResetEvent _evt;
- private readonly AsyncCallback _cbMethod;
- private readonly object _state;
-
- public FlushAsyncResult(AsyncCallback cbMethod, object state)
- {
- _cbMethod = cbMethod;
- _state = state;
- }
-
- internal byte[] Data { get; set; }
- internal HttpWebRequest Connection { get; set; }
- internal TTransportException AsyncException { get; set; }
-
- public object AsyncState
- {
- get { return _state; }
- }
- public WaitHandle AsyncWaitHandle
- {
- get { return GetEvtHandle(); }
- }
- public bool CompletedSynchronously
- {
- get { return false; }
- }
- public bool IsCompleted
- {
- get { return _isCompleted; }
- }
- private readonly object _locker = new object();
- private ManualResetEvent GetEvtHandle()
- {
- lock (_locker)
- {
- if (_evt == null)
- {
- _evt = new ManualResetEvent(false);
- }
- if (_isCompleted)
- {
- _evt.Set();
- }
- }
- return _evt;
- }
- internal void UpdateStatusToComplete()
- {
- _isCompleted = true; //1. set _iscompleted to true
- lock (_locker)
- {
- if (_evt != null)
- {
- _evt.Set(); //2. set the event, when it exists
- }
- }
- }
-
- internal void NotifyCallbackWhenAvailable()
- {
- if (_cbMethod != null)
- {
- _cbMethod(this);
- }
- }
- }
-
- #region " IDisposable Support "
- private bool _IsDisposed;
-
- // IDisposable
- protected override void Dispose(bool disposing)
- {
- if (!_IsDisposed)
- {
- if (disposing)
- {
- if (inputStream != null)
- inputStream.Dispose();
- if (outputStream != null)
- outputStream.Dispose();
- }
- }
- _IsDisposed = true;
- }
- #endregion
- }
-}
diff --git a/lib/csharp/src/Transport/THttpHandler.cs b/lib/csharp/src/Transport/THttpHandler.cs
deleted file mode 100644
index 4115ef95a..000000000
--- a/lib/csharp/src/Transport/THttpHandler.cs
+++ /dev/null
@@ -1,102 +0,0 @@
-/**
- * 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.Web;
-using System.Net;
-using System.IO;
-
-using Thrift.Protocol;
-
-namespace Thrift.Transport
-{
- public class THttpHandler : IHttpHandler
- {
- protected TProcessor processor;
-
- protected TProtocolFactory inputProtocolFactory;
- protected TProtocolFactory outputProtocolFactory;
-
- protected const string contentType = "application/x-thrift";
- protected System.Text.Encoding encoding = System.Text.Encoding.UTF8;
-
- public THttpHandler(TProcessor processor)
- : this(processor, new TBinaryProtocol.Factory())
- {
-
- }
-
- public THttpHandler(TProcessor processor, TProtocolFactory protocolFactory)
- : this(processor, protocolFactory, protocolFactory)
- {
-
- }
-
- public THttpHandler(TProcessor processor, TProtocolFactory inputProtocolFactory, TProtocolFactory outputProtocolFactory)
- {
- this.processor = processor;
- this.inputProtocolFactory = inputProtocolFactory;
- this.outputProtocolFactory = outputProtocolFactory;
- }
-
- public void ProcessRequest(HttpListenerContext context)
- {
- context.Response.ContentType = contentType;
- context.Response.ContentEncoding = encoding;
- ProcessRequest(context.Request.InputStream, context.Response.OutputStream);
- }
-
- public void ProcessRequest(HttpContext context)
- {
- context.Response.ContentType = contentType;
- context.Response.ContentEncoding = encoding;
- ProcessRequest(context.Request.InputStream, context.Response.OutputStream);
- }
-
- public void ProcessRequest(Stream input, Stream output)
- {
- TTransport transport = new TStreamTransport(input,output);
-
- try
- {
- var inputProtocol = inputProtocolFactory.GetProtocol(transport);
- var outputProtocol = outputProtocolFactory.GetProtocol(transport);
-
- while (processor.Process(inputProtocol, outputProtocol))
- {
- }
- }
- catch (TTransportException)
- {
- // Client died, just move on
- }
- finally
- {
- transport.Close();
- }
- }
-
- public bool IsReusable
- {
- get { return true; }
- }
- }
-}
diff --git a/lib/csharp/src/Transport/THttpTaskAsyncHandler.cs b/lib/csharp/src/Transport/THttpTaskAsyncHandler.cs
deleted file mode 100644
index e491f32cb..000000000
--- a/lib/csharp/src/Transport/THttpTaskAsyncHandler.cs
+++ /dev/null
@@ -1,97 +0,0 @@
-/**
- * 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.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System.Threading.Tasks;
-using System.Web;
-using Thrift.Protocol;
-
-namespace Thrift.Transport
-{
- /// <summary>
- /// An async task based HTTP handler for processing thrift services.
- /// </summary>
- public class THttpTaskAsyncHandler : HttpTaskAsyncHandler
- {
- private readonly TAsyncProcessor _processor;
- private readonly TProtocolFactory _inputProtocolFactory;
- private readonly TProtocolFactory _outputProtocolFactory;
-
- /// <summary>
- /// Initializes a new instance of the <see cref="THttpTaskAsyncHandler"/> class
- /// using the <see cref="TBinaryProtocol.Factory"/> for both input and output streams.
- /// </summary>
- /// <param name="processor">The async processor implementation.</param>
- public THttpTaskAsyncHandler(TAsyncProcessor processor)
- : this(processor, new TBinaryProtocol.Factory())
- {
- }
-
- /// <summary>
- /// Initializes a new instance of the <see cref="THttpTaskAsyncHandler"/> class
- /// using <paramref name="protocolFactory"/> for both input and output streams.
- /// </summary>
- /// <param name="processor">The async processor implementation.</param>
- /// <param name="protocolFactory">The protocol factory.</param>
- public THttpTaskAsyncHandler(TAsyncProcessor processor, TProtocolFactory protocolFactory)
- : this(processor, protocolFactory, protocolFactory)
- {
- }
-
- /// <summary>
- /// Initializes a new instance of the <see cref="THttpTaskAsyncHandler"/> class.
- /// </summary>
- /// <param name="processor">The async processor implementation.</param>
- /// <param name="inputProtocolFactory">The input protocol factory.</param>
- /// <param name="outputProtocolFactory">The output protocol factory.</param>
- public THttpTaskAsyncHandler(TAsyncProcessor processor, TProtocolFactory inputProtocolFactory,
- TProtocolFactory outputProtocolFactory)
- {
- _processor = processor;
- _inputProtocolFactory = inputProtocolFactory;
- _outputProtocolFactory = outputProtocolFactory;
- }
-
- public override async Task ProcessRequestAsync(HttpContext context)
- {
- var transport = new TStreamTransport(context.Request.InputStream, context.Response.OutputStream);
-
- try
- {
- var input = _inputProtocolFactory.GetProtocol(transport);
- var output = _outputProtocolFactory.GetProtocol(transport);
-
- while (await _processor.ProcessAsync(input, output))
- {
- }
- }
- catch (TTransportException)
- {
- // Client died, just move on
- }
- finally
- {
- transport.Close();
- }
- }
- }
-}
diff --git a/lib/csharp/src/Transport/TMemoryBuffer.cs b/lib/csharp/src/Transport/TMemoryBuffer.cs
deleted file mode 100644
index 303d08329..000000000
--- a/lib/csharp/src/Transport/TMemoryBuffer.cs
+++ /dev/null
@@ -1,117 +0,0 @@
-/**
- * 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.IO;
-using System.Reflection;
-using Thrift.Protocol;
-
-namespace Thrift.Transport
-{
- public class TMemoryBuffer : TTransport
- {
-
- private readonly MemoryStream byteStream;
-
- public TMemoryBuffer()
- {
- byteStream = new MemoryStream();
- }
-
- public TMemoryBuffer(byte[] buf)
- {
- byteStream = new MemoryStream(buf);
- }
-
- public override void Open()
- {
- /** do nothing **/
- }
-
- public override void Close()
- {
- /** do nothing **/
- }
-
- public override int Read(byte[] buf, int off, int len)
- {
- return byteStream.Read(buf, off, len);
- }
-
- public override void Write(byte[] buf, int off, int len)
- {
- byteStream.Write(buf, off, len);
- }
-
- public byte[] GetBuffer()
- {
- return byteStream.ToArray();
- }
-
-
- public override bool IsOpen
- {
- get { return true; }
- }
-
- public static byte[] Serialize(TAbstractBase s)
- {
- var t = new TMemoryBuffer();
- var p = new TBinaryProtocol(t);
-
- s.Write(p);
-
- return t.GetBuffer();
- }
-
- public static T DeSerialize<T>(byte[] buf) where T : TAbstractBase
- {
- var trans = new TMemoryBuffer(buf);
- var p = new TBinaryProtocol(trans);
- if (typeof(TBase).IsAssignableFrom(typeof(T)))
- {
- var method = typeof(T).GetMethod("Read", BindingFlags.Instance | BindingFlags.Public);
- var t = Activator.CreateInstance<T>();
- method.Invoke(t, new object[] { p });
- return t;
- }
- else
- {
- var method = typeof(T).GetMethod("Read", BindingFlags.Static | BindingFlags.Public);
- return (T)method.Invoke(null, new object[] { p });
- }
- }
-
- private bool _IsDisposed;
-
- // IDisposable
- protected override void Dispose(bool disposing)
- {
- if (!_IsDisposed)
- {
- if (disposing)
- {
- if (byteStream != null)
- byteStream.Dispose();
- }
- }
- _IsDisposed = true;
- }
- }
-}
diff --git a/lib/csharp/src/Transport/TNamedPipeClientTransport.cs b/lib/csharp/src/Transport/TNamedPipeClientTransport.cs
deleted file mode 100644
index 49a50aa5b..000000000
--- a/lib/csharp/src/Transport/TNamedPipeClientTransport.cs
+++ /dev/null
@@ -1,111 +0,0 @@
-/**
- * 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.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using System.IO.Pipes;
-using System.Threading;
-
-namespace Thrift.Transport
-{
- public class TNamedPipeClientTransport : TTransport
- {
- private NamedPipeClientStream client;
- private string ServerName;
- private string PipeName;
- private int ConnectTimeout;
-
- public TNamedPipeClientTransport(string pipe, int timeout = Timeout.Infinite)
- {
- ServerName = ".";
- PipeName = pipe;
- ConnectTimeout = timeout;
- }
-
- public TNamedPipeClientTransport(string server, string pipe, int timeout = Timeout.Infinite)
- {
- ServerName = (server != "") ? server : ".";
- PipeName = pipe;
- ConnectTimeout = timeout;
- }
-
- public override bool IsOpen
- {
- get { return client != null && client.IsConnected; }
- }
-
- public override void Open()
- {
- if (IsOpen)
- {
- throw new TTransportException(TTransportException.ExceptionType.AlreadyOpen);
- }
- client = new NamedPipeClientStream(ServerName, PipeName, PipeDirection.InOut, PipeOptions.None);
- client.Connect(ConnectTimeout);
- }
-
- public override void Close()
- {
- if (client != null)
- {
- client.Close();
- client = null;
- }
- }
-
- public override int Read(byte[] buf, int off, int len)
- {
- if (client == null)
- {
- throw new TTransportException(TTransportException.ExceptionType.NotOpen);
- }
-
- return client.Read(buf, off, len);
- }
-
- public override void Write(byte[] buf, int off, int len)
- {
- if (client == null)
- {
- throw new TTransportException(TTransportException.ExceptionType.NotOpen);
- }
-
- // if necessary, send the data in chunks
- // there's a system limit around 0x10000 bytes that we hit otherwise
- // MSDN: "Pipe write operations across a network are limited to 65,535 bytes per write. For more information regarding pipes, see the Remarks section."
- var nBytes = Math.Min(len, 15 * 4096); // 16 would exceed the limit
- while (nBytes > 0)
- {
- client.Write(buf, off, nBytes);
-
- off += nBytes;
- len -= nBytes;
- nBytes = Math.Min(len, nBytes);
- }
- }
-
- protected override void Dispose(bool disposing)
- {
- client.Dispose();
- }
- }
-}
diff --git a/lib/csharp/src/Transport/TNamedPipeServerTransport.cs b/lib/csharp/src/Transport/TNamedPipeServerTransport.cs
deleted file mode 100644
index 32215cfc1..000000000
--- a/lib/csharp/src/Transport/TNamedPipeServerTransport.cs
+++ /dev/null
@@ -1,296 +0,0 @@
-/**
- * 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.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using System.IO.Pipes;
-using System.Threading;
-using System.Security.Principal;
-
-namespace Thrift.Transport
-{
- public class TNamedPipeServerTransport : TServerTransport
- {
- /// <summary>
- /// This is the address of the Pipe on the localhost.
- /// </summary>
- private readonly string pipeAddress;
- private NamedPipeServerStream stream = null;
- private bool asyncMode = true;
-
- public TNamedPipeServerTransport(string pipeAddress)
- {
- this.pipeAddress = pipeAddress;
- }
-
- public override void Listen()
- {
- // nothing to do here
- }
-
- public override void Close()
- {
- if (stream != null)
- {
- try
- {
- stream.Close();
- stream.Dispose();
- }
- finally
- {
- stream = null;
- }
- }
- }
-
- private void EnsurePipeInstance()
- {
- if (stream == null)
- {
- var direction = PipeDirection.InOut;
- var maxconn = NamedPipeServerStream.MaxAllowedServerInstances;
- var mode = PipeTransmissionMode.Byte;
- var options = asyncMode ? PipeOptions.Asynchronous : PipeOptions.None;
- const int INBUF_SIZE = 4096;
- const int OUTBUF_SIZE = 4096;
-
- // security
- var security = new PipeSecurity();
- security.AddAccessRule(
- new PipeAccessRule(
- new SecurityIdentifier(WellKnownSidType.WorldSid, null),
- PipeAccessRights.Read | PipeAccessRights.Write | PipeAccessRights.Synchronize | PipeAccessRights.CreateNewInstance,
- System.Security.AccessControl.AccessControlType.Allow
- )
- );
-
- try
- {
- stream = new NamedPipeServerStream(pipeAddress, direction, maxconn, mode, options, INBUF_SIZE, OUTBUF_SIZE, security);
- }
- catch (NotImplementedException) // Mono still does not support async, fallback to sync
- {
- if (asyncMode)
- {
- options &= (~PipeOptions.Asynchronous);
- stream = new NamedPipeServerStream(pipeAddress, direction, maxconn, mode, options, INBUF_SIZE, OUTBUF_SIZE, security);
- asyncMode = false;
- }
- else
- {
- throw;
- }
- }
-
- }
- }
-
- protected override TTransport AcceptImpl()
- {
- try
- {
- EnsurePipeInstance();
-
- if (asyncMode)
- {
- var evt = new ManualResetEvent(false);
- Exception eOuter = null;
-
- stream.BeginWaitForConnection(asyncResult =>
- {
- try
- {
- if (stream != null)
- stream.EndWaitForConnection(asyncResult);
- else
- eOuter = new TTransportException(TTransportException.ExceptionType.Interrupted);
- }
- catch (Exception e)
- {
- if (stream != null)
- eOuter = e;
- else
- eOuter = new TTransportException(TTransportException.ExceptionType.Interrupted, e.Message, e);
- }
- evt.Set();
- }, null);
-
- evt.WaitOne();
-
- if (eOuter != null)
- throw eOuter; // rethrow exception
- }
- else
- {
- stream.WaitForConnection();
- }
-
- var trans = new ServerTransport(stream,asyncMode);
- stream = null; // pass ownership to ServerTransport
- return trans;
- }
- catch (TTransportException)
- {
- Close();
- throw;
- }
- catch (Exception e)
- {
- Close();
- throw new TTransportException(TTransportException.ExceptionType.NotOpen, e.Message, e);
- }
- }
-
- private class ServerTransport : TTransport
- {
- private NamedPipeServerStream stream;
- private bool asyncMode;
-
- public ServerTransport(NamedPipeServerStream stream, bool asyncMode)
- {
- this.stream = stream;
- this.asyncMode = asyncMode;
- }
-
- public override bool IsOpen
- {
- get { return stream != null && stream.IsConnected; }
- }
-
- public override void Open()
- {
- }
-
- public override void Close()
- {
- if (stream != null)
- stream.Close();
- }
-
- public override int Read(byte[] buf, int off, int len)
- {
- if (stream == null)
- {
- throw new TTransportException(TTransportException.ExceptionType.NotOpen);
- }
-
- if (asyncMode)
- {
- Exception eOuter = null;
- var evt = new ManualResetEvent(false);
- int retval = 0;
-
- stream.BeginRead(buf, off, len, asyncResult =>
- {
- try
- {
- if (stream != null)
- retval = stream.EndRead(asyncResult);
- else
- eOuter = new TTransportException(TTransportException.ExceptionType.Interrupted);
- }
- catch (Exception e)
- {
- if (stream != null)
- eOuter = e;
- else
- eOuter = new TTransportException(TTransportException.ExceptionType.Interrupted, e.Message, e);
- }
- evt.Set();
- }, null);
-
- evt.WaitOne();
-
- if (eOuter != null)
- throw eOuter; // rethrow exception
- else
- return retval;
- }
- else
- {
- return stream.Read(buf, off, len);
- }
- }
-
- public override void Write(byte[] buf, int off, int len)
- {
- if (stream == null)
- {
- throw new TTransportException(TTransportException.ExceptionType.NotOpen);
- }
-
- // if necessary, send the data in chunks
- // there's a system limit around 0x10000 bytes that we hit otherwise
- // MSDN: "Pipe write operations across a network are limited to 65,535 bytes per write. For more information regarding pipes, see the Remarks section."
- var nBytes = Math.Min(len, 15 * 4096); // 16 would exceed the limit
- while (nBytes > 0)
- {
-
- if (asyncMode)
- {
- Exception eOuter = null;
- var evt = new ManualResetEvent(false);
-
- stream.BeginWrite(buf, off, nBytes, asyncResult =>
- {
- try
- {
- if (stream != null)
- stream.EndWrite(asyncResult);
- else
- eOuter = new TTransportException(TTransportException.ExceptionType.Interrupted);
- }
- catch (Exception e)
- {
- if (stream != null)
- eOuter = e;
- else
- eOuter = new TTransportException(TTransportException.ExceptionType.Interrupted, e.Message, e);
- }
- evt.Set();
- }, null);
-
- evt.WaitOne();
-
- if (eOuter != null)
- throw eOuter; // rethrow exception
- }
- else
- {
- stream.Write(buf, off, nBytes);
- }
-
- off += nBytes;
- len -= nBytes;
- nBytes = Math.Min(len, nBytes);
- }
- }
-
- protected override void Dispose(bool disposing)
- {
- if (stream != null)
- stream.Dispose();
- }
- }
- }
-} \ No newline at end of file
diff --git a/lib/csharp/src/Transport/TServerSocket.cs b/lib/csharp/src/Transport/TServerSocket.cs
deleted file mode 100644
index d8ec62ab3..000000000
--- a/lib/csharp/src/Transport/TServerSocket.cs
+++ /dev/null
@@ -1,176 +0,0 @@
-/**
- * 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.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using System.Net.Sockets;
-
-
-namespace Thrift.Transport
-{
- public class TServerSocket : TServerTransport
- {
- /// <summary>
- /// Underlying server with socket.
- /// </summary>
- private TcpListener server = null;
-
- /// <summary>
- /// Port to listen on.
- /// </summary>
- private int port = 0;
-
- /// <summary>
- /// Timeout for client sockets from accept.
- /// </summary>
- private int clientTimeout = 0;
-
- /// <summary>
- /// Whether or not to wrap new TSocket connections in buffers.
- /// </summary>
- private bool useBufferedSockets = false;
-
- /// <summary>
- /// Creates a server socket from underlying socket object.
- /// </summary>
- public TServerSocket(TcpListener listener)
- : this(listener, 0)
- {
- }
-
- /// <summary>
- /// Creates a server socket from underlying socket object.
- /// </summary>
- public TServerSocket(TcpListener listener, int clientTimeout)
- {
- this.server = listener;
- this.clientTimeout = clientTimeout;
- }
-
- /// <summary>
- /// Creates just a port listening server socket.
- /// </summary>
- public TServerSocket(int port)
- : this(port, 0)
- {
- }
-
- /// <summary>
- /// Creates just a port listening server socket.
- /// </summary>
- public TServerSocket(int port, int clientTimeout)
- : this(port, clientTimeout, false)
- {
- }
-
- public TServerSocket(int port, int clientTimeout, bool useBufferedSockets)
- {
- this.port = port;
- this.clientTimeout = clientTimeout;
- this.useBufferedSockets = useBufferedSockets;
- try
- {
- // Make server socket
- this.server = TSocketVersionizer.CreateTcpListener(this.port);
- this.server.Server.NoDelay = true;
- }
- catch (Exception ex)
- {
- server = null;
- throw new TTransportException("Could not create ServerSocket on port " + this.port + ".", ex);
- }
- }
-
- public override void Listen()
- {
- // Make sure not to block on accept
- if (server != null)
- {
- try
- {
- server.Start();
- }
- catch (SocketException sx)
- {
- throw new TTransportException("Could not accept on listening socket: " + sx.Message, sx);
- }
- }
- }
-
- protected override TTransport AcceptImpl()
- {
- if (server == null)
- {
- throw new TTransportException(TTransportException.ExceptionType.NotOpen, "No underlying server socket.");
- }
- try
- {
- TSocket result2 = null;
- TcpClient result = server.AcceptTcpClient();
- try
- {
- result2 = new TSocket(result);
- result2.Timeout = clientTimeout;
- if (useBufferedSockets)
- {
- TBufferedTransport result3 = new TBufferedTransport(result2);
- return result3;
- }
- else
- {
- return result2;
- }
- }
- catch (System.Exception)
- {
- // If a TSocket was successfully created, then let
- // it do proper cleanup of the TcpClient object.
- if (result2 != null)
- result2.Dispose();
- else // Otherwise, clean it up ourselves.
- ((IDisposable)result).Dispose();
- throw;
- }
- }
- catch (Exception ex)
- {
- throw new TTransportException(ex.ToString(), ex);
- }
- }
-
- public override void Close()
- {
- if (server != null)
- {
- try
- {
- server.Stop();
- }
- catch (Exception ex)
- {
- throw new TTransportException("WARNING: Could not close server socket: " + ex, ex);
- }
- server = null;
- }
- }
- }
-}
diff --git a/lib/csharp/src/Transport/TServerTransport.cs b/lib/csharp/src/Transport/TServerTransport.cs
deleted file mode 100644
index e63880be1..000000000
--- a/lib/csharp/src/Transport/TServerTransport.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * 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.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-
-namespace Thrift.Transport
-{
- public abstract class TServerTransport
- {
- public abstract void Listen();
- public abstract void Close();
- protected abstract TTransport AcceptImpl();
-
- public TTransport Accept()
- {
- TTransport transport = AcceptImpl();
- if (transport == null)
- {
- throw new TTransportException("accept() may not return NULL");
- }
- return transport;
- }
- }
-}
diff --git a/lib/csharp/src/Transport/TSilverlightSocket.cs b/lib/csharp/src/Transport/TSilverlightSocket.cs
deleted file mode 100644
index 40469ab40..000000000
--- a/lib/csharp/src/Transport/TSilverlightSocket.cs
+++ /dev/null
@@ -1,393 +0,0 @@
-/**
- * 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.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-/* only for silverlight */
-#if SILVERLIGHT
-
-using System;
-using System.Net.Sockets;
-using System.IO;
-using System.Net;
-using System.Threading;
-
-namespace Thrift.Transport
-{
- public class TSilverlightSocket : TTransport
- {
- Socket socket = null;
- static ManualResetEvent readAsyncComplete = new ManualResetEvent(false);
- public event EventHandler<SocketAsyncEventArgs> connectHandler = null;
-
- // memory stream for write cache.
- private MemoryStream outputStream = new MemoryStream();
-
- private string host = null;
- private int port = 0;
- private int timeout = 0;
-
- // constructor
- public TSilverlightSocket(string host, int port)
- : this(host, port, 0)
- {
- }
-
- // constructor
- public TSilverlightSocket(string host, int port, int timeout)
- {
- this.host = host;
- this.port = port;
- this.timeout = timeout;
-
- InitSocket();
- }
-
- private void InitSocket()
- {
- // Create a stream-based, TCP socket using the InterNetwork Address Family.
- socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
- socket.NoDelay = true;
- }
-
- public int Timeout
- {
- set
- {
- timeout = value;
- }
- }
-
- public string Host
- {
- get
- {
- return host;
- }
- }
-
- public int Port
- {
- get
- {
- return port;
- }
- }
-
- public override bool IsOpen
- {
- get
- {
- if (socket == null)
- {
- return false;
- }
-
- return socket.Connected;
- }
- }
-
- public override void Open()
- {
- if (IsOpen)
- {
- throw new TTransportException(TTransportException.ExceptionType.AlreadyOpen, "Socket already connected");
- }
-
- if (string.IsNullOrEmpty(host))
- {
- throw new TTransportException(TTransportException.ExceptionType.NotOpen, "Cannot open null host");
- }
-
- if (port <= 0)
- {
- throw new TTransportException(TTransportException.ExceptionType.NotOpen, "Cannot open without port");
- }
-
- if (socket == null)
- {
- InitSocket();
- }
-
- if (timeout == 0) // no timeout -> infinite
- {
- timeout = 10000; // set a default timeout for WP.
- }
-
- {
- // Create DnsEndPoint. The hostName and port are passed in to this method.
- DnsEndPoint hostEntry = new DnsEndPoint(this.host, this.port);
-
- // Create a SocketAsyncEventArgs object to be used in the connection request
- SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs();
- socketEventArg.RemoteEndPoint = hostEntry;
-
- // Inline event handler for the Completed event.
- // Note: This event handler was implemented inline in order to make this method self-contained.
- socketEventArg.Completed += new EventHandler<SocketAsyncEventArgs>(delegate(object s, SocketAsyncEventArgs e)
- {
- if (connectHandler != null)
- {
- connectHandler(this, e);
- }
- });
-
- // Make an asynchronous Connect request over the socket
- socket.ConnectAsync(socketEventArg);
- }
- }
-
- public override int Read(byte[] buf, int off, int len)
- {
- bool _timeout = true;
- string _error = null;
- int _recvBytes = -1;
-
- if (socket == null)
- {
- throw new TTransportException(TTransportException.ExceptionType.NotOpen, "Socket is not open");
- }
-
- // Create SocketAsyncEventArgs context object
- SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs();
- socketEventArg.RemoteEndPoint = socket.RemoteEndPoint;
-
- // Setup the buffer to receive the data
- socketEventArg.SetBuffer(buf, off, len);
-
- // Inline event handler for the Completed event.
- // Note: This even handler was implemented inline in order to make
- // this method self-contained.
- socketEventArg.Completed += new EventHandler<SocketAsyncEventArgs>(delegate(object s, SocketAsyncEventArgs e)
- {
- _timeout = false;
-
- if (e.SocketError == SocketError.Success)
- {
- _recvBytes = e.BytesTransferred;
- }
- else
- {
- _error = e.SocketError.ToString();
- }
-
- readAsyncComplete.Set();
- });
-
- // Sets the state of the event to nonsignaled, causing threads to block
- readAsyncComplete.Reset();
-
- // Make an asynchronous Receive request over the socket
- socket.ReceiveAsync(socketEventArg);
-
- // Block the UI thread for a maximum of TIMEOUT_MILLISECONDS milliseconds.
- // If no response comes back within this time then proceed
- readAsyncComplete.WaitOne(this.timeout);
-
- if (_timeout)
- {
- throw new TTransportException(TTransportException.ExceptionType.TimedOut, "Socket recv timeout");
- }
-
- if (_error != null)
- {
- throw new TTransportException(TTransportException.ExceptionType.Unknown, _error);
- }
-
- return _recvBytes;
- }
-
- public override void Write(byte[] buf, int off, int len)
- {
- outputStream.Write(buf, off, len);
- }
-
- private void beginFlush_Completed(object sender, SocketAsyncEventArgs e)
- {
- FlushAsyncResult flushAsyncResult = e.UserToken as FlushAsyncResult;
- flushAsyncResult.UpdateStatusToComplete();
- flushAsyncResult.NotifyCallbackWhenAvailable();
-
- if (e.SocketError != SocketError.Success)
- {
- throw new TTransportException(TTransportException.ExceptionType.Unknown, e.SocketError.ToString());
- }
- }
-
- public override IAsyncResult BeginFlush(AsyncCallback callback, object state)
- {
- // Extract request and reset buffer
- byte[] data = outputStream.ToArray();
-
- FlushAsyncResult flushAsyncResult = new FlushAsyncResult(callback, state);
-
- SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs();
- socketEventArg.RemoteEndPoint = socket.RemoteEndPoint;
- socketEventArg.UserToken = flushAsyncResult;
-
- socketEventArg.Completed += beginFlush_Completed;
- socketEventArg.SetBuffer(data, 0, data.Length);
-
- socket.SendAsync(socketEventArg);
-
- return flushAsyncResult;
- }
-
- public override void EndFlush(IAsyncResult asyncResult)
- {
- try
- {
- var flushAsyncResult = (FlushAsyncResult)asyncResult;
-
- if (!flushAsyncResult.IsCompleted)
- {
- var waitHandle = flushAsyncResult.AsyncWaitHandle;
- waitHandle.WaitOne();
- waitHandle.Close();
- }
-
- if (flushAsyncResult.AsyncException != null)
- {
- throw flushAsyncResult.AsyncException;
- }
- }
- finally
- {
- outputStream = new MemoryStream();
- }
- }
-
- // Copy from impl from THttpClient.cs
- // Based on http://msmvps.com/blogs/luisabreu/archive/2009/06/15/multithreading-implementing-the-iasyncresult-interface.aspx
- class FlushAsyncResult : IAsyncResult
- {
- private volatile Boolean _isCompleted;
- private ManualResetEvent _evt;
- private readonly AsyncCallback _cbMethod;
- private readonly object _state;
-
- public FlushAsyncResult(AsyncCallback cbMethod, object state)
- {
- _cbMethod = cbMethod;
- _state = state;
- }
-
- internal byte[] Data { get; set; }
- internal Socket Connection { get; set; }
- internal TTransportException AsyncException { get; set; }
-
- public object AsyncState
- {
- get { return _state; }
- }
-
- public WaitHandle AsyncWaitHandle
- {
- get { return GetEvtHandle(); }
- }
-
- public bool CompletedSynchronously
- {
- get { return false; }
- }
-
- public bool IsCompleted
- {
- get { return _isCompleted; }
- }
-
- private readonly object _locker = new object();
-
- private ManualResetEvent GetEvtHandle()
- {
- lock (_locker)
- {
- if (_evt == null)
- {
- _evt = new ManualResetEvent(false);
- }
- if (_isCompleted)
- {
- _evt.Set();
- }
- }
- return _evt;
- }
-
- internal void UpdateStatusToComplete()
- {
- _isCompleted = true; //1. set _iscompleted to true
- lock (_locker)
- {
- if (_evt != null)
- {
- _evt.Set(); //2. set the event, when it exists
- }
- }
- }
-
- internal void NotifyCallbackWhenAvailable()
- {
- if (_cbMethod != null)
- {
- _cbMethod(this);
- }
- }
- }
-
- public override void Close()
- {
- if (socket != null)
- {
- socket.Close();
- socket = null;
- }
- }
-
-#region " IDisposable Support "
- private bool _IsDisposed;
-
- // IDisposable
- protected override void Dispose(bool disposing)
- {
- if (!_IsDisposed)
- {
- if (disposing)
- {
- if (outputStream != null)
- {
- outputStream.Dispose();
- }
- outputStream = null;
- if (socket != null)
- {
- ((IDisposable)socket).Dispose();
- }
- }
- }
- _IsDisposed = true;
- }
-#endregion
- }
-}
-
-
-#endif
diff --git a/lib/csharp/src/Transport/TSocket.cs b/lib/csharp/src/Transport/TSocket.cs
deleted file mode 100644
index d8fa335ad..000000000
--- a/lib/csharp/src/Transport/TSocket.cs
+++ /dev/null
@@ -1,245 +0,0 @@
-/**
- * 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.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using System.Net.Sockets;
-
-namespace Thrift.Transport
-{
- public class TSocket : TStreamTransport
- {
- private TcpClient client = null;
- private string host = null;
- private int port = 0;
- private int timeout = 0;
-
- public TSocket(TcpClient client)
- {
- this.client = client;
-
- if (IsOpen)
- {
- inputStream = client.GetStream();
- outputStream = client.GetStream();
- }
- }
-
- public TSocket(string host, int port)
- : this(host, port, 0)
- {
- }
-
- public TSocket(string host, int port, int timeout)
- {
- this.host = host;
- this.port = port;
- this.timeout = timeout;
-
- InitSocket();
- }
-
- private void InitSocket()
- {
- this.client = TSocketVersionizer.CreateTcpClient();
- this.client.ReceiveTimeout = client.SendTimeout = timeout;
- this.client.Client.NoDelay = true;
- }
-
- public int Timeout
- {
- set
- {
- client.ReceiveTimeout = client.SendTimeout = timeout = value;
- }
- }
-
- public TcpClient TcpClient
- {
- get
- {
- return client;
- }
- }
-
- public string Host
- {
- get
- {
- return host;
- }
- }
-
- public int Port
- {
- get
- {
- return port;
- }
- }
-
- public override bool IsOpen
- {
- get
- {
- if (client == null)
- {
- return false;
- }
-
- return client.Connected;
- }
- }
-
- public override void Open()
- {
- if (IsOpen)
- {
- throw new TTransportException(TTransportException.ExceptionType.AlreadyOpen, "Socket already connected");
- }
-
- if (string.IsNullOrEmpty(host))
- {
- throw new TTransportException(TTransportException.ExceptionType.NotOpen, "Cannot open null host");
- }
-
- if (port <= 0)
- {
- throw new TTransportException(TTransportException.ExceptionType.NotOpen, "Cannot open without port");
- }
-
- if (client == null)
- {
- InitSocket();
- }
-
- if (timeout == 0) // no timeout -> infinite
- {
- client.Connect(host, port);
- }
- else // we have a timeout -> use it
- {
- ConnectHelper hlp = new ConnectHelper(client);
- IAsyncResult asyncres = client.BeginConnect(host, port, new AsyncCallback(ConnectCallback), hlp);
- bool bConnected = asyncres.AsyncWaitHandle.WaitOne(timeout) && client.Connected;
- if (!bConnected)
- {
- lock (hlp.Mutex)
- {
- if (hlp.CallbackDone)
- {
- asyncres.AsyncWaitHandle.Close();
- client.Close();
- }
- else
- {
- hlp.DoCleanup = true;
- client = null;
- }
- }
- throw new TTransportException(TTransportException.ExceptionType.TimedOut, "Connect timed out");
- }
- }
-
- inputStream = client.GetStream();
- outputStream = client.GetStream();
- }
-
-
- static void ConnectCallback(IAsyncResult asyncres)
- {
- ConnectHelper hlp = asyncres.AsyncState as ConnectHelper;
- lock (hlp.Mutex)
- {
- hlp.CallbackDone = true;
-
- try
- {
- if (hlp.Client.Client != null)
- hlp.Client.EndConnect(asyncres);
- }
- catch (Exception)
- {
- // catch that away
- }
-
- if (hlp.DoCleanup)
- {
- try
- {
- asyncres.AsyncWaitHandle.Close();
- }
- catch (Exception) { }
-
- try
- {
- if (hlp.Client is IDisposable)
- ((IDisposable)hlp.Client).Dispose();
- }
- catch (Exception) { }
- hlp.Client = null;
- }
- }
- }
-
- private class ConnectHelper
- {
- public object Mutex = new object();
- public bool DoCleanup = false;
- public bool CallbackDone = false;
- public TcpClient Client;
- public ConnectHelper(TcpClient client)
- {
- Client = client;
- }
- }
-
- public override void Close()
- {
- base.Close();
- if (client != null)
- {
- client.Close();
- client = null;
- }
- }
-
- #region " IDisposable Support "
- private bool _IsDisposed;
-
- // IDisposable
- protected override void Dispose(bool disposing)
- {
- if (!_IsDisposed)
- {
- if (disposing)
- {
- if (client != null)
- ((IDisposable)client).Dispose();
- base.Dispose(disposing);
- }
- }
- _IsDisposed = true;
- }
- #endregion
- }
-}
diff --git a/lib/csharp/src/Transport/TSocketVersionizer.cs b/lib/csharp/src/Transport/TSocketVersionizer.cs
deleted file mode 100644
index 8c2f8e995..000000000
--- a/lib/csharp/src/Transport/TSocketVersionizer.cs
+++ /dev/null
@@ -1,78 +0,0 @@
-/**
- * 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.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Net.Sockets;
-using System.Reflection;
-using System.Text;
-#if NET45
-using System.Threading.Tasks;
-#endif
-
-namespace Thrift.Transport
-{
- /// <summary>
- /// PropertyInfo for the DualMode property of the System.Net.Sockets.Socket class. Used to determine if the sockets are capable of
- /// automatic IPv4 and IPv6 handling. If DualMode is present the sockets automatically handle IPv4 and IPv6 connections.
- /// If the DualMode is not available the system configuration determines whether IPv4 or IPv6 is used.
- /// </summary>
- internal static class TSocketVersionizer
- {
- /// <summary>
- /// Creates a TcpClient according to the capabilities of the used framework.
- /// </summary>
- internal static TcpClient CreateTcpClient()
- {
- TcpClient client = null;
-
-#if NET45
- client = new TcpClient(AddressFamily.InterNetworkV6);
- client.Client.DualMode = true;
-#else
- client = new TcpClient(AddressFamily.InterNetwork);
-#endif
-
- return client;
- }
-
- /// <summary>
- /// Creates a TcpListener according to the capabilities of the used framework.
- /// </summary>
- internal static TcpListener CreateTcpListener(Int32 port)
- {
- TcpListener listener = null;
-
-#if NET45
- listener = new TcpListener(System.Net.IPAddress.IPv6Any, port);
- listener.Server.DualMode = true;
-#else
-
- listener = new TcpListener(System.Net.IPAddress.Any, port);
-#endif
-
- return listener;
- }
- }
-}
diff --git a/lib/csharp/src/Transport/TStreamTransport.cs b/lib/csharp/src/Transport/TStreamTransport.cs
deleted file mode 100644
index 304599faa..000000000
--- a/lib/csharp/src/Transport/TStreamTransport.cs
+++ /dev/null
@@ -1,128 +0,0 @@
-/**
- * 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.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using System.IO;
-
-namespace Thrift.Transport
-{
- public class TStreamTransport : TTransport
- {
- protected Stream inputStream;
- protected Stream outputStream;
-
- protected TStreamTransport()
- {
- }
-
- public TStreamTransport(Stream inputStream, Stream outputStream)
- {
- this.inputStream = inputStream;
- this.outputStream = outputStream;
- }
-
- public Stream OutputStream
- {
- get { return outputStream; }
- }
-
- public Stream InputStream
- {
- get { return inputStream; }
- }
-
- public override bool IsOpen
- {
- get { return true; }
- }
-
- public override void Open()
- {
- }
-
- public override void Close()
- {
- if (inputStream != null)
- {
- inputStream.Close();
- inputStream = null;
- }
- if (outputStream != null)
- {
- outputStream.Close();
- outputStream = null;
- }
- }
-
- public override int Read(byte[] buf, int off, int len)
- {
- if (inputStream == null)
- {
- throw new TTransportException(TTransportException.ExceptionType.NotOpen, "Cannot read from null inputstream");
- }
-
- return inputStream.Read(buf, off, len);
- }
-
- public override void Write(byte[] buf, int off, int len)
- {
- if (outputStream == null)
- {
- throw new TTransportException(TTransportException.ExceptionType.NotOpen, "Cannot write to null outputstream");
- }
-
- outputStream.Write(buf, off, len);
- }
-
- public override void Flush()
- {
- if (outputStream == null)
- {
- throw new TTransportException(TTransportException.ExceptionType.NotOpen, "Cannot flush null outputstream");
- }
-
- outputStream.Flush();
- }
-
-
- #region " IDisposable Support "
- private bool _IsDisposed;
-
- // IDisposable
- protected override void Dispose(bool disposing)
- {
- if (!_IsDisposed)
- {
- if (disposing)
- {
- if (InputStream != null)
- InputStream.Dispose();
- if (OutputStream != null)
- OutputStream.Dispose();
- }
- }
- _IsDisposed = true;
- }
- #endregion
- }
-}
diff --git a/lib/csharp/src/Transport/TTLSServerSocket.cs b/lib/csharp/src/Transport/TTLSServerSocket.cs
deleted file mode 100644
index 716a97ca8..000000000
--- a/lib/csharp/src/Transport/TTLSServerSocket.cs
+++ /dev/null
@@ -1,223 +0,0 @@
-/**
- * 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.Net.Security;
-using System.Net.Sockets;
-using System.Security.Authentication;
-using System.Security.Cryptography.X509Certificates;
-
-namespace Thrift.Transport
-{
- /// <summary>
- /// SSL Server Socket Wrapper Class
- /// </summary>
- public class TTLSServerSocket : TServerTransport
- {
- /// <summary>
- /// Underlying tcp server
- /// </summary>
- private TcpListener server = null;
-
- /// <summary>
- /// The port where the socket listen
- /// </summary>
- private int port = 0;
-
- /// <summary>
- /// Timeout for the created server socket
- /// </summary>
- private readonly int clientTimeout;
-
- /// <summary>
- /// Whether or not to wrap new TSocket connections in buffers
- /// </summary>
- private bool useBufferedSockets = false;
-
- /// <summary>
- /// The servercertificate with the private- and public-key
- /// </summary>
- private X509Certificate serverCertificate;
-
- /// <summary>
- /// The function to validate the client certificate.
- /// </summary>
- private RemoteCertificateValidationCallback clientCertValidator;
-
- /// <summary>
- /// The function to determine which certificate to use.
- /// </summary>
- private LocalCertificateSelectionCallback localCertificateSelectionCallback;
-
- /// <summary>
- /// The SslProtocols value that represents the protocol used for authentication.
- /// </summary>
- private readonly SslProtocols sslProtocols;
-
- /// <summary>
- /// Initializes a new instance of the <see cref="TTLSServerSocket" /> class.
- /// </summary>
- /// <param name="port">The port where the server runs.</param>
- /// <param name="certificate">The certificate object.</param>
- public TTLSServerSocket(int port, X509Certificate2 certificate)
- : this(port, 0, certificate)
- {
- }
-
- /// <summary>
- /// Initializes a new instance of the <see cref="TTLSServerSocket" /> class.
- /// </summary>
- /// <param name="port">The port where the server runs.</param>
- /// <param name="clientTimeout">Send/receive timeout.</param>
- /// <param name="certificate">The certificate object.</param>
- public TTLSServerSocket(int port, int clientTimeout, X509Certificate2 certificate)
- : this(port, clientTimeout, false, certificate)
- {
- }
-
- /// <summary>
- /// Initializes a new instance of the <see cref="TTLSServerSocket" /> class.
- /// </summary>
- /// <param name="port">The port where the server runs.</param>
- /// <param name="clientTimeout">Send/receive timeout.</param>
- /// <param name="useBufferedSockets">If set to <c>true</c> [use buffered sockets].</param>
- /// <param name="certificate">The certificate object.</param>
- /// <param name="clientCertValidator">The certificate validator.</param>
- /// <param name="localCertificateSelectionCallback">The callback to select which certificate to use.</param>
- /// <param name="sslProtocols">The SslProtocols value that represents the protocol used for authentication.</param>
- public TTLSServerSocket(
- int port,
- int clientTimeout,
- bool useBufferedSockets,
- X509Certificate2 certificate,
- RemoteCertificateValidationCallback clientCertValidator = null,
- LocalCertificateSelectionCallback localCertificateSelectionCallback = null,
- // TODO: Enable Tls11 and Tls12 (TLS 1.1 and 1.2) by default once we start using .NET 4.5+.
- SslProtocols sslProtocols = SslProtocols.Tls)
- {
- if (!certificate.HasPrivateKey)
- {
- throw new TTransportException(TTransportException.ExceptionType.Unknown, "Your server-certificate needs to have a private key");
- }
-
- this.port = port;
- this.clientTimeout = clientTimeout;
- this.serverCertificate = certificate;
- this.useBufferedSockets = useBufferedSockets;
- this.clientCertValidator = clientCertValidator;
- this.localCertificateSelectionCallback = localCertificateSelectionCallback;
- this.sslProtocols = sslProtocols;
- try
- {
- // Create server socket
- this.server = TSocketVersionizer.CreateTcpListener(this.port);
- this.server.Server.NoDelay = true;
- }
- catch (Exception ex)
- {
- server = null;
- throw new TTransportException("Could not create ServerSocket on port " + this.port + ".", ex);
- }
- }
-
- /// <summary>
- /// Starts the server.
- /// </summary>
- public override void Listen()
- {
- // Make sure accept is not blocking
- if (this.server != null)
- {
- try
- {
- this.server.Start();
- }
- catch (SocketException sx)
- {
- throw new TTransportException("Could not accept on listening socket: " + sx.Message, sx);
- }
- }
- }
-
- /// <summary>
- /// Callback for Accept Implementation
- /// </summary>
- /// <returns>
- /// TTransport-object.
- /// </returns>
- protected override TTransport AcceptImpl()
- {
- if (this.server == null)
- {
- throw new TTransportException(TTransportException.ExceptionType.NotOpen, "No underlying server socket.");
- }
-
- try
- {
- TcpClient client = this.server.AcceptTcpClient();
- client.SendTimeout = client.ReceiveTimeout = this.clientTimeout;
-
- //wrap the client in an SSL Socket passing in the SSL cert
- TTLSSocket socket = new TTLSSocket(
- client,
- this.serverCertificate,
- true,
- this.clientCertValidator,
- this.localCertificateSelectionCallback,
- this.sslProtocols);
-
- socket.setupTLS();
-
- if (useBufferedSockets)
- {
- TBufferedTransport trans = new TBufferedTransport(socket);
- return trans;
- }
- else
- {
- return socket;
- }
-
- }
- catch (Exception ex)
- {
- throw new TTransportException(ex.ToString(), ex);
- }
- }
-
- /// <summary>
- /// Stops the Server
- /// </summary>
- public override void Close()
- {
- if (this.server != null)
- {
- try
- {
- this.server.Stop();
- }
- catch (Exception ex)
- {
- throw new TTransportException("WARNING: Could not close server socket: " + ex, ex);
- }
- this.server = null;
- }
- }
- }
-}
diff --git a/lib/csharp/src/Transport/TTLSSocket.cs b/lib/csharp/src/Transport/TTLSSocket.cs
deleted file mode 100644
index 06286dc8b..000000000
--- a/lib/csharp/src/Transport/TTLSSocket.cs
+++ /dev/null
@@ -1,445 +0,0 @@
-/**
- * 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.Net.Security;
-using System.Net.Sockets;
-using System.Security.Authentication;
-using System.Security.Cryptography.X509Certificates;
-
-namespace Thrift.Transport
-{
- /// <summary>
- /// SSL Socket Wrapper class
- /// </summary>
- public class TTLSSocket : TStreamTransport
- {
- /// <summary>
- /// Internal TCP Client
- /// </summary>
- private TcpClient client;
-
- /// <summary>
- /// The host
- /// </summary>
- private string host;
-
- /// <summary>
- /// The port
- /// </summary>
- private int port;
-
- /// <summary>
- /// The timeout for the connection
- /// </summary>
- private int timeout;
-
- /// <summary>
- /// Internal SSL Stream for IO
- /// </summary>
- private SslStream secureStream;
-
- /// <summary>
- /// Defines wheter or not this socket is a server socket<br/>
- /// This is used for the TLS-authentication
- /// </summary>
- private bool isServer;
-
- /// <summary>
- /// The certificate
- /// </summary>
- private X509Certificate certificate;
-
- /// <summary>
- /// User defined certificate validator.
- /// </summary>
- private RemoteCertificateValidationCallback certValidator;
-
- /// <summary>
- /// The function to determine which certificate to use.
- /// </summary>
- private LocalCertificateSelectionCallback localCertificateSelectionCallback;
-
- /// <summary>
- /// The SslProtocols value that represents the protocol used for authentication.SSL protocols to be used.
- /// </summary>
- private readonly SslProtocols sslProtocols;
-
- /// <summary>
- /// Initializes a new instance of the <see cref="TTLSSocket"/> class.
- /// </summary>
- /// <param name="client">An already created TCP-client</param>
- /// <param name="certificate">The certificate.</param>
- /// <param name="isServer">if set to <c>true</c> [is server].</param>
- /// <param name="certValidator">User defined cert validator.</param>
- /// <param name="localCertificateSelectionCallback">The callback to select which certificate to use.</param>
- /// <param name="sslProtocols">The SslProtocols value that represents the protocol used for authentication.</param>
- public TTLSSocket(
- TcpClient client,
- X509Certificate certificate,
- bool isServer = false,
- RemoteCertificateValidationCallback certValidator = null,
- LocalCertificateSelectionCallback localCertificateSelectionCallback = null,
- // TODO: Enable Tls11 and Tls12 (TLS 1.1 and 1.2) by default once we start using .NET 4.5+.
- SslProtocols sslProtocols = SslProtocols.Tls)
- {
- this.client = client;
- this.certificate = certificate;
- this.certValidator = certValidator;
- this.localCertificateSelectionCallback = localCertificateSelectionCallback;
- this.sslProtocols = sslProtocols;
- this.isServer = isServer;
- if (isServer && certificate == null)
- {
- throw new ArgumentException("TTLSSocket needs certificate to be used for server", "certificate");
- }
-
- if (IsOpen)
- {
- base.inputStream = client.GetStream();
- base.outputStream = client.GetStream();
- }
- }
-
- /// <summary>
- /// Initializes a new instance of the <see cref="TTLSSocket"/> class.
- /// </summary>
- /// <param name="host">The host, where the socket should connect to.</param>
- /// <param name="port">The port.</param>
- /// <param name="certificatePath">The certificate path.</param>
- /// <param name="certValidator">User defined cert validator.</param>
- /// <param name="localCertificateSelectionCallback">The callback to select which certificate to use.</param>
- /// <param name="sslProtocols">The SslProtocols value that represents the protocol used for authentication.</param>
- public TTLSSocket(
- string host,
- int port,
- string certificatePath,
- RemoteCertificateValidationCallback certValidator = null,
- LocalCertificateSelectionCallback localCertificateSelectionCallback = null,
- SslProtocols sslProtocols = SslProtocols.Tls)
- : this(host, port, 0, X509Certificate.CreateFromCertFile(certificatePath), certValidator, localCertificateSelectionCallback, sslProtocols)
- {
- }
-
- /// <summary>
- /// Initializes a new instance of the <see cref="TTLSSocket"/> class.
- /// </summary>
- /// <param name="host">The host, where the socket should connect to.</param>
- /// <param name="port">The port.</param>
- /// <param name="certificate">The certificate.</param>
- /// <param name="certValidator">User defined cert validator.</param>
- /// <param name="localCertificateSelectionCallback">The callback to select which certificate to use.</param>
- /// <param name="sslProtocols">The SslProtocols value that represents the protocol used for authentication.</param>
- public TTLSSocket(
- string host,
- int port,
- X509Certificate certificate = null,
- RemoteCertificateValidationCallback certValidator = null,
- LocalCertificateSelectionCallback localCertificateSelectionCallback = null,
- SslProtocols sslProtocols = SslProtocols.Tls)
- : this(host, port, 0, certificate, certValidator, localCertificateSelectionCallback, sslProtocols)
- {
- }
-
- /// <summary>
- /// Initializes a new instance of the <see cref="TTLSSocket"/> class.
- /// </summary>
- /// <param name="host">The host, where the socket should connect to.</param>
- /// <param name="port">The port.</param>
- /// <param name="timeout">The timeout.</param>
- /// <param name="certificate">The certificate.</param>
- /// <param name="certValidator">User defined cert validator.</param>
- /// <param name="localCertificateSelectionCallback">The callback to select which certificate to use.</param>
- /// <param name="sslProtocols">The SslProtocols value that represents the protocol used for authentication.</param>
- public TTLSSocket(
- string host,
- int port,
- int timeout,
- X509Certificate certificate,
- RemoteCertificateValidationCallback certValidator = null,
- LocalCertificateSelectionCallback localCertificateSelectionCallback = null,
- SslProtocols sslProtocols = SslProtocols.Tls)
- {
- this.host = host;
- this.port = port;
- this.timeout = timeout;
- this.certificate = certificate;
- this.certValidator = certValidator;
- this.localCertificateSelectionCallback = localCertificateSelectionCallback;
- this.sslProtocols = sslProtocols;
-
- InitSocket();
- }
-
- /// <summary>
- /// Creates the TcpClient and sets the timeouts
- /// </summary>
- private void InitSocket()
- {
- client = TSocketVersionizer.CreateTcpClient();
- client.ReceiveTimeout = client.SendTimeout = timeout;
- client.Client.NoDelay = true;
- }
-
- /// <summary>
- /// Sets Send / Recv Timeout for IO
- /// </summary>
- public int Timeout
- {
- set
- {
- this.client.ReceiveTimeout = this.client.SendTimeout = this.timeout = value;
- }
- }
-
- /// <summary>
- /// Gets the TCP client.
- /// </summary>
- public TcpClient TcpClient
- {
- get
- {
- return client;
- }
- }
-
- /// <summary>
- /// Gets the host.
- /// </summary>
- public string Host
- {
- get
- {
- return host;
- }
- }
-
- /// <summary>
- /// Gets the port.
- /// </summary>
- public int Port
- {
- get
- {
- return port;
- }
- }
-
- /// <summary>
- /// Gets a value indicating whether TCP Client is Cpen
- /// </summary>
- public override bool IsOpen
- {
- get
- {
- if (this.client == null)
- {
- return false;
- }
-
- return this.client.Connected;
- }
- }
-
- /// <summary>
- /// Validates the certificates!<br/>
- /// </summary>
- /// <param name="sender">The sender-object.</param>
- /// <param name="certificate">The used certificate.</param>
- /// <param name="chain">The certificate chain.</param>
- /// <param name="sslValidationErrors">An enum, which lists all the errors from the .NET certificate check.</param>
- /// <returns></returns>
- private bool DefaultCertificateValidator(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslValidationErrors)
- {
- return (sslValidationErrors == SslPolicyErrors.None);
- }
-
- /// <summary>
- /// Connects to the host and starts the routine, which sets up the TLS
- /// </summary>
- public override void Open()
- {
- if (IsOpen)
- {
- throw new TTransportException(TTransportException.ExceptionType.AlreadyOpen, "Socket already connected");
- }
-
- if (string.IsNullOrEmpty(host))
- {
- throw new TTransportException(TTransportException.ExceptionType.NotOpen, "Cannot open null host");
- }
-
- if (port <= 0)
- {
- throw new TTransportException(TTransportException.ExceptionType.NotOpen, "Cannot open without port");
- }
-
- if (client == null)
- {
- InitSocket();
- }
-
- if (timeout == 0) // no timeout -> infinite
- {
- client.Connect(host, port);
- }
- else // we have a timeout -> use it
- {
- ConnectHelper hlp = new ConnectHelper(client);
- IAsyncResult asyncres = client.BeginConnect(host, port, new AsyncCallback(ConnectCallback), hlp);
- bool bConnected = asyncres.AsyncWaitHandle.WaitOne(timeout) && client.Connected;
- if (!bConnected)
- {
- lock (hlp.Mutex)
- {
- if (hlp.CallbackDone)
- {
- asyncres.AsyncWaitHandle.Close();
- client.Close();
- }
- else
- {
- hlp.DoCleanup = true;
- client = null;
- }
- }
- throw new TTransportException(TTransportException.ExceptionType.TimedOut, "Connect timed out");
- }
- }
-
- setupTLS();
- }
-
- /// <summary>
- /// Creates a TLS-stream and lays it over the existing socket
- /// </summary>
- public void setupTLS()
- {
- RemoteCertificateValidationCallback validator = this.certValidator ?? DefaultCertificateValidator;
-
- if (this.localCertificateSelectionCallback != null)
- {
- this.secureStream = new SslStream(
- this.client.GetStream(),
- false,
- validator,
- this.localCertificateSelectionCallback
- );
- }
- else
- {
- this.secureStream = new SslStream(
- this.client.GetStream(),
- false,
- validator
- );
- }
-
- try
- {
- if (isServer)
- {
- // Server authentication
- this.secureStream.AuthenticateAsServer(this.certificate, this.certValidator != null, sslProtocols, true);
- }
- else
- {
- // Client authentication
- X509CertificateCollection certs = certificate != null ? new X509CertificateCollection { certificate } : new X509CertificateCollection();
- this.secureStream.AuthenticateAsClient(host, certs, sslProtocols, true);
- }
- }
- catch (Exception)
- {
- this.Close();
- throw;
- }
-
- inputStream = this.secureStream;
- outputStream = this.secureStream;
- }
-
- static void ConnectCallback(IAsyncResult asyncres)
- {
- ConnectHelper hlp = asyncres.AsyncState as ConnectHelper;
- lock (hlp.Mutex)
- {
- hlp.CallbackDone = true;
-
- try
- {
- if (hlp.Client.Client != null)
- hlp.Client.EndConnect(asyncres);
- }
- catch (Exception)
- {
- // catch that away
- }
-
- if (hlp.DoCleanup)
- {
- try
- {
- asyncres.AsyncWaitHandle.Close();
- }
- catch (Exception) { }
-
- try
- {
- if (hlp.Client is IDisposable)
- ((IDisposable)hlp.Client).Dispose();
- }
- catch (Exception) { }
- hlp.Client = null;
- }
- }
- }
-
- private class ConnectHelper
- {
- public object Mutex = new object();
- public bool DoCleanup = false;
- public bool CallbackDone = false;
- public TcpClient Client;
- public ConnectHelper(TcpClient client)
- {
- Client = client;
- }
- }
-
- /// <summary>
- /// Closes the SSL Socket
- /// </summary>
- public override void Close()
- {
- base.Close();
- if (this.client != null)
- {
- this.client.Close();
- this.client = null;
- }
-
- if (this.secureStream != null)
- {
- this.secureStream.Close();
- this.secureStream = null;
- }
- }
- }
-}
diff --git a/lib/csharp/src/Transport/TTransport.cs b/lib/csharp/src/Transport/TTransport.cs
deleted file mode 100644
index 5e4ac22ea..000000000
--- a/lib/csharp/src/Transport/TTransport.cs
+++ /dev/null
@@ -1,146 +0,0 @@
-/**
- * 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.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-using System.IO;
-
-namespace Thrift.Transport
-{
- public abstract class TTransport : IDisposable
- {
- public abstract bool IsOpen
- {
- get;
- }
-
- private byte[] _peekBuffer = new byte[1];
- private bool _hasPeekByte;
-
- public bool Peek()
- {
- //If we already have a byte read but not consumed, do nothing.
- if (_hasPeekByte)
- return true;
-
- //If transport closed we can't peek.
- if (!IsOpen)
- return false;
-
- //Try to read one byte. If succeeds we will need to store it for the next read.
- try
- {
- int bytes = Read(_peekBuffer, 0, 1);
- if (bytes == 0)
- return false;
- }
- catch (IOException)
- {
- return false;
- }
-
- _hasPeekByte = true;
- return true;
- }
-
- public abstract void Open();
-
- public abstract void Close();
-
- protected static void ValidateBufferArgs(byte[] buf, int off, int len)
- {
- if (buf == null)
- throw new ArgumentNullException("buf");
- if (off < 0)
- throw new ArgumentOutOfRangeException("Buffer offset is smaller than zero.");
- if (len < 0)
- throw new ArgumentOutOfRangeException("Buffer length is smaller than zero.");
- if (off + len > buf.Length)
- throw new ArgumentOutOfRangeException("Not enough data.");
- }
-
- public abstract int Read(byte[] buf, int off, int len);
-
- public int ReadAll(byte[] buf, int off, int len)
- {
- ValidateBufferArgs(buf, off, len);
- int got = 0;
-
- //If we previously peeked a byte, we need to use that first.
- if (_hasPeekByte)
- {
- buf[off + got++] = _peekBuffer[0];
- _hasPeekByte = false;
- }
-
- while (got < len)
- {
- int ret = Read(buf, off + got, len - got);
- if (ret <= 0)
- {
- throw new TTransportException(
- TTransportException.ExceptionType.EndOfFile,
- "Cannot read, Remote side has closed");
- }
- got += ret;
- }
- return got;
- }
-
- public virtual void Write(byte[] buf)
- {
- Write(buf, 0, buf.Length);
- }
-
- public abstract void Write(byte[] buf, int off, int len);
-
- public virtual void Flush()
- {
- }
-
- public virtual IAsyncResult BeginFlush(AsyncCallback callback, object state)
- {
- throw new TTransportException(
- TTransportException.ExceptionType.Unknown,
- "Asynchronous operations are not supported by this transport.");
- }
-
- public virtual void EndFlush(IAsyncResult asyncResult)
- {
- throw new TTransportException(
- TTransportException.ExceptionType.Unknown,
- "Asynchronous operations are not supported by this transport.");
- }
-
- #region " IDisposable Support "
- // IDisposable
- protected abstract void Dispose(bool disposing);
-
- public void Dispose()
- {
- // Do not change this code. Put cleanup code in Dispose(ByVal disposing As Boolean) above.
- Dispose(true);
- GC.SuppressFinalize(this);
- }
- #endregion
- }
-}
diff --git a/lib/csharp/src/Transport/TTransportException.cs b/lib/csharp/src/Transport/TTransportException.cs
deleted file mode 100644
index 7f6cc1889..000000000
--- a/lib/csharp/src/Transport/TTransportException.cs
+++ /dev/null
@@ -1,69 +0,0 @@
-/**
- * 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.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-
-namespace Thrift.Transport
-{
- public class TTransportException : TException
- {
- protected ExceptionType type;
-
- public TTransportException()
- : base()
- {
- }
-
- public TTransportException(ExceptionType type)
- : this()
- {
- this.type = type;
- }
-
- public TTransportException(ExceptionType type, string message, Exception inner = null)
- : base(message, inner)
- {
- this.type = type;
- }
-
- public TTransportException(string message, Exception inner = null)
- : base(message, inner)
- {
- }
-
- public ExceptionType Type
- {
- get { return type; }
- }
-
- public enum ExceptionType
- {
- Unknown,
- NotOpen,
- AlreadyOpen,
- TimedOut,
- EndOfFile,
- Interrupted
- }
- }
-}
diff --git a/lib/csharp/src/Transport/TTransportFactory.cs b/lib/csharp/src/Transport/TTransportFactory.cs
deleted file mode 100644
index 47a0c6265..000000000
--- a/lib/csharp/src/Transport/TTransportFactory.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * 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.
- *
- * Contains some contributions under the Thrift Software License.
- * Please see doc/old-thrift-license.txt in the Thrift distribution for
- * details.
- */
-
-using System;
-
-namespace Thrift.Transport
-{
- /// <summary>
- /// From Mark Slee &amp; Aditya Agarwal of Facebook:
- /// Factory class used to create wrapped instance of Transports.
- /// This is used primarily in servers, which get Transports from
- /// a ServerTransport and then may want to mutate them (i.e. create
- /// a BufferedTransport from the underlying base transport)
- /// </summary>
- public class TTransportFactory
- {
- public virtual TTransport GetTransport(TTransport trans)
- {
- return trans;
- }
- }
-}
diff --git a/lib/csharp/src/thrift.snk b/lib/csharp/src/thrift.snk
deleted file mode 100644
index 97bc5812b..000000000
--- a/lib/csharp/src/thrift.snk
+++ /dev/null
Binary files differ
diff --git a/lib/csharp/test/JSON/JSONTest.csproj b/lib/csharp/test/JSON/JSONTest.csproj
deleted file mode 100644
index f07d43eec..000000000
--- a/lib/csharp/test/JSON/JSONTest.csproj
+++ /dev/null
@@ -1,85 +0,0 @@
-<?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="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
- <ProductVersion>8.0.30703</ProductVersion>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{E37A0034-DCBF-4886-A0DA-25A03D12D975}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <RootNamespace>JSONTest</RootNamespace>
- <AssemblyName>JSONTest</AssemblyName>
- <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
- <TargetFrameworkProfile>
- </TargetFrameworkProfile>
- <FileAlignment>512</FileAlignment>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
- <PlatformTarget>x86</PlatformTarget>
- <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|x86' ">
- <PlatformTarget>x86</PlatformTarget>
- <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" />
- <Reference Include="System.Xml.Linq" />
- <Reference Include="System.Data.DataSetExtensions" />
- <Reference Include="Microsoft.CSharp" />
- <Reference Include="System.Data" />
- <Reference Include="System.Xml" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="Program.cs" />
- <Compile Include="Properties\AssemblyInfo.cs" />
- </ItemGroup>
- <ItemGroup>
- <None Include="app.config" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\..\src\Thrift.csproj">
- <Project>{499EB63C-D74C-47E8-AE48-A2FC94538E9D}</Project>
- <Name>Thrift</Name>
- </ProjectReference>
- </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/lib/csharp/test/JSON/Program.cs b/lib/csharp/test/JSON/Program.cs
deleted file mode 100644
index f61388ae7..000000000
--- a/lib/csharp/test/JSON/Program.cs
+++ /dev/null
@@ -1,95 +0,0 @@
-/**
- * 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 System.Diagnostics;
-using System.IO;
-using System.Linq;
-using System.Text;
-using Thrift.Protocol;
-using Thrift.Transport;
-
-namespace JSONTest
-{
- class Program
- {
- static void Main(string[] args)
- {
- TestThrift2365(); // JSON binary decodes too much data
- TestThrift2336(); // hex encoding using \uXXXX where 0xXXXX > 0xFF
- TestThrift3403(); // JSON escaped unicode surrogate pair support.
- }
-
-
- public static void TestThrift2365()
- {
- var rnd = new Random();
- for (var len = 0; len < 10; ++len)
- {
- byte[] dataWritten = new byte[len];
- rnd.NextBytes(dataWritten);
-
- Stream stm = new MemoryStream();
- TTransport trans = new TStreamTransport(null, stm);
- TProtocol prot = new TJSONProtocol(trans);
- prot.WriteBinary(dataWritten);
-
- stm.Position = 0;
- trans = new TStreamTransport(stm, null);
- prot = new TJSONProtocol(trans);
- byte[] dataRead = prot.ReadBinary();
-
- Debug.Assert(dataRead.Length == dataWritten.Length);
- for (var i = 0; i < dataRead.Length; ++i)
- Debug.Assert(dataRead[i] == dataWritten[i]);
- }
- }
-
-
- public static void TestThrift2336()
- {
- const string RUSSIAN_TEXT = "\u0420\u0443\u0441\u0441\u043a\u043e\u0435 \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435";
- const string RUSSIAN_JSON = "\"\\u0420\\u0443\\u0441\\u0441\\u043a\\u043e\\u0435 \\u041d\\u0430\\u0437\\u0432\\u0430\\u043d\\u0438\\u0435\"";
-
- // prepare buffer with JSON data
- byte[] rawBytes = new byte[RUSSIAN_JSON.Length];
- for (var i = 0; i < RUSSIAN_JSON.Length; ++i)
- rawBytes[i] = (byte)(RUSSIAN_JSON[i] & (char)0xFF); // only low bytes
-
- // parse and check
- var stm = new MemoryStream(rawBytes);
- var trans = new TStreamTransport(stm, null);
- var prot = new TJSONProtocol(trans);
- Debug.Assert(prot.ReadString() == RUSSIAN_TEXT, "reading JSON with hex-encoded chars > 8 bit");
- }
-
- public static void TestThrift3403()
- {
- string GCLEF_TEXT = "\ud834\udd1e";
- const string GCLEF_JSON = "\"\\ud834\\udd1e\"";
-
- // parse and check
- var stm = new MemoryStream(Encoding.UTF8.GetBytes(GCLEF_JSON));
- var trans = new TStreamTransport(stm, null);
- var prot = new TJSONProtocol(trans);
- Debug.Assert(prot.ReadString() == GCLEF_TEXT, "reading JSON with surrogate pair hex-encoded chars");
- }
- }
-}
diff --git a/lib/csharp/test/JSON/Properties/AssemblyInfo.cs b/lib/csharp/test/JSON/Properties/AssemblyInfo.cs
deleted file mode 100644
index fdff4a1a5..000000000
--- a/lib/csharp/test/JSON/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * 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;
-
-// Allgemeine Informationen über eine Assembly werden über die folgenden
-// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
-// die mit einer Assembly verknüpft sind.
-[assembly: AssemblyTitle("JSONTest")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("The Apache Software Foundation")]
-[assembly: AssemblyProduct("Thrift")]
-[assembly: AssemblyCopyright("The Apache Software Foundation")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar
-// für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von
-// COM zugreifen müssen, legen Sie das ComVisible-Attribut für diesen Typ auf "true" fest.
-[assembly: ComVisible(false)]
-
-// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
-[assembly: Guid("2b2e7d56-3e65-4368-92d7-e34d56b7105e")]
-
-// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
-//
-// Hauptversion
-// Nebenversion
-// Buildnummer
-// Revision
-//
-// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
-// übernehmen, indem Sie "*" eingeben:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/lib/csharp/test/JSON/app.config b/lib/csharp/test/JSON/app.config
deleted file mode 100644
index 9c1919d4f..000000000
--- a/lib/csharp/test/JSON/app.config
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0"?>
-<!--
- 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.
--->
-<configuration>
-<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
diff --git a/lib/csharp/test/Multiplex/Client/Multiplex.Test.Client.cs b/lib/csharp/test/Multiplex/Client/Multiplex.Test.Client.cs
deleted file mode 100644
index c810a0891..000000000
--- a/lib/csharp/test/Multiplex/Client/Multiplex.Test.Client.cs
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * 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.Collections;
-using Thrift.Transport;
-using Thrift.Protocol;
-using Thrift.Server;
-using Thrift;
-using Test.Multiplex;
-
-namespace Test.Multiplex.Client
-{
- public class TestClient
- {
- static void Execute(int port)
- {
- try
- {
- TTransport trans;
- trans = new TSocket("localhost", port);
- trans = new TFramedTransport(trans);
- trans.Open();
-
- TProtocol Protocol = new TBinaryProtocol(trans, true, true);
-
- TMultiplexedProtocol multiplex;
-
- multiplex = new TMultiplexedProtocol(Protocol, Constants.NAME_BENCHMARKSERVICE);
- BenchmarkService.Iface bench = new BenchmarkService.Client(multiplex);
-
- multiplex = new TMultiplexedProtocol(Protocol, Constants.NAME_AGGR);
- Aggr.Iface aggr = new Aggr.Client(multiplex);
-
- for (sbyte i = 1; 10 >= i; ++i)
- {
- aggr.addValue(bench.fibonacci(i));
- }
-
- foreach (int k in aggr.getValues())
- {
- Console.Write(k.ToString() + " ");
- Console.WriteLine("");
- }
- trans.Close();
- }
- catch (Exception e)
- {
- Console.WriteLine(e.Message);
- }
- }
-
- static void Main(string[] args)
- {
- int port = 9090;
- if (args.Length > 0)
- {
- port = ushort.Parse(args[0]);
- }
- Execute(port);
- Console.WriteLine("done.");
- }
- }
-}
-
diff --git a/lib/csharp/test/Multiplex/Client/MultiplexClient.csproj b/lib/csharp/test/Multiplex/Client/MultiplexClient.csproj
deleted file mode 100644
index 551640ba6..000000000
--- a/lib/csharp/test/Multiplex/Client/MultiplexClient.csproj
+++ /dev/null
@@ -1,148 +0,0 @@
-<?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="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProductVersion>9.0.21022</ProductVersion>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{5E91DA17-E548-415F-8C9F-9E84EDF8EE06}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <RootNamespace>MultiplexClient</RootNamespace>
- <AssemblyName>MultiplexClient</AssemblyName>
- <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
- <FileAlignment>512</FileAlignment>
- <IsWebBootstrapper>false</IsWebBootstrapper>
- <FileUpgradeFlags>
- </FileUpgradeFlags>
- <OldToolsVersion>3.5</OldToolsVersion>
- <UpgradeBackupLocation />
- <PublishUrl>publish\</PublishUrl>
- <Install>true</Install>
- <InstallFrom>Disk</InstallFrom>
- <UpdateEnabled>false</UpdateEnabled>
- <UpdateMode>Foreground</UpdateMode>
- <UpdateInterval>7</UpdateInterval>
- <UpdateIntervalUnits>Days</UpdateIntervalUnits>
- <UpdatePeriodically>false</UpdatePeriodically>
- <UpdateRequired>false</UpdateRequired>
- <MapFileExtensions>true</MapFileExtensions>
- <ApplicationRevision>0</ApplicationRevision>
- <ApplicationVersion>0.14.0.0</ApplicationVersion>
- <UseApplicationTrust>false</UseApplicationTrust>
- <BootstrapperEnabled>true</BootstrapperEnabled>
- </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>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </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>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <ItemGroup>
- <Reference Include="System" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="..\Multiplex.Test.Common.cs">
- <Link>Multiplex.Test.Common.cs</Link>
- </Compile>
- <Compile Include="..\gen-csharp\Aggr.cs" />
- <Compile Include="..\gen-csharp\BenchmarkService.cs" />
- <Compile Include="..\gen-csharp\Error.cs" />
- <Compile Include="Multiplex.Test.Client.cs" />
- <Compile Include="Properties\AssemblyInfo.cs" />
- </ItemGroup>
- <ItemGroup>
- <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
- <Install>false</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Net.Framework.2.0">
- <Visible>False</Visible>
- <ProductName>.NET Framework 2.0 %28x86%29</ProductName>
- <Install>false</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Net.Framework.3.0">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.0 %28x86%29</ProductName>
- <Install>false</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Net.Framework.3.5">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5</ProductName>
- <Install>true</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5 SP1</ProductName>
- <Install>false</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
- <Visible>False</Visible>
- <ProductName>Windows Installer 3.1</ProductName>
- <Install>true</Install>
- </BootstrapperPackage>
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\..\..\src\Thrift.csproj">
- <Project>{499EB63C-D74C-47E8-AE48-A2FC94538E9D}</Project>
- <Name>Thrift</Name>
- </ProjectReference>
- </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>
- -->
- <PropertyGroup>
- <PreBuildEvent>rmdir /s /q "$(ProjectDir)gen-csharp"
-del /f /q "$(ProjectDir)ThriftImpl.dll"
-SET OUTPUT_DIR=$(ProjectDir)
-
-SET THRIFT_FILE=$(ProjectDir)\..\..\..\..\..\contrib\async-test\aggr.thrift
-for %25%25I in ("%25OUTPUT_DIR%25") do set SHORT_DIR=%25%25~fsI
-for %25%25I in ("%25THRIFT_FILE%25") do set THRIFT_SHORT=%25%25~fsI
-"$(ProjectDir)\..\..\..\..\..\compiler\cpp\thrift.exe" --gen csharp -o %25SHORT_DIR%25 %25THRIFT_SHORT%25
-
-SET THRIFT_FILE=$(ProjectDir)\..\..\..\..\..\lib\rb\benchmark\Benchmark.thrift
-for %25%25I in ("%25OUTPUT_DIR%25") do set SHORT_DIR=%25%25~fsI
-for %25%25I in ("%25THRIFT_FILE%25") do set THRIFT_SHORT=%25%25~fsI
-"$(ProjectDir)\..\..\..\..\..\compiler\cpp\thrift.exe" --gen csharp -o %25SHORT_DIR%25 %25THRIFT_SHORT%25
-
-</PreBuildEvent>
- </PropertyGroup>
-</Project>
diff --git a/lib/csharp/test/Multiplex/Client/Properties/AssemblyInfo.cs b/lib/csharp/test/Multiplex/Client/Properties/AssemblyInfo.cs
deleted file mode 100644
index ce6692fb0..000000000
--- a/lib/csharp/test/Multiplex/Client/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * 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("MultiplexClient")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("The Apache Software Foundation")]
-[assembly: AssemblyProduct("Thrift")]
-[assembly: AssemblyCopyright("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("66FC61E5-420B-4b56-8012-D6D6CE22537F")]
-
-// 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("0.14.0.0")]
-[assembly: AssemblyFileVersion("0.14.0.0")]
diff --git a/lib/csharp/test/Multiplex/Makefile.am b/lib/csharp/test/Multiplex/Makefile.am
deleted file mode 100644
index 9c1f1b8b7..000000000
--- a/lib/csharp/test/Multiplex/Makefile.am
+++ /dev/null
@@ -1,63 +0,0 @@
-#
-# 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.
-#
-
-GENERATED = \
- gen-csharp/Aggr.cs \
- gen-csharp/BenchmarkService.cs \
- gen-csharp/Error.cs
-
-BUILT_SOURCES = $(GENERATED)
-
-THRIFT = $(top_builddir)/compiler/cpp/thrift
-
-gen-csharp/Aggr.cs: $(top_srcdir)/contrib/async-test/aggr.thrift
- $(THRIFT) --gen csharp $<
-
-gen-csharp/BenchmarkService.cs gen-csharp/Error.cs: $(top_srcdir)/lib/rb/benchmark/Benchmark.thrift
- $(THRIFT) --gen csharp $<
-
-ThriftImpl.dll: Multiplex.Test.Common.cs $(GENERATED) ../../Thrift.dll
- $(CSC) $(CSC_DEFINES) -t:library -out:./ThriftImpl.dll -reference:../../Thrift.dll $(GENERATED) $<
-
-MultiplexClient.exe: Client/Multiplex.Test.Client.cs ThriftImpl.dll
- $(CSC) $(CSC_DEFINES) -out:$@ -reference:../../Thrift.dll -reference:ThriftImpl.dll $<
-
-MultiplexServer.exe: Server/Multiplex.Test.Server.cs ThriftImpl.dll
- $(CSC) $(CSC_DEFINES) -out:$@ -reference:../../Thrift.dll -reference:ThriftImpl.dll $<
-
-CLEANFILES = \
- MultiplexClient.exe \
- MultiplexServer.exe \
- ThriftImpl.dll
-
-DISTCLEANFILES = \
- Makefile.in
-
-clean-local:
- $(RM) -rf gen-csharp
-
-dist-hook:
- $(RM) -r $(distdir)/gen-csharp/
-
-TESTPORT = 9501
-check-local: MultiplexServer.exe MultiplexClient.exe
- echo $(TESTPORT)
- MONO_PATH=../../ timeout 10 mono MultiplexServer.exe $(TESTPORT) &
- sleep 1
- MONO_PATH=../../ mono MultiplexClient.exe $(TESTPORT)
diff --git a/lib/csharp/test/Multiplex/Multiplex.Test.Common.cs b/lib/csharp/test/Multiplex/Multiplex.Test.Common.cs
deleted file mode 100644
index a687852d9..000000000
--- a/lib/csharp/test/Multiplex/Multiplex.Test.Common.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * 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.
- */
-
-// Distributed under the Thrift Software License
-//
-// See accompanying file LICENSE or visit the Thrift site at:
-// http://developers.facebook.com/thrift/
-using System;
-using System.Collections.Generic;
-using Thrift.Collections;
-using Thrift.Transport;
-using Thrift.Protocol;
-using Thrift.Server;
-
-namespace Test.Multiplex
-{
- public class Constants
- {
- public const string NAME_BENCHMARKSERVICE = "BenchmarkService";
- public const string NAME_AGGR = "Aggr";
- }
-}
-
-
diff --git a/lib/csharp/test/Multiplex/Server/Multiplex.Test.Server.cs b/lib/csharp/test/Multiplex/Server/Multiplex.Test.Server.cs
deleted file mode 100644
index 9786189bb..000000000
--- a/lib/csharp/test/Multiplex/Server/Multiplex.Test.Server.cs
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * 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.Collections;
-using Thrift.Transport;
-using Thrift.Protocol;
-using Thrift.Server;
-using Thrift;
-using Test.Multiplex;
-
-namespace Test.Multiplex.Server
-{
- public class TestServer
- {
- class BenchmarkServiceImpl : BenchmarkService.Iface
- {
- public int fibonacci(sbyte n)
- {
- int prev, next, result;
- prev = 0;
- result = 1;
- while (n > 0)
- {
- next = result + prev;
- prev = result;
- result = next;
- --n;
- }
- return result;
- }
- }
-
- class AggrServiceImpl : Aggr.Iface
- {
- List<int> values = new List<int>();
-
- public void addValue(int value)
- {
- values.Add(value);
- }
-
- public List<int> getValues()
- {
- return values;
- }
- }
-
- static void Execute(int port)
- {
- try
- {
- // create protocol factory, default to BinaryProtocol
- TProtocolFactory ProtocolFactory = new TBinaryProtocol.Factory(true,true);
- TServerTransport servertrans = new TServerSocket(port, 0, false);
- TTransportFactory TransportFactory = new TFramedTransport.Factory();
-
- BenchmarkService.Iface benchHandler = new BenchmarkServiceImpl();
- TProcessor benchProcessor = new BenchmarkService.Processor(benchHandler);
-
- Aggr.Iface aggrHandler = new AggrServiceImpl();
- TProcessor aggrProcessor = new Aggr.Processor(aggrHandler);
-
- TMultiplexedProcessor multiplex = new TMultiplexedProcessor();
- multiplex.RegisterProcessor(Constants.NAME_BENCHMARKSERVICE, benchProcessor);
- multiplex.RegisterProcessor(Constants.NAME_AGGR, aggrProcessor);
-
- TServer ServerEngine = new TSimpleServer(multiplex, servertrans, TransportFactory, ProtocolFactory);
-
- Console.WriteLine("Starting the server ...");
- ServerEngine.Serve();
- }
- catch (Exception e)
- {
- Console.WriteLine(e.Message);
- }
- }
-
- static void Main(string[] args)
- {
- int port = 9090;
- if (args.Length > 0)
- {
- port = ushort.Parse(args[0]);
- }
- Execute(port);
- }
- }
-}
-
diff --git a/lib/csharp/test/Multiplex/Server/MultiplexServer.csproj b/lib/csharp/test/Multiplex/Server/MultiplexServer.csproj
deleted file mode 100644
index 771ee1266..000000000
--- a/lib/csharp/test/Multiplex/Server/MultiplexServer.csproj
+++ /dev/null
@@ -1,148 +0,0 @@
-<?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="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProductVersion>9.0.21022</ProductVersion>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{D592BDF3-0DCE-48FB-890F-E4AE1D9CE7CD}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <RootNamespace>MultiplexServer</RootNamespace>
- <AssemblyName>MultiplexServer</AssemblyName>
- <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
- <FileAlignment>512</FileAlignment>
- <IsWebBootstrapper>false</IsWebBootstrapper>
- <FileUpgradeFlags>
- </FileUpgradeFlags>
- <OldToolsVersion>3.5</OldToolsVersion>
- <UpgradeBackupLocation />
- <PublishUrl>publish\</PublishUrl>
- <Install>true</Install>
- <InstallFrom>Disk</InstallFrom>
- <UpdateEnabled>false</UpdateEnabled>
- <UpdateMode>Foreground</UpdateMode>
- <UpdateInterval>7</UpdateInterval>
- <UpdateIntervalUnits>Days</UpdateIntervalUnits>
- <UpdatePeriodically>false</UpdatePeriodically>
- <UpdateRequired>false</UpdateRequired>
- <MapFileExtensions>true</MapFileExtensions>
- <ApplicationRevision>0</ApplicationRevision>
- <ApplicationVersion>0.14.0.0</ApplicationVersion>
- <UseApplicationTrust>false</UseApplicationTrust>
- <BootstrapperEnabled>true</BootstrapperEnabled>
- </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>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </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>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <ItemGroup>
- <Reference Include="System" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="..\Multiplex.Test.Common.cs">
- <Link>Multiplex.Test.Common.cs</Link>
- </Compile>
- <Compile Include="..\gen-csharp\Aggr.cs" />
- <Compile Include="..\gen-csharp\BenchmarkService.cs" />
- <Compile Include="..\gen-csharp\Error.cs" />
- <Compile Include="Multiplex.Test.Server.cs" />
- <Compile Include="Properties\AssemblyInfo.cs" />
- </ItemGroup>
- <ItemGroup>
- <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
- <Install>false</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Net.Framework.2.0">
- <Visible>False</Visible>
- <ProductName>.NET Framework 2.0 %28x86%29</ProductName>
- <Install>false</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Net.Framework.3.0">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.0 %28x86%29</ProductName>
- <Install>false</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Net.Framework.3.5">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5</ProductName>
- <Install>true</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5 SP1</ProductName>
- <Install>false</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
- <Visible>False</Visible>
- <ProductName>Windows Installer 3.1</ProductName>
- <Install>true</Install>
- </BootstrapperPackage>
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\..\..\src\Thrift.csproj">
- <Project>{499EB63C-D74C-47E8-AE48-A2FC94538E9D}</Project>
- <Name>Thrift</Name>
- </ProjectReference>
- </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>
- -->
- <PropertyGroup>
- <PreBuildEvent>rmdir /s /q "$(ProjectDir)gen-csharp"
-del /f /q "$(ProjectDir)ThriftImpl.dll"
-SET OUTPUT_DIR=$(ProjectDir)
-
-SET THRIFT_FILE=$(ProjectDir)\..\..\..\..\..\contrib\async-test\aggr.thrift
-for %25%25I in ("%25OUTPUT_DIR%25") do set SHORT_DIR=%25%25~fsI
-for %25%25I in ("%25THRIFT_FILE%25") do set THRIFT_SHORT=%25%25~fsI
-"$(ProjectDir)\..\..\..\..\..\compiler\cpp\thrift.exe" --gen csharp -o %25SHORT_DIR%25 %25THRIFT_SHORT%25
-
-SET THRIFT_FILE=$(ProjectDir)\..\..\..\..\..\lib\rb\benchmark\Benchmark.thrift
-for %25%25I in ("%25OUTPUT_DIR%25") do set SHORT_DIR=%25%25~fsI
-for %25%25I in ("%25THRIFT_FILE%25") do set THRIFT_SHORT=%25%25~fsI
-"$(ProjectDir)\..\..\..\..\..\compiler\cpp\thrift.exe" --gen csharp -o %25SHORT_DIR%25 %25THRIFT_SHORT%25
-
-</PreBuildEvent>
- </PropertyGroup>
-</Project>
diff --git a/lib/csharp/test/Multiplex/Server/Properties/AssemblyInfo.cs b/lib/csharp/test/Multiplex/Server/Properties/AssemblyInfo.cs
deleted file mode 100644
index 50b11af2b..000000000
--- a/lib/csharp/test/Multiplex/Server/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * 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("MultiplexServer")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("The Apache Software Foundation")]
-[assembly: AssemblyProduct("Thrift")]
-[assembly: AssemblyCopyright("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("F2F436C1-3D4F-411a-ADC3-B98848476A8E")]
-
-// 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("0.14.0.0")]
-[assembly: AssemblyFileVersion("0.14.0.0")]
diff --git a/lib/csharp/test/ThriftMVCTest/App_Start/FilterConfig.cs b/lib/csharp/test/ThriftMVCTest/App_Start/FilterConfig.cs
deleted file mode 100644
index 855184fd2..000000000
--- a/lib/csharp/test/ThriftMVCTest/App_Start/FilterConfig.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * 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.Web.Mvc;
-
-namespace ThriftMVCTest
-{
- public static class FilterConfig
- {
- public static void RegisterGlobalFilters(GlobalFilterCollection filters)
- {
- filters.Add(new HandleErrorAttribute());
- }
- }
-}
diff --git a/lib/csharp/test/ThriftMVCTest/App_Start/RouteConfig.cs b/lib/csharp/test/ThriftMVCTest/App_Start/RouteConfig.cs
deleted file mode 100644
index b4b6023d6..000000000
--- a/lib/csharp/test/ThriftMVCTest/App_Start/RouteConfig.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * 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.Web.Mvc;
-using System.Web.Routing;
-
-namespace ThriftMVCTest
-{
- public static class RouteConfig
- {
- public static void RegisterRoutes(RouteCollection routes)
- {
- routes.IgnoreRoute("{resource}.thrift");
- routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
-
- routes.MapRoute(
- name: "Default",
- url: "{controller}/{action}/{id}",
- defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
- );
- }
- }
-}
diff --git a/lib/csharp/test/ThriftMVCTest/AsyncHttpHandler.cs b/lib/csharp/test/ThriftMVCTest/AsyncHttpHandler.cs
deleted file mode 100644
index 7f26184fa..000000000
--- a/lib/csharp/test/ThriftMVCTest/AsyncHttpHandler.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * 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 Thrift.Transport;
-
-namespace ThriftMVCTest
-{
- public class AsyncHttpHandler : THttpTaskAsyncHandler
- {
- public AsyncHttpHandler()
- : base(
- new Thrift.Test.SecondService.AsyncProcessor(new SecondServiceImpl()))
- {
- }
- }
-} \ No newline at end of file
diff --git a/lib/csharp/test/ThriftMVCTest/Controllers/HomeController.cs b/lib/csharp/test/ThriftMVCTest/Controllers/HomeController.cs
deleted file mode 100644
index c9a1ec43f..000000000
--- a/lib/csharp/test/ThriftMVCTest/Controllers/HomeController.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-/**
- * 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.Threading.Tasks;
-using System.Web.Mvc;
-using Thrift.Protocol;
-using Thrift.Test;
-using Thrift.Transport;
-
-namespace ThriftMVCTest.Controllers
-{
- public class HomeController : Controller
- {
- public ActionResult Index()
- {
- return View();
- }
-
- public async Task<ActionResult> TestThriftAsync()
- {
- var baseUri = new Uri(string.Format("{0}://{1}{2}", Request.Url.Scheme, Request.Url.Authority,
- Url.Content("~")));
-
- SecondService.IAsync asyncService =
- new SecondService.Client(new TBinaryProtocol(new THttpClient(new Uri(baseUri, "Async.thrift"))));
-
- var result = await asyncService.secondtestStringAsync("TestString");
- if (result != "testString(\"TestString\")")
- {
- throw new Exception("The wrong result was returned");
- }
-
- return RedirectToAction("Index");
- }
-
- public ActionResult TestThriftSync()
- {
- var baseUri = new Uri(string.Format("{0}://{1}{2}", Request.Url.Scheme, Request.Url.Authority,
- Url.Content("~")));
-
- SecondService.ISync service =
- new SecondService.Client(new TBinaryProtocol(new THttpClient(new Uri(baseUri, "Sync.thrift"))));
-
- var result = service.secondtestString("TestString");
- if (result != "testString(\"TestString\")")
- {
- throw new Exception("The wrong result was returned");
- }
-
- return RedirectToAction("Index");
- }
- }
-}
diff --git a/lib/csharp/test/ThriftMVCTest/Global.asax b/lib/csharp/test/ThriftMVCTest/Global.asax
deleted file mode 100644
index 7bb688c7a..000000000
--- a/lib/csharp/test/ThriftMVCTest/Global.asax
+++ /dev/null
@@ -1,19 +0,0 @@
-<%@ Application Codebehind="Global.asax.cs" Inherits="ThriftMVCTest.MvcApplication" Language="C#" %>
-<!--
- 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.
--->
diff --git a/lib/csharp/test/ThriftMVCTest/Global.asax.cs b/lib/csharp/test/ThriftMVCTest/Global.asax.cs
deleted file mode 100644
index 59731efb3..000000000
--- a/lib/csharp/test/ThriftMVCTest/Global.asax.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * 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.Web.Mvc;
-using System.Web.Routing;
-
-namespace ThriftMVCTest
-{
- public class MvcApplication : System.Web.HttpApplication
- {
- protected void Application_Start()
- {
- AreaRegistration.RegisterAllAreas();
- FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
- RouteConfig.RegisterRoutes(RouteTable.Routes);
- }
- }
-}
diff --git a/lib/csharp/test/ThriftMVCTest/Properties/AssemblyInfo.cs b/lib/csharp/test/ThriftMVCTest/Properties/AssemblyInfo.cs
deleted file mode 100644
index a87107cb9..000000000
--- a/lib/csharp/test/ThriftMVCTest/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * 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.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("ThriftMVCTest")]
-[assembly: AssemblyDescription("A web project for testing the thrift ASP.NET features.")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("The Apache Software Foundation")]
-[assembly: AssemblyProduct("Thrift")]
-[assembly: AssemblyCopyright("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("366f9bd0-3c0e-48aa-b2ca-61fd4a93e427")]
-
-// 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("0.14.0.0")]
-[assembly: AssemblyFileVersion("0.14.0.0")]
diff --git a/lib/csharp/test/ThriftMVCTest/SecondServiceImpl.cs b/lib/csharp/test/ThriftMVCTest/SecondServiceImpl.cs
deleted file mode 100644
index fad301a35..000000000
--- a/lib/csharp/test/ThriftMVCTest/SecondServiceImpl.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * 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.Threading.Tasks;
-using Thrift.Test;
-
-namespace ThriftMVCTest
-{
- public class SecondServiceImpl : SecondService.IAsync, SecondService.ISync
- {
- public Task<string> secondtestStringAsync(string thing)
- {
- return Task.FromResult(thing);
- }
-
- public string secondtestString(string thing)
- {
- return "testString(\"" + thing + "\")";
- }
- }
-}
diff --git a/lib/csharp/test/ThriftMVCTest/SyncHttpHandler.cs b/lib/csharp/test/ThriftMVCTest/SyncHttpHandler.cs
deleted file mode 100644
index 4fe26624a..000000000
--- a/lib/csharp/test/ThriftMVCTest/SyncHttpHandler.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * 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 Thrift.Transport;
-
-namespace ThriftMVCTest
-{
- public class SyncHttpHandler : THttpHandler
- {
- public SyncHttpHandler()
- : base(
- new Thrift.Test.SecondService.Processor(new SecondServiceImpl()))
- {
- }
- }
-} \ No newline at end of file
diff --git a/lib/csharp/test/ThriftMVCTest/ThriftMVCTest.csproj b/lib/csharp/test/ThriftMVCTest/ThriftMVCTest.csproj
deleted file mode 100644
index 0eb969a04..000000000
--- a/lib/csharp/test/ThriftMVCTest/ThriftMVCTest.csproj
+++ /dev/null
@@ -1,200 +0,0 @@
-<?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="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProductVersion>
- </ProductVersion>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{891B4487-C7BA-427E-BBC8-4C596C229A10}</ProjectGuid>
- <ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
- <OutputType>Library</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <RootNamespace>ThriftMVCTest</RootNamespace>
- <AssemblyName>ThriftMVCTest</AssemblyName>
- <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
- <MvcBuildViews>false</MvcBuildViews>
- <UseIISExpress>true</UseIISExpress>
- <IISExpressSSLPort />
- <IISExpressAnonymousAuthentication />
- <IISExpressWindowsAuthentication />
- <IISExpressUseClassicPipelineMode />
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <OutputPath>bin\</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\</OutputPath>
- <DefineConstants>TRACE</DefineConstants>
- <ErrorReport>prompt</ErrorReport>
- <WarningLevel>4</WarningLevel>
- </PropertyGroup>
- <ItemGroup>
- <Reference Include="Microsoft.CSharp" />
- <Reference Include="System" />
- <Reference Include="System.Data" />
- <Reference Include="System.Drawing" />
- <Reference Include="System.Web.DynamicData" />
- <Reference Include="System.Web.Entity" />
- <Reference Include="System.Web.ApplicationServices" />
- <Reference Include="System.ComponentModel.DataAnnotations" />
- <Reference Include="System.Core" />
- <Reference Include="System.Data.DataSetExtensions" />
- <Reference Include="System.Xml.Linq" />
- <Reference Include="System.Web" />
- <Reference Include="System.Web.Extensions" />
- <Reference Include="System.Web.Abstractions" />
- <Reference Include="System.Web.Routing" />
- <Reference Include="System.Xml" />
- <Reference Include="System.Configuration" />
- <Reference Include="System.Web.Services" />
- <Reference Include="System.EnterpriseServices" />
- <Reference Include="Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
- <Private>True</Private>
- <HintPath>..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath>
- </Reference>
- <Reference Include="System.Net.Http">
- </Reference>
- <Reference Include="System.Net.Http.WebRequest">
- </Reference>
- <Reference Include="System.Web.Helpers, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
- <Private>True</Private>
- <HintPath>..\packages\Microsoft.AspNet.WebPages.3.2.3\lib\net45\System.Web.Helpers.dll</HintPath>
- </Reference>
- <Reference Include="System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
- <Private>True</Private>
- <HintPath>..\packages\Microsoft.AspNet.Mvc.5.2.3\lib\net45\System.Web.Mvc.dll</HintPath>
- </Reference>
- <Reference Include="System.Web.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
- <Private>True</Private>
- <HintPath>..\packages\Microsoft.AspNet.Razor.3.2.3\lib\net45\System.Web.Razor.dll</HintPath>
- </Reference>
- <Reference Include="System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
- <Private>True</Private>
- <HintPath>..\packages\Microsoft.AspNet.WebPages.3.2.3\lib\net45\System.Web.WebPages.dll</HintPath>
- </Reference>
- <Reference Include="System.Web.WebPages.Deployment, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
- <Private>True</Private>
- <HintPath>..\packages\Microsoft.AspNet.WebPages.3.2.3\lib\net45\System.Web.WebPages.Deployment.dll</HintPath>
- </Reference>
- <Reference Include="System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
- <Private>True</Private>
- <HintPath>..\packages\Microsoft.AspNet.WebPages.3.2.3\lib\net45\System.Web.WebPages.Razor.dll</HintPath>
- </Reference>
- <Reference Include="ThriftImpl">
- <HintPath>.\ThriftImpl.dll</HintPath>
- </Reference>
- </ItemGroup>
- <ItemGroup>
- <Compile Include="App_Start\FilterConfig.cs" />
- <Compile Include="App_Start\RouteConfig.cs" />
- <Compile Include="SyncHttpHandler.cs" />
- <Compile Include="AsyncHttpHandler.cs" />
- <Compile Include="Controllers\HomeController.cs" />
- <Compile Include="Global.asax.cs">
- <DependentUpon>Global.asax</DependentUpon>
- </Compile>
- <Compile Include="Properties\AssemblyInfo.cs" />
- <Compile Include="SecondServiceImpl.cs" />
- </ItemGroup>
- <ItemGroup>
- <Content Include="favicon.ico" />
- <Content Include="Global.asax" />
- <Content Include="Web.config" />
- <Content Include="Web.Debug.config">
- <DependentUpon>Web.config</DependentUpon>
- </Content>
- <Content Include="Web.Release.config">
- <DependentUpon>Web.config</DependentUpon>
- </Content>
- <Content Include="Views\Web.config" />
- <Content Include="Views\_ViewStart.cshtml" />
- <Content Include="Views\Shared\_Layout.cshtml" />
- <Content Include="Views\Home\Index.cshtml" />
- </ItemGroup>
- <ItemGroup>
- <Folder Include="App_Data\" />
- </ItemGroup>
- <ItemGroup>
- <Content Include="packages.config">
- <SubType>Designer</SubType>
- </Content>
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\..\src\Thrift.45.csproj">
- <Project>{ebce35da-cf6a-42bc-a357-a9c09b534299}</Project>
- <Name>Thrift.45</Name>
- </ProjectReference>
- </ItemGroup>
- <PropertyGroup>
- <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
- <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
- </PropertyGroup>
- <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
- <Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
- <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
- <Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
- <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
- </Target>
- <ProjectExtensions>
- <VisualStudio>
- <FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">
- <WebProjectProperties>
- <UseIIS>True</UseIIS>
- <AutoAssignPort>True</AutoAssignPort>
- <DevelopmentServerPort>57482</DevelopmentServerPort>
- <DevelopmentServerVPath>/</DevelopmentServerVPath>
- <IISUrl>http://localhost:57482/</IISUrl>
- <NTLMAuthentication>False</NTLMAuthentication>
- <UseCustomServer>False</UseCustomServer>
- <CustomServerUrl>
- </CustomServerUrl>
- <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>
- </WebProjectProperties>
- </FlavorProperties>
- </VisualStudio>
- </ProjectExtensions>
- <PropertyGroup>
- <PreBuildEvent>rmdir /s /q "$(ProjectDir)gen-csharp"
-del /f /q "$(ProjectDir)ThriftImpl.dll"
-SET OUTPUT_DIR=$(ProjectDir)
-SET THRIFT_FILE=$(ProjectDir)\..\..\..\..\test\ThriftTest.thrift
-for %25%25I in ("%25OUTPUT_DIR%25") do set SHORT_DIR=%25%25~fsI
-for %25%25I in ("%25THRIFT_FILE%25") do set THRIFT_SHORT=%25%25~fsI
-"$(ProjectDir)\..\..\..\..\compiler\cpp\Debug\thrift.exe" --gen csharp:async=true -o %25SHORT_DIR%25 %25THRIFT_SHORT%25
-"$(MSBuildToolsPath)\Csc.exe" /t:library /out:"$(ProjectDir)ThriftImpl.dll" /recurse:"$(ProjectDir)gen-csharp"\* /reference:"$(ProjectDir)..\..\src\bin\Debug\Thrift45.dll"</PreBuildEvent>
- </PropertyGroup>
- <!-- 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/lib/csharp/test/ThriftMVCTest/Views/Home/Index.cshtml b/lib/csharp/test/ThriftMVCTest/Views/Home/Index.cshtml
deleted file mode 100644
index f0ca7da20..000000000
--- a/lib/csharp/test/ThriftMVCTest/Views/Home/Index.cshtml
+++ /dev/null
@@ -1,25 +0,0 @@
-@*
- 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.
-*@
-
-@{
- ViewBag.Title = "Home Page";
-}
-
-<p>@Html.ActionLink("Test Thrift Async Service", "TestThriftAsync")</p>
-<p>@Html.ActionLink("Test Thrift Sync Service", "TestThriftSync")</p>
diff --git a/lib/csharp/test/ThriftMVCTest/Views/Shared/_Layout.cshtml b/lib/csharp/test/ThriftMVCTest/Views/Shared/_Layout.cshtml
deleted file mode 100644
index b41c99a10..000000000
--- a/lib/csharp/test/ThriftMVCTest/Views/Shared/_Layout.cshtml
+++ /dev/null
@@ -1,30 +0,0 @@
-@*
- 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.
-*@
-
-<!DOCTYPE html>
-<html>
-<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Thrift ASP.NET Test</title>
-</head>
-<body>
- @RenderBody()
-</body>
-</html>
diff --git a/lib/csharp/test/ThriftMVCTest/Views/Web.config b/lib/csharp/test/ThriftMVCTest/Views/Web.config
deleted file mode 100644
index 3c211387a..000000000
--- a/lib/csharp/test/ThriftMVCTest/Views/Web.config
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0"?>
-<!--
- 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.
--->
-<configuration>
- <configSections>
- <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
- <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
- <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
- </sectionGroup>
- </configSections>
-
- <system.web.webPages.razor>
- <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
- <pages pageBaseType="System.Web.Mvc.WebViewPage">
- <namespaces>
- <add namespace="System.Web.Mvc" />
- <add namespace="System.Web.Mvc.Ajax" />
- <add namespace="System.Web.Mvc.Html" />
- <add namespace="System.Web.Optimization"/>
- <add namespace="System.Web.Routing" />
- <add namespace="ThriftMVCTest" />
- </namespaces>
- </pages>
- </system.web.webPages.razor>
-
- <appSettings>
- <add key="webpages:Enabled" value="false" />
- </appSettings>
-
- <system.webServer>
- <handlers>
- <remove name="BlockViewHandler"/>
- <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
- </handlers>
- </system.webServer>
-
- <system.web>
- <compilation>
- <assemblies>
- <add assembly="System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
- </assemblies>
- </compilation>
- </system.web>
-</configuration>
diff --git a/lib/csharp/test/ThriftMVCTest/Views/_ViewStart.cshtml b/lib/csharp/test/ThriftMVCTest/Views/_ViewStart.cshtml
deleted file mode 100644
index 8cde2eeb9..000000000
--- a/lib/csharp/test/ThriftMVCTest/Views/_ViewStart.cshtml
+++ /dev/null
@@ -1,22 +0,0 @@
-@*
- 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.
-*@
-
-@{
- Layout = "~/Views/Shared/_Layout.cshtml";
-}
diff --git a/lib/csharp/test/ThriftMVCTest/Web.Debug.config b/lib/csharp/test/ThriftMVCTest/Web.Debug.config
deleted file mode 100644
index 45d56d809..000000000
--- a/lib/csharp/test/ThriftMVCTest/Web.Debug.config
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0"?>
-<!--
- 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.
--->
-<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
- <!--
- In the example below, the "SetAttributes" transform will change the value of
- "connectionString" to use "ReleaseSQLServer" only when the "Match" locator
- finds an attribute "name" that has a value of "MyDB".
-
- <connectionStrings>
- <add name="MyDB"
- connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True"
- xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
- </connectionStrings>
- -->
- <system.web>
- <!--
- In the example below, the "Replace" transform will replace the entire
- <customErrors> section of your Web.config file.
- Note that because there is only one customErrors section under the
- <system.web> node, there is no need to use the "xdt:Locator" attribute.
-
- <customErrors defaultRedirect="GenericError.htm"
- mode="RemoteOnly" xdt:Transform="Replace">
- <error statusCode="500" redirect="InternalError.htm"/>
- </customErrors>
- -->
- </system.web>
-</configuration>
diff --git a/lib/csharp/test/ThriftMVCTest/Web.Release.config b/lib/csharp/test/ThriftMVCTest/Web.Release.config
deleted file mode 100644
index 157c340ca..000000000
--- a/lib/csharp/test/ThriftMVCTest/Web.Release.config
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0"?>
-<!--
- 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.
--->
-<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
- <!--
- In the example below, the "SetAttributes" transform will change the value of
- "connectionString" to use "ReleaseSQLServer" only when the "Match" locator
- finds an attribute "name" that has a value of "MyDB".
-
- <connectionStrings>
- <add name="MyDB"
- connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True"
- xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
- </connectionStrings>
- -->
- <system.web>
- <compilation xdt:Transform="RemoveAttributes(debug)" />
- <!--
- In the example below, the "Replace" transform will replace the entire
- <customErrors> section of your Web.config file.
- Note that because there is only one customErrors section under the
- <system.web> node, there is no need to use the "xdt:Locator" attribute.
-
- <customErrors defaultRedirect="GenericError.htm"
- mode="RemoteOnly" xdt:Transform="Replace">
- <error statusCode="500" redirect="InternalError.htm"/>
- </customErrors>
- -->
- </system.web>
-</configuration>
diff --git a/lib/csharp/test/ThriftMVCTest/Web.config b/lib/csharp/test/ThriftMVCTest/Web.config
deleted file mode 100644
index 9c57d117c..000000000
--- a/lib/csharp/test/ThriftMVCTest/Web.config
+++ /dev/null
@@ -1,92 +0,0 @@
-<?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.
--->
-
-<!--
- For more information on how to configure your ASP.NET application, please visit
- http://go.microsoft.com/fwlink/?LinkId=301880
- -->
-<configuration>
- <appSettings>
- <add key="webpages:Version" value="3.0.0.0" />
- <add key="webpages:Enabled" value="false" />
- <add key="ClientValidationEnabled" value="true" />
- <add key="UnobtrusiveJavaScriptEnabled" value="true" />
- <add key="owin:AutomaticAppStartup" value="false" />
- </appSettings>
- <system.web>
- <authentication mode="None" />
- <compilation debug="true" targetFramework="4.5" />
- <httpRuntime targetFramework="4.5" />
- </system.web>
- <system.webServer>
- <modules>
- <remove name="FormsAuthentication" />
- </modules>
- <handlers>
- <add name="AsyncHttpHandler" verb="*" path="Async.thrift" type="ThriftMVCTest.AsyncHttpHandler, ThriftMVCTest" />
- <add name="SyncHttpHandler" verb="*" path="Sync.thrift" type="ThriftMVCTest.SyncHttpHandler, ThriftMVCTest" />
- </handlers>
- </system.webServer>
- <runtime>
- <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
- <dependentAssembly>
- <assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" />
- <bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
- </dependentAssembly>
- <dependentAssembly>
- <assemblyIdentity name="Microsoft.Owin.Security.OAuth" publicKeyToken="31bf3856ad364e35" />
- <bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
- </dependentAssembly>
- <dependentAssembly>
- <assemblyIdentity name="Microsoft.Owin.Security.Cookies" publicKeyToken="31bf3856ad364e35" />
- <bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
- </dependentAssembly>
- <dependentAssembly>
- <assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" />
- <bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
- </dependentAssembly>
- <dependentAssembly>
- <assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" />
- <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
- </dependentAssembly>
- <dependentAssembly>
- <assemblyIdentity name="System.Web.Optimization" publicKeyToken="31bf3856ad364e35" />
- <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="1.1.0.0" />
- </dependentAssembly>
- <dependentAssembly>
- <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
- <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
- </dependentAssembly>
- <dependentAssembly>
- <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
- <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
- </dependentAssembly>
- <dependentAssembly>
- <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
- <bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
- </dependentAssembly>
- <dependentAssembly>
- <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
- <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
- </dependentAssembly>
- </assemblyBinding>
- </runtime>
-</configuration> \ No newline at end of file
diff --git a/lib/csharp/test/ThriftMVCTest/favicon.ico b/lib/csharp/test/ThriftMVCTest/favicon.ico
deleted file mode 100644
index a3a799985..000000000
--- a/lib/csharp/test/ThriftMVCTest/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/lib/csharp/test/ThriftMVCTest/packages.config b/lib/csharp/test/ThriftMVCTest/packages.config
deleted file mode 100644
index 98c8416f5..000000000
--- a/lib/csharp/test/ThriftMVCTest/packages.config
+++ /dev/null
@@ -1,25 +0,0 @@
-<?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.
--->
-<packages>
- <package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net45" />
- <package id="Microsoft.AspNet.Razor" version="3.2.3" targetFramework="net45" />
- <package id="Microsoft.AspNet.WebPages" version="3.2.3" targetFramework="net45" />
- <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net45" />
-</packages> \ No newline at end of file
diff --git a/lib/delphi/Thrift.groupproj b/lib/delphi/Thrift.groupproj
deleted file mode 100644
index f41f293ef..000000000
--- a/lib/delphi/Thrift.groupproj
+++ /dev/null
@@ -1,120 +0,0 @@
- <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup>
- <ProjectGuid>{86AE16E4-18D4-4C07-B06C-491E22A26C74}</ProjectGuid>
- </PropertyGroup>
- <ItemGroup>
- <Projects Include="test\client.dproj">
- <Dependencies/>
- </Projects>
- <Projects Include="test\server.dproj">
- <Dependencies/>
- </Projects>
- <Projects Include="test\multiplexed\Multiplex.Test.Client.dproj">
- <Dependencies/>
- </Projects>
- <Projects Include="test\multiplexed\Multiplex.Test.Server.dproj">
- <Dependencies/>
- </Projects>
- <Projects Include="test\serializer\TestSerializer.dproj">
- <Dependencies/>
- </Projects>
- <Projects Include="test\skip\skiptest_version2.dproj">
- <Dependencies/>
- </Projects>
- <Projects Include="test\skip\skiptest_version1.dproj">
- <Dependencies/>
- </Projects>
- <Projects Include="test\typeregistry\TestTypeRegistry.dproj">
- <Dependencies/>
- </Projects>
- </ItemGroup>
- <ProjectExtensions>
- <Borland.Personality>Default.Personality.12</Borland.Personality>
- <Borland.ProjectType/>
- <BorlandProject>
- <Default.Personality/>
- </BorlandProject>
- </ProjectExtensions>
- <Target Name="client">
- <MSBuild Projects="test\client.dproj"/>
- </Target>
- <Target Name="client:Clean">
- <MSBuild Projects="test\client.dproj" Targets="Clean"/>
- </Target>
- <Target Name="client:Make">
- <MSBuild Projects="test\client.dproj" Targets="Make"/>
- </Target>
- <Target Name="server">
- <MSBuild Projects="test\server.dproj"/>
- </Target>
- <Target Name="server:Clean">
- <MSBuild Projects="test\server.dproj" Targets="Clean"/>
- </Target>
- <Target Name="server:Make">
- <MSBuild Projects="test\server.dproj" Targets="Make"/>
- </Target>
- <Target Name="Multiplex_Test_Client">
- <MSBuild Projects="test\multiplexed\Multiplex.Test.Client.dproj"/>
- </Target>
- <Target Name="Multiplex_Test_Client:Clean">
- <MSBuild Projects="test\multiplexed\Multiplex.Test.Client.dproj" Targets="Clean"/>
- </Target>
- <Target Name="Multiplex_Test_Client:Make">
- <MSBuild Projects="test\multiplexed\Multiplex.Test.Client.dproj" Targets="Make"/>
- </Target>
- <Target Name="Multiplex_Test_Server">
- <MSBuild Projects="test\multiplexed\Multiplex.Test.Server.dproj"/>
- </Target>
- <Target Name="Multiplex_Test_Server:Clean">
- <MSBuild Projects="test\multiplexed\Multiplex.Test.Server.dproj" Targets="Clean"/>
- </Target>
- <Target Name="Multiplex_Test_Server:Make">
- <MSBuild Projects="test\multiplexed\Multiplex.Test.Server.dproj" Targets="Make"/>
- </Target>
- <Target Name="TestSerializer">
- <MSBuild Projects="test\serializer\TestSerializer.dproj"/>
- </Target>
- <Target Name="TestSerializer:Clean">
- <MSBuild Projects="test\serializer\TestSerializer.dproj" Targets="Clean"/>
- </Target>
- <Target Name="TestSerializer:Make">
- <MSBuild Projects="test\serializer\TestSerializer.dproj" Targets="Make"/>
- </Target>
- <Target Name="skiptest_version2">
- <MSBuild Projects="test\skip\skiptest_version2.dproj"/>
- </Target>
- <Target Name="skiptest_version2:Clean">
- <MSBuild Projects="test\skip\skiptest_version2.dproj" Targets="Clean"/>
- </Target>
- <Target Name="skiptest_version2:Make">
- <MSBuild Projects="test\skip\skiptest_version2.dproj" Targets="Make"/>
- </Target>
- <Target Name="skiptest_version1">
- <MSBuild Projects="test\skip\skiptest_version1.dproj"/>
- </Target>
- <Target Name="skiptest_version1:Clean">
- <MSBuild Projects="test\skip\skiptest_version1.dproj" Targets="Clean"/>
- </Target>
- <Target Name="skiptest_version1:Make">
- <MSBuild Projects="test\skip\skiptest_version1.dproj" Targets="Make"/>
- </Target>
- <Target Name="TestTypeRegistry">
- <MSBuild Projects="test\typeregistry\TestTypeRegistry.dproj"/>
- </Target>
- <Target Name="TestTypeRegistry:Clean">
- <MSBuild Projects="test\typeregistry\TestTypeRegistry.dproj" Targets="Clean"/>
- </Target>
- <Target Name="TestTypeRegistry:Make">
- <MSBuild Projects="test\typeregistry\TestTypeRegistry.dproj" Targets="Make"/>
- </Target>
- <Target Name="Build">
- <CallTarget Targets="client;server;Multiplex_Test_Client;Multiplex_Test_Server;TestSerializer;skiptest_version2;skiptest_version1;TestTypeRegistry"/>
- </Target>
- <Target Name="Clean">
- <CallTarget Targets="client:Clean;server:Clean;Multiplex_Test_Client:Clean;Multiplex_Test_Server:Clean;TestSerializer:Clean;skiptest_version2:Clean;skiptest_version1:Clean;TestTypeRegistry:Clean"/>
- </Target>
- <Target Name="Make">
- <CallTarget Targets="client:Make;server:Make;Multiplex_Test_Client:Make;Multiplex_Test_Server:Make;TestSerializer:Make;skiptest_version2:Make;skiptest_version1:Make;TestTypeRegistry:Make"/>
- </Target>
- <Import Condition="Exists('$(BDS)\Bin\CodeGear.Group.Targets')" Project="$(BDS)\Bin\CodeGear.Group.Targets"/>
- </Project>
diff --git a/lib/delphi/Thrift.groupproj.local b/lib/delphi/Thrift.groupproj.local
deleted file mode 100644
index 9e6e18dab..000000000
--- a/lib/delphi/Thrift.groupproj.local
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<BorlandProject>
- <Transactions>
- <Transaction>1899.12.30 00:00:00.000.873,E:\D\TPCPP\Thrift\wc-XE-all\wc-JensG-haxe\lib\delphi\Thrift.groupproj=C:\Users\Jens\Documents\RAD Studio\Projekte\ProjectGroup1.groupproj</Transaction>
- </Transactions>
- <Default.Personality>
- <Projects ActiveProject="E:\D\TPCPP\Thrift\wc-XE-all\wc-JensG-haxe\lib\delphi\test\client.dproj"/>
- </Default.Personality>
-</BorlandProject>
diff --git a/lib/delphi/test/Performance/Referenz.txt b/lib/delphi/test/Performance/Referenz.txt
deleted file mode 100644
index 53cb154f6..000000000
--- a/lib/delphi/test/Performance/Referenz.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-Delphi TestClient 0.14.0
-Setting up for ProtocolPeformanceTest ...
-RunTest(binary): write = 2650 msec
-RunTest(binary): read = 3135 msec
-RunTest(compact): write = 2807 msec
-RunTest(compact): read = 3053 msec
-RunTest(JSON): write = 13251 msec
-RunTest(JSON): read = 18759 msec
-RunTest(binary + buffered): write = 2635 msec
-RunTest(binary + buffered): read = 3109 msec
-RunTest(compact + buffered): write = 2788 msec
-RunTest(compact + buffered): read = 3069 msec
-RunTest(JSON + buffered): write = 13604 msec
-RunTest(JSON + buffered): read = 21537 msec
-RunTest(binary + framed): write = 3019 msec
-RunTest(binary + framed): read = 3573 msec
-RunTest(compact + framed): write = 3201 msec
-RunTest(compact + framed): read = 3504 msec
-RunTest(JSON + framed): write = 15093 msec
-RunTest(JSON + framed): read = 21548 msec
-Hit ENTER ... \ No newline at end of file
diff --git a/lib/netstd/Benchmarks/Thrift.Benchmarks/Thrift.Benchmarks.csproj b/lib/netstd/Benchmarks/Thrift.Benchmarks/Thrift.Benchmarks.csproj
index 740d223c8..35138d863 100644
--- a/lib/netstd/Benchmarks/Thrift.Benchmarks/Thrift.Benchmarks.csproj
+++ b/lib/netstd/Benchmarks/Thrift.Benchmarks/Thrift.Benchmarks.csproj
@@ -25,7 +25,7 @@
</PropertyGroup>
<ItemGroup>
- <PackageReference Include="BenchmarkDotNet" Version="0.12.1" />
+ <PackageReference Include="BenchmarkDotNet" Version="0.12.0" />
</ItemGroup>
<ItemGroup>
diff --git a/lib/netstd/Tests/Thrift.IntegrationTests/Thrift.IntegrationTests.csproj b/lib/netstd/Tests/Thrift.IntegrationTests/Thrift.IntegrationTests.csproj
index 318757ab4..7c5639bc7 100644
--- a/lib/netstd/Tests/Thrift.IntegrationTests/Thrift.IntegrationTests.csproj
+++ b/lib/netstd/Tests/Thrift.IntegrationTests/Thrift.IntegrationTests.csproj
@@ -32,10 +32,10 @@
</PropertyGroup>
<ItemGroup>
- <PackageReference Include="CompareNETObjects" Version="4.66.0" />
- <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.6.1" />
- <PackageReference Include="MSTest.TestAdapter" Version="2.1.2" />
- <PackageReference Include="MSTest.TestFramework" Version="2.1.2" />
+ <PackageReference Include="CompareNETObjects" Version="4.64.0" />
+ <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.4.0" />
+ <PackageReference Include="MSTest.TestAdapter" Version="2.0.0" />
+ <PackageReference Include="MSTest.TestFramework" Version="2.0.0" />
<PackageReference Include="System.ServiceModel.Primitives" Version="4.7.0" />
</ItemGroup>
<ItemGroup>
diff --git a/lib/netstd/Tests/Thrift.Tests/Thrift.Tests.csproj b/lib/netstd/Tests/Thrift.Tests/Thrift.Tests.csproj
index 9b54a57af..4b39e7d4b 100644
--- a/lib/netstd/Tests/Thrift.Tests/Thrift.Tests.csproj
+++ b/lib/netstd/Tests/Thrift.Tests/Thrift.Tests.csproj
@@ -21,11 +21,11 @@
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
- <PackageReference Include="CompareNETObjects" Version="4.66.0" />
- <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.6.1" />
- <PackageReference Include="MSTest.TestAdapter" Version="2.1.2" />
- <PackageReference Include="MSTest.TestFramework" Version="2.1.2" />
- <PackageReference Include="NSubstitute" Version="4.2.2" />
+ <PackageReference Include="CompareNETObjects" Version="4.64.0" />
+ <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.4.0" />
+ <PackageReference Include="MSTest.TestAdapter" Version="2.0.0" />
+ <PackageReference Include="MSTest.TestFramework" Version="2.0.0" />
+ <PackageReference Include="NSubstitute" Version="4.2.1" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\Thrift\Thrift.csproj" />
diff --git a/lib/netstd/Thrift/Thrift.csproj b/lib/netstd/Thrift/Thrift.csproj
index 991e64e6d..3278d98f2 100644
--- a/lib/netstd/Thrift/Thrift.csproj
+++ b/lib/netstd/Thrift/Thrift.csproj
@@ -44,16 +44,16 @@
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.2.0" />
- <PackageReference Include="Microsoft.Extensions.Logging" Version="3.1.5" />
- <PackageReference Include="Microsoft.Extensions.Logging.Console" Version="3.1.5" />
- <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="3.1.5" />
- <PackageReference Include="System.IO.Pipes" Version="4.3.0" />
+ <PackageReference Include="Microsoft.Extensions.Logging" Version="3.1.0" />
+ <PackageReference Include="Microsoft.Extensions.Logging.Console" Version="3.1.0" />
+ <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="3.1.0" />
+ <PackageReference Include="System.IO.Pipes" Version="[4.3,)" />
<PackageReference Include="System.IO.Pipes.AccessControl" Version="4.5.1" />
- <PackageReference Include="System.Net.Http.WinHttpHandler" Version="4.7.2" />
- <PackageReference Include="System.Net.NameResolution" Version="4.3.0" />
- <PackageReference Include="System.Net.Requests" Version="4.3.0" />
+ <PackageReference Include="System.Net.Http.WinHttpHandler" Version="4.7.0" />
+ <PackageReference Include="System.Net.NameResolution" Version="[4.3,)" />
+ <PackageReference Include="System.Net.Requests" Version="[4.3,)" />
<PackageReference Include="System.Net.Security" Version="4.3.2" />
- <PackageReference Include="System.Threading.Tasks.Extensions" Version="4.5.4" />
+ <PackageReference Include="System.Threading.Tasks.Extensions" Version="4.5.3" />
</ItemGroup>
<Target Name="SetTFMAssemblyAttributesPath" BeforeTargets="GenerateTargetFrameworkMonikerAttribute">
diff --git a/test/ThriftTest.thrift b/test/ThriftTest.thrift
index bdc6d879d..ac49aee01 100644
--- a/test/ThriftTest.thrift
+++ b/test/ThriftTest.thrift
@@ -23,7 +23,6 @@
namespace c_glib TTest
namespace cpp thrift.test
-namespace csharp Thrift.Test
namespace delphi Thrift.Test
namespace go thrifttest
namespace java thrift.test
diff --git a/test/csharp/Makefile.am b/test/csharp/Makefile.am
deleted file mode 100644
index ad166e384..000000000
--- a/test/csharp/Makefile.am
+++ /dev/null
@@ -1,95 +0,0 @@
-#
-# 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.
-#
-
-GENERATED = \
- gen-csharp/Thrift/Test/Bonk.cs \
- gen-csharp/Thrift/Test/Bools.cs \
- gen-csharp/Thrift/Test/BoolTest.cs \
- gen-csharp/Thrift/Test/CrazyNesting.cs \
- gen-csharp/Thrift/Test/EmptyStruct.cs \
- gen-csharp/Thrift/Test/GuessProtocolStruct.cs \
- gen-csharp/Thrift/Test/Insanity.cs \
- gen-csharp/Thrift/Test/LargeDeltas.cs \
- gen-csharp/Thrift/Test/ListBonks.cs \
- gen-csharp/Thrift/Test/ListTypeVersioningV1.cs \
- gen-csharp/Thrift/Test/ListTypeVersioningV2.cs \
- gen-csharp/Thrift/Test/NestedListsBonk.cs \
- gen-csharp/Thrift/Test/NestedListsI32x2.cs \
- gen-csharp/Thrift/Test/NestedListsI32x3.cs \
- gen-csharp/Thrift/Test/NestedMixedx2.cs \
- gen-csharp/Thrift/Test/Numberz.cs \
- gen-csharp/Thrift/Test/OneField.cs \
- gen-csharp/Thrift/Test/SecondService.cs \
- gen-csharp/Thrift/Test/StructA.cs \
- gen-csharp/Thrift/Test/StructB.cs \
- gen-csharp/Thrift/Test/ThriftTest.Constants.cs \
- gen-csharp/Thrift/Test/ThriftTest.cs \
- gen-csharp/Thrift/Test/VersioningTestV1.cs \
- gen-csharp/Thrift/Test/VersioningTestV2.cs \
- gen-csharp/Thrift/Test/Xception.cs \
- gen-csharp/Thrift/Test/Xception2.cs \
- gen-csharp/Thrift/Test/Xtruct.cs \
- gen-csharp/Thrift/Test/Xtruct2.cs \
- gen-csharp/Thrift/Test/Xtruct3.cs
-
-BUILT_SOURCES = $(GENERATED)
-
-if MONO_MCS
-CSC = mcs
-else
-CSC = gmcs
-endif
-
-if NET_2_0
-CSC_DEFINES = -d:NET_2_0
-endif
-
-LIBDIR = $(top_builddir)/lib/csharp
-
-THRIFT = $(top_builddir)/compiler/cpp/thrift
-
-$(GENERATED): $(top_srcdir)/test/ThriftTest.thrift $(THRIFT)
- $(THRIFT) --gen csharp -o . $<
-
-precross: TestClientServer.exe
-
-ThriftImpl.dll: $(GENERATED) $(LIBDIR)/Thrift.dll
- $(CSC) $(CSC_DEFINES) -t:library -out:$@ -reference:$(LIBDIR)/Thrift.dll $(GENERATED)
-
-SRCS = TestClient.cs TestServer.cs Program.cs
-
-TestClientServer.exe: $(SRCS) ThriftImpl.dll
- $(CSC) $(CSC_DEFINES) -out:$@ -reference:$(LIBDIR)/Thrift.dll -reference:ThriftImpl.dll $(SRCS)
-
-clean-local:
- $(RM) -rf gen-csharp *.exe *.dll
-
-TESTPORT = 9500
-check-local: TestClientServer.exe
- MONO_PATH=$(LIBDIR) timeout 10 mono TestClientServer.exe server --port=$(TESTPORT) &
- sleep 1
- MONO_PATH=$(LIBDIR) mono TestClientServer.exe client --port=$(TESTPORT)
-
-EXTRA_DIST = \
- Properties/AssemblyInfo.cs \
- ThriftTest.csproj \
- ThriftTest.sln \
- Program.cs \
- TestServer.cs \
- TestClient.cs
diff --git a/test/csharp/Program.cs b/test/csharp/Program.cs
deleted file mode 100644
index 8ec00e300..000000000
--- a/test/csharp/Program.cs
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * 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.
- */
-
-// Distributed under the Thrift Software License
-//
-// See accompanying file LICENSE or visit the Thrift site at:
-// http://developers.facebook.com/thrift/
-
-using System;
-using Thrift.Transport;
-using Thrift.Protocol;
-using Thrift.Test; //generated code
-
-namespace Test
-{
- class Program
- {
- static int Main(string[] args)
- {
- if (args.Length == 0)
- {
- Console.WriteLine("must provide 'server' or 'client' arg");
- return -1;
- }
-
- try
- {
- Console.SetBufferSize(Console.BufferWidth, 4096);
- }
- catch (Exception)
- {
- Console.WriteLine("Failed to grow scroll-back buffer");
- }
-
- string[] subArgs = new string[args.Length - 1];
- for(int i = 1; i < args.Length; i++)
- {
- subArgs[i-1] = args[i];
- }
- if (args[0] == "client")
- {
- return TestClient.Execute(subArgs);
- }
- else if (args[0] == "server")
- {
- return TestServer.Execute(subArgs) ? 0 : 1;
- }
- else
- {
- Console.WriteLine("first argument must be 'server' or 'client'");
- }
- return 0;
- }
- }
-}
diff --git a/test/csharp/Properties/AssemblyInfo.cs b/test/csharp/Properties/AssemblyInfo.cs
deleted file mode 100644
index 376ff253f..000000000
--- a/test/csharp/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * 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("ThriftTest")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("The Apache Software Foundation")]
-[assembly: AssemblyProduct("Thrift")]
-[assembly: AssemblyCopyright("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("f41b193b-f1ab-48ee-8843-f88e43084e26")]
-
-// 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("0.14.0.0")]
-[assembly: AssemblyFileVersion("0.14.0.0")]
diff --git a/test/csharp/TestClient.cs b/test/csharp/TestClient.cs
deleted file mode 100644
index 949c06e9f..000000000
--- a/test/csharp/TestClient.cs
+++ /dev/null
@@ -1,870 +0,0 @@
-/*
- * 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.Linq;
-using System.Diagnostics;
-using System.Collections.Generic;
-using System.Threading;
-using System.Security.Cryptography.X509Certificates;
-using Thrift.Collections;
-using Thrift.Protocol;
-using Thrift.Transport;
-using Thrift.Test;
-using System.Security.Authentication;
-
-namespace Test
-{
- public class TestClient
- {
- public class TestParams
- {
- public int numIterations = 1;
- public string host = "localhost";
- public int port = 9090;
- public string url;
- public string pipe;
- public bool buffered;
- public bool framed;
- public string protocol;
- public bool encrypted = false;
- public bool multiplexed = false;
- protected bool _isFirstTransport = true;
-
-
- public TTransport CreateTransport()
- {
- if (url == null)
- {
- // endpoint transport
- TTransport trans = null;
- if (pipe != null)
- trans = new TNamedPipeClientTransport(pipe);
- else
- {
- if (encrypted)
- {
- string certPath = "../keys/client.p12";
- X509Certificate cert = new X509Certificate2(certPath, "thrift");
- trans = new TTLSSocket(host, port, 0, cert,
- (o, c, chain, errors) => true,
- null, SslProtocols.Tls);
- }
- else
- {
- trans = new TSocket(host, port);
- }
- }
-
- // layered transport
- if (buffered)
- trans = new TBufferedTransport(trans);
- if (framed)
- trans = new TFramedTransport(trans);
-
- if (_isFirstTransport)
- {
- //ensure proper open/close of transport
- trans.Open();
- trans.Close();
- _isFirstTransport = false;
- }
- return trans;
- }
- else
- {
- return new THttpClient(new Uri(url));
- }
- }
-
- public TProtocol CreateProtocol(TTransport transport)
- {
- if (protocol == "compact")
- return new TCompactProtocol(transport);
- else if (protocol == "json")
- return new TJSONProtocol(transport);
- else
- return new TBinaryProtocol(transport);
- }
- };
-
- private const int ErrorBaseTypes = 1;
- private const int ErrorStructs = 2;
- private const int ErrorContainers = 4;
- private const int ErrorExceptions = 8;
- private const int ErrorProtocol = 16;
- private const int ErrorUnknown = 64;
-
- private class ClientTest
- {
- private readonly TestParams param;
- private readonly TTransport transport;
- private readonly SecondService.Client second;
- private readonly ThriftTest.Client client;
- private readonly int numIterations;
- private bool done;
-
- public int ReturnCode { get; set; }
-
- public ClientTest(TestParams paramin)
- {
- param = paramin;
- transport = param.CreateTransport();
- TProtocol protocol = param.CreateProtocol(transport);
- if (param.multiplexed)
- {
- second = new SecondService.Client(new TMultiplexedProtocol(protocol, "SecondService"));
- }
- client = new ThriftTest.Client(protocol);
- numIterations = param.numIterations;
- }
- public void Execute()
- {
- if (done)
- {
- Console.WriteLine("Execute called more than once");
- throw new InvalidOperationException();
- }
-
- for (int i = 0; i < numIterations; i++)
- {
- try
- {
- if (!transport.IsOpen)
- transport.Open();
- }
- catch (TTransportException ex)
- {
- Console.WriteLine("*** FAILED ***");
- Console.WriteLine("Connect failed: " + ex.Message);
- ReturnCode |= ErrorUnknown;
- Console.WriteLine(ex.Message + " ST: " + ex.StackTrace);
- continue;
- }
-
- try
- {
- ReturnCode |= ExecuteClientTest(client, second, param);
- }
- catch (Exception ex)
- {
- Console.WriteLine("*** FAILED ***");
- Console.WriteLine(ex.Message + " ST: " + ex.StackTrace);
- ReturnCode |= ErrorUnknown;
- }
- }
- try
- {
- transport.Close();
- }
- catch(Exception ex)
- {
- Console.WriteLine("Error while closing transport");
- Console.WriteLine(ex.Message + " ST: " + ex.StackTrace);
- }
- done = true;
- }
- }
-
- public static int Execute(string[] args)
- {
- try
- {
- TestParams param = new TestParams();
- int numThreads = 1;
- try
- {
- for (int i = 0; i < args.Length; i++)
- {
- if (args[i] == "-u")
- {
- param.url = args[++i];
- }
- else if (args[i] == "-n")
- {
- param.numIterations = Convert.ToInt32(args[++i]);
- }
- else if (args[i] == "-pipe") // -pipe <name>
- {
- param.pipe = args[++i];
- Console.WriteLine("Using named pipes transport");
- }
- else if (args[i].Contains("--host="))
- {
- param.host = args[i].Substring(args[i].IndexOf("=") + 1);
- }
- else if (args[i].Contains("--port="))
- {
- param.port = int.Parse(args[i].Substring(args[i].IndexOf("=")+1));
- }
- else if (args[i] == "-b" || args[i] == "--buffered" || args[i] == "--transport=buffered")
- {
- param.buffered = true;
- Console.WriteLine("Using buffered sockets");
- }
- else if (args[i] == "-f" || args[i] == "--framed" || args[i] == "--transport=framed")
- {
- param.framed = true;
- Console.WriteLine("Using framed transport");
- }
- else if (args[i] == "-t")
- {
- numThreads = Convert.ToInt32(args[++i]);
- }
- else if (args[i] == "--compact" || args[i] == "--protocol=compact" || args[i] == "--protocol=multic")
- {
- param.protocol = "compact";
- Console.WriteLine("Using compact protocol");
- }
- else if (args[i] == "--json" || args[i] == "--protocol=json" || args[i] == "--protocol=multij")
- {
- param.protocol = "json";
- Console.WriteLine("Using JSON protocol");
- }
- else if (args[i] == "--ssl")
- {
- param.encrypted = true;
- Console.WriteLine("Using encrypted transport");
- }
-
- if (args[i].StartsWith("--protocol=multi"))
- {
- param.multiplexed = true;
- }
- }
- }
- catch (Exception ex)
- {
- Console.WriteLine("*** FAILED ***");
- Console.WriteLine("Error while parsing arguments");
- Console.WriteLine(ex.Message + " ST: " + ex.StackTrace);
- return ErrorUnknown;
- }
-
- var tests = Enumerable.Range(0, numThreads).Select(_ => new ClientTest(param)).ToArray();
- //issue tests on separate threads simultaneously
- var threads = tests.Select(test => new Thread(test.Execute)).ToArray();
- DateTime start = DateTime.Now;
- foreach (var t in threads)
- t.Start();
- foreach (var t in threads)
- t.Join();
- Console.WriteLine("Total time: " + (DateTime.Now - start));
- Console.WriteLine();
- return tests.Select(t => t.ReturnCode).Aggregate((r1, r2) => r1 | r2);
- }
- catch (Exception outerEx)
- {
- Console.WriteLine("*** FAILED ***");
- Console.WriteLine("Unexpected error");
- Console.WriteLine(outerEx.Message + " ST: " + outerEx.StackTrace);
- return ErrorUnknown;
- }
- }
-
- public static string BytesToHex(byte[] data) {
- return BitConverter.ToString(data).Replace("-", string.Empty);
- }
-
- public static byte[] PrepareTestData(bool randomDist, bool huge)
- {
- // huge = true tests for THRIFT-4372
- byte[] retval = new byte[huge ? 0x12345 : 0x100];
- int initLen = retval.Length;
-
- // linear distribution, unless random is requested
- if (!randomDist) {
- for (var i = 0; i < initLen; ++i) {
- retval[i] = (byte)i;
- }
- return retval;
- }
-
- // random distribution
- for (var i = 0; i < initLen; ++i) {
- retval[i] = (byte)0;
- }
- var rnd = new Random();
- for (var i = 1; i < initLen; ++i) {
- while( true) {
- int nextPos = rnd.Next() % initLen;
- if (retval[nextPos] == 0) {
- retval[nextPos] = (byte)i;
- break;
- }
- }
- }
- return retval;
- }
-
- public static int ExecuteClientTest(ThriftTest.Client client, SecondService.Client second, TestParams param)
- {
- int returnCode = 0;
-
- Console.Write("testVoid()");
- client.testVoid();
- Console.WriteLine(" = void");
-
- Console.Write("testString(\"Test\")");
- string s = client.testString("Test");
- Console.WriteLine(" = \"" + s + "\"");
- if ("Test" != s)
- {
- Console.WriteLine("*** FAILED ***");
- returnCode |= ErrorBaseTypes;
- }
-
- if (param.multiplexed)
- {
- Console.WriteLine("secondTestString(\"Test2\")");
- s = second.secondtestString("Test2");
- Console.WriteLine(" = \"" + s + "\"");
- if ("testString(\"Test2\")" != s)
- {
- Console.WriteLine("*** FAILED ***");
- returnCode |= ErrorProtocol;
- }
- }
-
- Console.Write("testBool(true)");
- bool t = client.testBool((bool)true);
- Console.WriteLine(" = " + t);
- if (!t)
- {
- Console.WriteLine("*** FAILED ***");
- returnCode |= ErrorBaseTypes;
- }
- Console.Write("testBool(false)");
- bool f = client.testBool((bool)false);
- Console.WriteLine(" = " + f);
- if (f)
- {
- Console.WriteLine("*** FAILED ***");
- returnCode |= ErrorBaseTypes;
- }
-
- Console.Write("testByte(1)");
- sbyte i8 = client.testByte((sbyte)1);
- Console.WriteLine(" = " + i8);
- if (1 != i8)
- {
- Console.WriteLine("*** FAILED ***");
- returnCode |= ErrorBaseTypes;
- }
-
- Console.Write("testI32(-1)");
- int i32 = client.testI32(-1);
- Console.WriteLine(" = " + i32);
- if (-1 != i32)
- {
- Console.WriteLine("*** FAILED ***");
- returnCode |= ErrorBaseTypes;
- }
-
- Console.Write("testI64(-34359738368)");
- long i64 = client.testI64(-34359738368);
- Console.WriteLine(" = " + i64);
- if (-34359738368 != i64)
- {
- Console.WriteLine("*** FAILED ***");
- returnCode |= ErrorBaseTypes;
- }
-
- // TODO: Validate received message
- Console.Write("testDouble(5.325098235)");
- double dub = client.testDouble(5.325098235);
- Console.WriteLine(" = " + dub);
- if (5.325098235 != dub)
- {
- Console.WriteLine("*** FAILED ***");
- returnCode |= ErrorBaseTypes;
- }
- Console.Write("testDouble(-0.000341012439638598279)");
- dub = client.testDouble(-0.000341012439638598279);
- Console.WriteLine(" = " + dub);
- if (-0.000341012439638598279 != dub)
- {
- Console.WriteLine("*** FAILED ***");
- returnCode |= ErrorBaseTypes;
- }
-
- for (i32 = 0; i32 < 2; ++i32)
- {
- var huge = (i32 > 0);
- byte[] binOut = PrepareTestData(false,huge);
- Console.Write("testBinary(" + BytesToHex(binOut) + ")");
- try
- {
- byte[] binIn = client.testBinary(binOut);
- Console.WriteLine(" = " + BytesToHex(binIn));
- if (binIn.Length != binOut.Length)
- {
- Console.WriteLine("*** FAILED ***");
- returnCode |= ErrorBaseTypes;
- }
- for (int ofs = 0; ofs < Math.Min(binIn.Length, binOut.Length); ++ofs)
- if (binIn[ofs] != binOut[ofs])
- {
- Console.WriteLine("*** FAILED ***");
- returnCode |= ErrorBaseTypes;
- }
- }
- catch (Thrift.TApplicationException ex)
- {
- Console.WriteLine("*** FAILED ***");
- returnCode |= ErrorBaseTypes;
- Console.WriteLine(ex.Message + " ST: " + ex.StackTrace);
- }
- }
-
- // binary equals? only with hashcode option enabled ...
- Console.WriteLine("Test CrazyNesting");
- if( typeof(CrazyNesting).GetMethod("Equals").DeclaringType == typeof(CrazyNesting))
- {
- CrazyNesting one = new CrazyNesting();
- CrazyNesting two = new CrazyNesting();
- one.String_field = "crazy";
- two.String_field = "crazy";
- one.Binary_field = new byte[10] { 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0xFF };
- two.Binary_field = new byte[10] { 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0xFF };
- if (!one.Equals(two))
- {
- Console.WriteLine("*** FAILED ***");
- returnCode |= ErrorContainers;
- throw new Exception("CrazyNesting.Equals failed");
- }
- }
-
- // TODO: Validate received message
- Console.Write("testStruct({\"Zero\", 1, -3, -5})");
- Xtruct o = new Xtruct();
- o.String_thing = "Zero";
- o.Byte_thing = (sbyte)1;
- o.I32_thing = -3;
- o.I64_thing = -5;
- Xtruct i = client.testStruct(o);
- Console.WriteLine(" = {\"" + i.String_thing + "\", " + i.Byte_thing + ", " + i.I32_thing + ", " + i.I64_thing + "}");
-
- // TODO: Validate received message
- Console.Write("testNest({1, {\"Zero\", 1, -3, -5}, 5})");
- Xtruct2 o2 = new Xtruct2();
- o2.Byte_thing = (sbyte)1;
- o2.Struct_thing = o;
- o2.I32_thing = 5;
- Xtruct2 i2 = client.testNest(o2);
- i = i2.Struct_thing;
- Console.WriteLine(" = {" + i2.Byte_thing + ", {\"" + i.String_thing + "\", " + i.Byte_thing + ", " + i.I32_thing + ", " + i.I64_thing + "}, " + i2.I32_thing + "}");
-
- Dictionary<int, int> mapout = new Dictionary<int, int>();
- for (int j = 0; j < 5; j++)
- {
- mapout[j] = j - 10;
- }
- Console.Write("testMap({");
- bool first = true;
- foreach (int key in mapout.Keys)
- {
- if (first)
- {
- first = false;
- }
- else
- {
- Console.Write(", ");
- }
- Console.Write(key + " => " + mapout[key]);
- }
- Console.Write("})");
-
- Dictionary<int, int> mapin = client.testMap(mapout);
-
- Console.Write(" = {");
- first = true;
- foreach (int key in mapin.Keys)
- {
- if (first)
- {
- first = false;
- }
- else
- {
- Console.Write(", ");
- }
- Console.Write(key + " => " + mapin[key]);
- }
- Console.WriteLine("}");
-
- // TODO: Validate received message
- List<int> listout = new List<int>();
- for (int j = -2; j < 3; j++)
- {
- listout.Add(j);
- }
- Console.Write("testList({");
- first = true;
- foreach (int j in listout)
- {
- if (first)
- {
- first = false;
- }
- else
- {
- Console.Write(", ");
- }
- Console.Write(j);
- }
- Console.Write("})");
-
- List<int> listin = client.testList(listout);
-
- Console.Write(" = {");
- first = true;
- foreach (int j in listin)
- {
- if (first)
- {
- first = false;
- }
- else
- {
- Console.Write(", ");
- }
- Console.Write(j);
- }
- Console.WriteLine("}");
-
- //set
- // TODO: Validate received message
- THashSet<int> setout = new THashSet<int>();
- for (int j = -2; j < 3; j++)
- {
- setout.Add(j);
- }
- Console.Write("testSet({");
- first = true;
- foreach (int j in setout)
- {
- if (first)
- {
- first = false;
- }
- else
- {
- Console.Write(", ");
- }
- Console.Write(j);
- }
- Console.Write("})");
-
- THashSet<int> setin = client.testSet(setout);
-
- Console.Write(" = {");
- first = true;
- foreach (int j in setin)
- {
- if (first)
- {
- first = false;
- }
- else
- {
- Console.Write(", ");
- }
- Console.Write(j);
- }
- Console.WriteLine("}");
-
-
- Console.Write("testEnum(ONE)");
- Numberz ret = client.testEnum(Numberz.ONE);
- Console.WriteLine(" = " + ret);
- if (Numberz.ONE != ret)
- {
- Console.WriteLine("*** FAILED ***");
- returnCode |= ErrorStructs;
- }
-
- Console.Write("testEnum(TWO)");
- ret = client.testEnum(Numberz.TWO);
- Console.WriteLine(" = " + ret);
- if (Numberz.TWO != ret)
- {
- Console.WriteLine("*** FAILED ***");
- returnCode |= ErrorStructs;
- }
-
- Console.Write("testEnum(THREE)");
- ret = client.testEnum(Numberz.THREE);
- Console.WriteLine(" = " + ret);
- if (Numberz.THREE != ret)
- {
- Console.WriteLine("*** FAILED ***");
- returnCode |= ErrorStructs;
- }
-
- Console.Write("testEnum(FIVE)");
- ret = client.testEnum(Numberz.FIVE);
- Console.WriteLine(" = " + ret);
- if (Numberz.FIVE != ret)
- {
- Console.WriteLine("*** FAILED ***");
- returnCode |= ErrorStructs;
- }
-
- Console.Write("testEnum(EIGHT)");
- ret = client.testEnum(Numberz.EIGHT);
- Console.WriteLine(" = " + ret);
- if (Numberz.EIGHT != ret)
- {
- Console.WriteLine("*** FAILED ***");
- returnCode |= ErrorStructs;
- }
-
- Console.Write("testTypedef(309858235082523)");
- long uid = client.testTypedef(309858235082523L);
- Console.WriteLine(" = " + uid);
- if (309858235082523L != uid)
- {
- Console.WriteLine("*** FAILED ***");
- returnCode |= ErrorStructs;
- }
-
- // TODO: Validate received message
- Console.Write("testMapMap(1)");
- Dictionary<int, Dictionary<int, int>> mm = client.testMapMap(1);
- Console.Write(" = {");
- foreach (int key in mm.Keys)
- {
- Console.Write(key + " => {");
- Dictionary<int, int> m2 = mm[key];
- foreach (int k2 in m2.Keys)
- {
- Console.Write(k2 + " => " + m2[k2] + ", ");
- }
- Console.Write("}, ");
- }
- Console.WriteLine("}");
-
- // TODO: Validate received message
- Insanity insane = new Insanity();
- insane.UserMap = new Dictionary<Numberz, long>();
- insane.UserMap[Numberz.FIVE] = 5000L;
- Xtruct truck = new Xtruct();
- truck.String_thing = "Truck";
- truck.Byte_thing = (sbyte)8;
- truck.I32_thing = 8;
- truck.I64_thing = 8;
- insane.Xtructs = new List<Xtruct>();
- insane.Xtructs.Add(truck);
- Console.Write("testInsanity()");
- Dictionary<long, Dictionary<Numberz, Insanity>> whoa = client.testInsanity(insane);
- Console.Write(" = {");
- foreach (long key in whoa.Keys)
- {
- Dictionary<Numberz, Insanity> val = whoa[key];
- Console.Write(key + " => {");
-
- foreach (Numberz k2 in val.Keys)
- {
- Insanity v2 = val[k2];
-
- Console.Write(k2 + " => {");
- Dictionary<Numberz, long> userMap = v2.UserMap;
-
- Console.Write("{");
- if (userMap != null)
- {
- foreach (Numberz k3 in userMap.Keys)
- {
- Console.Write(k3 + " => " + userMap[k3] + ", ");
- }
- }
- else
- {
- Console.Write("null");
- }
- Console.Write("}, ");
-
- List<Xtruct> xtructs = v2.Xtructs;
-
- Console.Write("{");
- if (xtructs != null)
- {
- foreach (Xtruct x in xtructs)
- {
- Console.Write("{\"" + x.String_thing + "\", " + x.Byte_thing + ", " + x.I32_thing + ", " + x.I32_thing + "}, ");
- }
- }
- else
- {
- Console.Write("null");
- }
- Console.Write("}");
-
- Console.Write("}, ");
- }
- Console.Write("}, ");
- }
- Console.WriteLine("}");
-
- sbyte arg0 = 1;
- int arg1 = 2;
- long arg2 = long.MaxValue;
- Dictionary<short, string> multiDict = new Dictionary<short, string>();
- multiDict[1] = "one";
- Numberz arg4 = Numberz.FIVE;
- long arg5 = 5000000;
- Console.Write("Test Multi(" + arg0 + "," + arg1 + "," + arg2 + "," + multiDict + "," + arg4 + "," + arg5 + ")");
- Xtruct multiResponse = client.testMulti(arg0, arg1, arg2, multiDict, arg4, arg5);
- Console.Write(" = Xtruct(byte_thing:" + multiResponse.Byte_thing + ",String_thing:" + multiResponse.String_thing
- + ",i32_thing:" + multiResponse.I32_thing + ",i64_thing:" + multiResponse.I64_thing + ")\n");
-
- try
- {
- Console.WriteLine("testException(\"Xception\")");
- client.testException("Xception");
- Console.WriteLine("*** FAILED ***");
- returnCode |= ErrorExceptions;
- }
- catch (Xception ex)
- {
- if (ex.ErrorCode != 1001 || ex.Message != "Xception")
- {
- Console.WriteLine("*** FAILED ***");
- returnCode |= ErrorExceptions;
- }
- }
- catch (Exception ex)
- {
- Console.WriteLine("*** FAILED ***");
- returnCode |= ErrorExceptions;
- Console.WriteLine(ex.Message + " ST: " + ex.StackTrace);
- }
- try
- {
- Console.WriteLine("testException(\"TException\")");
- client.testException("TException");
- Console.WriteLine("*** FAILED ***");
- returnCode |= ErrorExceptions;
- }
- catch (Thrift.TException)
- {
- // OK
- }
- catch (Exception ex)
- {
- Console.WriteLine("*** FAILED ***");
- returnCode |= ErrorExceptions;
- Console.WriteLine(ex.Message + " ST: " + ex.StackTrace);
- }
- try
- {
- Console.WriteLine("testException(\"ok\")");
- client.testException("ok");
- // OK
- }
- catch (Exception ex)
- {
- Console.WriteLine("*** FAILED ***");
- returnCode |= ErrorExceptions;
- Console.WriteLine(ex.Message + " ST: " + ex.StackTrace);
- }
-
- try
- {
- Console.WriteLine("testMultiException(\"Xception\", ...)");
- client.testMultiException("Xception", "ignore");
- Console.WriteLine("*** FAILED ***");
- returnCode |= ErrorExceptions;
- }
- catch (Xception ex)
- {
- if (ex.ErrorCode != 1001 || ex.Message != "This is an Xception")
- {
- Console.WriteLine("*** FAILED ***");
- returnCode |= ErrorExceptions;
- }
- }
- catch (Exception ex)
- {
- Console.WriteLine("*** FAILED ***");
- returnCode |= ErrorExceptions;
- Console.WriteLine(ex.Message + " ST: " + ex.StackTrace);
- }
- try
- {
- Console.WriteLine("testMultiException(\"Xception2\", ...)");
- client.testMultiException("Xception2", "ignore");
- Console.WriteLine("*** FAILED ***");
- returnCode |= ErrorExceptions;
- }
- catch (Xception2 ex)
- {
- if (ex.ErrorCode != 2002 || ex.Struct_thing.String_thing != "This is an Xception2")
- {
- Console.WriteLine("*** FAILED ***");
- returnCode |= ErrorExceptions;
- }
- }
- catch (Exception ex)
- {
- Console.WriteLine("*** FAILED ***");
- returnCode |= ErrorExceptions;
- Console.WriteLine(ex.Message + " ST: " + ex.StackTrace);
- }
- try
- {
- Console.WriteLine("testMultiException(\"success\", \"OK\")");
- if ("OK" != client.testMultiException("success", "OK").String_thing)
- {
- Console.WriteLine("*** FAILED ***");
- returnCode |= ErrorExceptions;
- }
- }
- catch (Exception ex)
- {
- Console.WriteLine("*** FAILED ***");
- returnCode |= ErrorExceptions;
- Console.WriteLine(ex.Message + " ST: " + ex.StackTrace);
- }
-
- Stopwatch sw = new Stopwatch();
- sw.Start();
- Console.WriteLine("Test Oneway(1)");
- client.testOneway(1);
- sw.Stop();
- if (sw.ElapsedMilliseconds > 1000)
- {
- Console.WriteLine("*** FAILED ***");
- returnCode |= ErrorBaseTypes;
- }
-
- Console.Write("Test Calltime()");
- var times = 50;
- sw.Reset();
- sw.Start();
- for (int k = 0; k < times; ++k)
- client.testVoid();
- sw.Stop();
- Console.WriteLine(" = {0} ms a testVoid() call", sw.ElapsedMilliseconds / times);
- return returnCode;
- }
- }
-}
diff --git a/test/csharp/TestServer.cs b/test/csharp/TestServer.cs
deleted file mode 100644
index bf645c26c..000000000
--- a/test/csharp/TestServer.cs
+++ /dev/null
@@ -1,535 +0,0 @@
-/*
- * 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.
- */
-
-// Distributed under the Thrift Software License
-//
-// See accompanying file LICENSE or visit the Thrift site at:
-// http://developers.facebook.com/thrift/
-using System;
-using System.Collections.Generic;
-using System.Security.Cryptography.X509Certificates;
-using Thrift.Collections;
-using Thrift.Test; //generated code
-using Thrift.Transport;
-using Thrift.Protocol;
-using Thrift.Server;
-using Thrift;
-using System.Threading;
-using System.Text;
-using System.Security.Authentication;
-
-namespace Test
-{
- public class TestServer
- {
- public static int _clientID = -1;
- public delegate void TestLogDelegate(string msg, params object[] values);
-
- public class TradeServerEventHandler : TServerEventHandler
- {
- public int callCount = 0;
- public void preServe()
- {
- callCount++;
- }
- public Object createContext(Thrift.Protocol.TProtocol input, Thrift.Protocol.TProtocol output)
- {
- callCount++;
- return null;
- }
- public void deleteContext(Object serverContext, Thrift.Protocol.TProtocol input, Thrift.Protocol.TProtocol output)
- {
- callCount++;
- }
- public void processContext(Object serverContext, Thrift.Transport.TTransport transport)
- {
- callCount++;
- }
- };
-
-
- public class TestHandler : ThriftTest.Iface, Thrift.TControllingHandler
- {
- public TServer server { get; set; }
- private int handlerID;
- private StringBuilder reusableStringBuilder = new StringBuilder();
- private TestLogDelegate testLogDelegate;
-
- public TestHandler()
- {
- handlerID = Interlocked.Increment(ref _clientID);
- testLogDelegate += testConsoleLogger;
- testLogDelegate.Invoke("New TestHandler instance created");
- }
-
- public void testConsoleLogger(string msg, params object[] values)
- {
- reusableStringBuilder.Clear();
- reusableStringBuilder.AppendFormat("handler{0:D3}:",handlerID);
- reusableStringBuilder.AppendFormat(msg, values);
- reusableStringBuilder.AppendLine();
- Console.Write( reusableStringBuilder.ToString() );
- }
-
- public void testVoid()
- {
- testLogDelegate.Invoke("testVoid()");
- }
-
- public string testString(string thing)
- {
- testLogDelegate.Invoke("testString({0})", thing);
- return thing;
- }
-
- public bool testBool(bool thing)
- {
- testLogDelegate.Invoke("testBool({0})", thing);
- return thing;
- }
-
- public sbyte testByte(sbyte thing)
- {
- testLogDelegate.Invoke("testByte({0})", thing);
- return thing;
- }
-
- public int testI32(int thing)
- {
- testLogDelegate.Invoke("testI32({0})", thing);
- return thing;
- }
-
- public long testI64(long thing)
- {
- testLogDelegate.Invoke("testI64({0})", thing);
- return thing;
- }
-
- public double testDouble(double thing)
- {
- testLogDelegate.Invoke("testDouble({0})", thing);
- return thing;
- }
-
- public byte[] testBinary(byte[] thing)
- {
- string hex = BitConverter.ToString(thing).Replace("-", string.Empty);
- testLogDelegate.Invoke("testBinary({0:X})", hex);
- return thing;
- }
-
- public Xtruct testStruct(Xtruct thing)
- {
- testLogDelegate.Invoke("testStruct({{\"{0}\", {1}, {2}, {3}}})", thing.String_thing, thing.Byte_thing, thing.I32_thing, thing.I64_thing);
- return thing;
- }
-
- public Xtruct2 testNest(Xtruct2 nest)
- {
- Xtruct thing = nest.Struct_thing;
- testLogDelegate.Invoke("testNest({{{0}, {{\"{1}\", {2}, {3}, {4}, {5}}}}})",
- nest.Byte_thing,
- thing.String_thing,
- thing.Byte_thing,
- thing.I32_thing,
- thing.I64_thing,
- nest.I32_thing);
- return nest;
- }
-
- public Dictionary<int, int> testMap(Dictionary<int, int> thing)
- {
- reusableStringBuilder.Clear();
- reusableStringBuilder.Append("testMap({{");
- bool first = true;
- foreach (int key in thing.Keys)
- {
- if (first)
- {
- first = false;
- }
- else
- {
- reusableStringBuilder.Append(", ");
- }
- reusableStringBuilder.AppendFormat("{0} => {1}", key, thing[key]);
- }
- reusableStringBuilder.Append("}})");
- testLogDelegate.Invoke(reusableStringBuilder.ToString());
- return thing;
- }
-
- public Dictionary<string, string> testStringMap(Dictionary<string, string> thing)
- {
- reusableStringBuilder.Clear();
- reusableStringBuilder.Append("testStringMap({{");
- bool first = true;
- foreach (string key in thing.Keys)
- {
- if (first)
- {
- first = false;
- }
- else
- {
- reusableStringBuilder.Append(", ");
- }
- reusableStringBuilder.AppendFormat("{0} => {1}", key, thing[key]);
- }
- reusableStringBuilder.Append("}})");
- testLogDelegate.Invoke(reusableStringBuilder.ToString());
- return thing;
- }
-
- public THashSet<int> testSet(THashSet<int> thing)
- {
- reusableStringBuilder.Clear();
- reusableStringBuilder.Append("testSet({{");
- bool first = true;
- foreach (int elem in thing)
- {
- if (first)
- {
- first = false;
- }
- else
- {
- reusableStringBuilder.Append(", ");
- }
- reusableStringBuilder.AppendFormat("{0}", elem);
- }
- reusableStringBuilder.Append("}})");
- testLogDelegate.Invoke(reusableStringBuilder.ToString());
- return thing;
- }
-
- public List<int> testList(List<int> thing)
- {
- reusableStringBuilder.Clear();
- reusableStringBuilder.Append("testList({{");
- bool first = true;
- foreach (int elem in thing)
- {
- if (first)
- {
- first = false;
- }
- else
- {
- reusableStringBuilder.Append(", ");
- }
- reusableStringBuilder.AppendFormat("{0}", elem);
- }
- reusableStringBuilder.Append("}})");
- testLogDelegate.Invoke(reusableStringBuilder.ToString());
- return thing;
- }
-
- public Numberz testEnum(Numberz thing)
- {
- testLogDelegate.Invoke("testEnum({0})", thing);
- return thing;
- }
-
- public long testTypedef(long thing)
- {
- testLogDelegate.Invoke("testTypedef({0})", thing);
- return thing;
- }
-
- public Dictionary<int, Dictionary<int, int>> testMapMap(int hello)
- {
- testLogDelegate.Invoke("testMapMap({0})", hello);
- Dictionary<int, Dictionary<int, int>> mapmap =
- new Dictionary<int, Dictionary<int, int>>();
-
- Dictionary<int, int> pos = new Dictionary<int, int>();
- Dictionary<int, int> neg = new Dictionary<int, int>();
- for (int i = 1; i < 5; i++)
- {
- pos[i] = i;
- neg[-i] = -i;
- }
-
- mapmap[4] = pos;
- mapmap[-4] = neg;
-
- return mapmap;
- }
-
- // Insanity
- // returns:
- // { 1 => { 2 => argument,
- // 3 => argument,
- // },
- // 2 => { 6 => <empty Insanity struct>, },
- // }
- public Dictionary<long, Dictionary<Numberz, Insanity>> testInsanity(Insanity argument)
- {
- testLogDelegate.Invoke("testInsanity()");
-
- Dictionary<Numberz, Insanity> first_map = new Dictionary<Numberz, Insanity>();
- Dictionary<Numberz, Insanity> second_map = new Dictionary<Numberz, Insanity>(); ;
-
- first_map[Numberz.TWO] = argument;
- first_map[Numberz.THREE] = argument;
-
- second_map[Numberz.SIX] = new Insanity();
-
- Dictionary<long, Dictionary<Numberz, Insanity>> insane =
- new Dictionary<long, Dictionary<Numberz, Insanity>>();
- insane[(long)1] = first_map;
- insane[(long)2] = second_map;
-
- return insane;
- }
-
- public Xtruct testMulti(sbyte arg0, int arg1, long arg2, Dictionary<short, string> arg3, Numberz arg4, long arg5)
- {
- testLogDelegate.Invoke("testMulti()");
-
- Xtruct hello = new Xtruct(); ;
- hello.String_thing = "Hello2";
- hello.Byte_thing = arg0;
- hello.I32_thing = arg1;
- hello.I64_thing = arg2;
- return hello;
- }
-
- /**
- * Print 'testException(%s)' with arg as '%s'
- * @param string arg - a string indication what type of exception to throw
- * if arg == "Xception" throw Xception with errorCode = 1001 and message = arg
- * elsen if arg == "TException" throw TException
- * else do not throw anything
- */
- public void testException(string arg)
- {
- testLogDelegate.Invoke("testException({0})", arg);
- if (arg == "Xception")
- {
- Xception x = new Xception();
- x.ErrorCode = 1001;
- x.Message = arg;
- throw x;
- }
- if (arg == "TException")
- {
- throw new Thrift.TException();
- }
- return;
- }
-
- public Xtruct testMultiException(string arg0, string arg1)
- {
- testLogDelegate.Invoke("testMultiException({0}, {1})", arg0,arg1);
- if (arg0 == "Xception")
- {
- Xception x = new Xception();
- x.ErrorCode = 1001;
- x.Message = "This is an Xception";
- throw x;
- }
- else if (arg0 == "Xception2")
- {
- Xception2 x = new Xception2();
- x.ErrorCode = 2002;
- x.Struct_thing = new Xtruct();
- x.Struct_thing.String_thing = "This is an Xception2";
- throw x;
- }
-
- Xtruct result = new Xtruct();
- result.String_thing = arg1;
- return result;
- }
-
- public void testStop()
- {
- if (server != null)
- {
- server.Stop();
- }
- }
-
- public void testOneway(int arg)
- {
- testLogDelegate.Invoke("testOneway({0}), sleeping...", arg);
- System.Threading.Thread.Sleep(arg * 1000);
- testLogDelegate.Invoke("testOneway finished");
- }
-
- } // class TestHandler
-
- private enum ServerType
- {
- TSimpleServer,
- TThreadedServer,
- TThreadPoolServer,
- }
-
- private enum ProcessorFactoryType
- {
- TSingletonProcessorFactory,
- TPrototypeProcessorFactory,
- }
-
- public static bool Execute(string[] args)
- {
- try
- {
- bool useBufferedSockets = false, useFramed = false, useEncryption = false, compact = false, json = false;
- ServerType serverType = ServerType.TSimpleServer;
- ProcessorFactoryType processorFactoryType = ProcessorFactoryType.TSingletonProcessorFactory;
- int port = 9090;
- string pipe = null;
- for (int i = 0; i < args.Length; i++)
- {
- if (args[i] == "-pipe") // -pipe name
- {
- pipe = args[++i];
- }
- else if (args[i].Contains("--port="))
- {
- port = int.Parse(args[i].Substring(args[i].IndexOf("=") + 1));
- }
- else if (args[i] == "-b" || args[i] == "--buffered" || args[i] == "--transport=buffered")
- {
- useBufferedSockets = true;
- }
- else if (args[i] == "-f" || args[i] == "--framed" || args[i] == "--transport=framed")
- {
- useFramed = true;
- }
- else if (args[i] == "--compact" || args[i] == "--protocol=compact")
- {
- compact = true;
- }
- else if (args[i] == "--json" || args[i] == "--protocol=json")
- {
- json = true;
- }
- else if (args[i] == "--threaded" || args[i] == "--server-type=threaded")
- {
- serverType = ServerType.TThreadedServer;
- }
- else if (args[i] == "--threadpool" || args[i] == "--server-type=threadpool")
- {
- serverType = ServerType.TThreadPoolServer;
- }
- else if (args[i] == "--prototype" || args[i] == "--processor=prototype")
- {
- processorFactoryType = ProcessorFactoryType.TPrototypeProcessorFactory;
- }
- else if (args[i] == "--ssl")
- {
- useEncryption = true;
- }
- }
-
- // Transport
- TServerTransport trans;
- if (pipe != null)
- {
- trans = new TNamedPipeServerTransport(pipe);
- }
- else
- {
- if (useEncryption)
- {
- string certPath = "../keys/server.p12";
- trans = new TTLSServerSocket(port, 0, useBufferedSockets, new X509Certificate2(certPath, "thrift"),
- null,
- null, SslProtocols.Tls);
- }
- else
- {
- trans = new TServerSocket(port, 0, useBufferedSockets);
- }
- }
-
- TProtocolFactory proto;
- if (compact)
- proto = new TCompactProtocol.Factory();
- else if (json)
- proto = new TJSONProtocol.Factory();
- else
- proto = new TBinaryProtocol.Factory();
-
- TProcessorFactory processorFactory;
- if (processorFactoryType == ProcessorFactoryType.TPrototypeProcessorFactory)
- {
- processorFactory = new TPrototypeProcessorFactory<ThriftTest.Processor, TestHandler>();
- }
- else
- {
- // Processor
- TestHandler testHandler = new TestHandler();
- ThriftTest.Processor testProcessor = new ThriftTest.Processor(testHandler);
- processorFactory = new TSingletonProcessorFactory(testProcessor);
- }
-
- TTransportFactory transFactory;
- if (useFramed)
- transFactory = new TFramedTransport.Factory();
- else
- transFactory = new TTransportFactory();
-
- TServer serverEngine;
- switch (serverType)
- {
- case ServerType.TThreadPoolServer:
- serverEngine = new TThreadPoolServer(processorFactory, trans, transFactory, proto);
- break;
- case ServerType.TThreadedServer:
- serverEngine = new TThreadedServer(processorFactory, trans, transFactory, proto);
- break;
- default:
- serverEngine = new TSimpleServer(processorFactory, trans, transFactory, proto);
- break;
- }
-
- //Server event handler
- TradeServerEventHandler serverEvents = new TradeServerEventHandler();
- serverEngine.setEventHandler(serverEvents);
-
- // Run it
- string where = (pipe != null ? "on pipe " + pipe : "on port " + port);
- Console.WriteLine("Starting the " + serverType.ToString() + " " + where +
- (processorFactoryType == ProcessorFactoryType.TPrototypeProcessorFactory ? " with processor prototype factory " : "") +
- (useBufferedSockets ? " with buffered socket" : "") +
- (useFramed ? " with framed transport" : "") +
- (useEncryption ? " with encryption" : "") +
- (compact ? " with compact protocol" : "") +
- (json ? " with json protocol" : "") +
- "...");
- serverEngine.Serve();
-
- }
- catch (Exception x)
- {
- Console.Error.Write(x);
- return false;
- }
- Console.WriteLine("done.");
- return true;
- }
- }
-}
diff --git a/test/csharp/ThriftTest.csproj b/test/csharp/ThriftTest.csproj
deleted file mode 100644
index 2ff092673..000000000
--- a/test/csharp/ThriftTest.csproj
+++ /dev/null
@@ -1,141 +0,0 @@
-<?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="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProductVersion>9.0.21022</ProductVersion>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{48DD757F-CA95-4DD7-BDA4-58DB6F108C2C}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <RootNamespace>ThriftTest</RootNamespace>
- <AssemblyName>ThriftTest</AssemblyName>
- <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
- <FileAlignment>512</FileAlignment>
- <IsWebBootstrapper>false</IsWebBootstrapper>
- <FileUpgradeFlags>
- </FileUpgradeFlags>
- <OldToolsVersion>3.5</OldToolsVersion>
- <UpgradeBackupLocation />
- <PublishUrl>publish\</PublishUrl>
- <Install>true</Install>
- <InstallFrom>Disk</InstallFrom>
- <UpdateEnabled>false</UpdateEnabled>
- <UpdateMode>Foreground</UpdateMode>
- <UpdateInterval>7</UpdateInterval>
- <UpdateIntervalUnits>Days</UpdateIntervalUnits>
- <UpdatePeriodically>false</UpdatePeriodically>
- <UpdateRequired>false</UpdateRequired>
- <MapFileExtensions>true</MapFileExtensions>
- <ApplicationRevision>0</ApplicationRevision>
- <ApplicationVersion>0.14.0.0</ApplicationVersion>
- <UseApplicationTrust>false</UseApplicationTrust>
- <BootstrapperEnabled>true</BootstrapperEnabled>
- </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>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </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>
- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
- </PropertyGroup>
- <ItemGroup>
- <Reference Include="System" />
- <Reference Include="ThriftImpl, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
- <SpecificVersion>False</SpecificVersion>
- <HintPath>.\ThriftImpl.dll</HintPath>
- </Reference>
- </ItemGroup>
- <ItemGroup>
- <Compile Include="Program.cs" />
- <Compile Include="Properties\AssemblyInfo.cs" />
- <Compile Include="TestClient.cs" />
- <Compile Include="TestServer.cs" />
- </ItemGroup>
- <ItemGroup>
- <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
- <Install>false</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Net.Framework.2.0">
- <Visible>False</Visible>
- <ProductName>.NET Framework 2.0 %28x86%29</ProductName>
- <Install>false</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Net.Framework.3.0">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.0 %28x86%29</ProductName>
- <Install>false</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Net.Framework.3.5">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5</ProductName>
- <Install>true</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5 SP1</ProductName>
- <Install>false</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
- <Visible>False</Visible>
- <ProductName>Windows Installer 3.1</ProductName>
- <Install>true</Install>
- </BootstrapperPackage>
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\..\lib\csharp\Thrift.csproj">
- <Project>{499EB63C-D74C-47E8-AE48-A2FC94538E9D}</Project>
- <Name>Thrift</Name>
- </ProjectReference>
- </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>
- -->
- <PropertyGroup>
- <PreBuildEvent>rmdir /s /q "$(ProjectDir)gen-csharp"
-del /f /q "$(ProjectDir)ThriftImpl.dll"
-SET OUTPUT_DIR=$(ProjectDir)
-SET THRIFT_FILE=$(ProjectDir)\..\ThriftTest.thrift
-for %25%25I in ("%25OUTPUT_DIR%25") do set SHORT_DIR=%25%25~fsI
-for %25%25I in ("%25THRIFT_FILE%25") do set THRIFT_SHORT=%25%25~fsI
-"$(ProjectDir)\..\..\compiler\cpp\thrift.exe" --gen csharp -o %25SHORT_DIR%25 %25THRIFT_SHORT%25
-$(MSBuildToolsPath)\Csc.exe /t:library /out:"$(ProjectDir)ThriftImpl.dll" /recurse:"$(ProjectDir)gen-csharp"\* /reference:"$(ProjectDir)..\..\lib\csharp\bin\Debug\Thrift.dll"</PreBuildEvent>
- </PropertyGroup>
-</Project>
diff --git a/test/csharp/ThriftTest.sln b/test/csharp/ThriftTest.sln
deleted file mode 100644
index 1765a03ad..000000000
--- a/test/csharp/ThriftTest.sln
+++ /dev/null
@@ -1,17 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ThriftTest", "ThriftTest.csproj", "{48DD757F-CA95-4DD7-BDA4-58DB6F108C2C}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Release|Any CPU = Release|Any CPU
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {48DD757F-CA95-4DD7-BDA4-58DB6F108C2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {48DD757F-CA95-4DD7-BDA4-58DB6F108C2C}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {48DD757F-CA95-4DD7-BDA4-58DB6F108C2C}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {48DD757F-CA95-4DD7-BDA4-58DB6F108C2C}.Release|Any CPU.Build.0 = Release|Any CPU
- EndGlobalSection
-EndGlobal
diff --git a/test/haxe/src/Arguments.hx b/test/haxe/src/Arguments.hx
index 023f250fd..56e525356 100644
--- a/test/haxe/src/Arguments.hx
+++ b/test/haxe/src/Arguments.hx
@@ -92,7 +92,7 @@ class Arguments
#if sys
private static function GetHelp() : String {
- var sProg = Path.withoutDirectory( Sys.programPath());
+ var sProg = Path.withoutDirectory( Sys.executablePath());
return "\n"
+sProg+" [client|server] [options]\n"
+"\n"
diff --git a/test/netstd/Client/Client.csproj b/test/netstd/Client/Client.csproj
index ce71809dd..4ed57cbd9 100644
--- a/test/netstd/Client/Client.csproj
+++ b/test/netstd/Client/Client.csproj
@@ -31,7 +31,7 @@
<GenerateAssemblyCopyrightAttribute>false</GenerateAssemblyCopyrightAttribute>
</PropertyGroup>
<ItemGroup>
- <PackageReference Include="System.Net.Http.WinHttpHandler" Version="4.7.2" />
+ <PackageReference Include="System.Net.Http.WinHttpHandler" Version="4.7.0" />
<PackageReference Include="System.Runtime.Serialization.Primitives" Version="[4.3,)" />
<PackageReference Include="System.ServiceModel.Primitives" Version="4.7.0" />
<PackageReference Include="System.Threading" Version="[4.3,)" />
diff --git a/test/netstd/Referenz.txt b/test/netstd/Referenz.txt
deleted file mode 100644
index 58088e4c9..000000000
--- a/test/netstd/Referenz.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-E:\D\TPCPP\Thrift\wc-XE-all\wc-JensG-haxe\test\netstd\Client\bin\Release\netcoreapp3.1>Client.exe --performance
-Setting up for ProtocolPeformanceTestAsync ...
-RunTestAsync(TBinaryProtocol): write = 1982 msec
-RunTestAsync(TBinaryProtocol): read = 4995 msec
-RunTestAsync(TCompactProtocol): write = 1240 msec
-RunTestAsync(TCompactProtocol): read = 3964 msec
-RunTestAsync(TJsonProtocol): write = 5206 msec
-RunTestAsync(TJsonProtocol): read = 23249 msec
-RunTestAsync(TBinaryProtocol + TBufferedTransport): write = 1990 msec
-RunTestAsync(TBinaryProtocol + TBufferedTransport): read = 5777 msec
-RunTestAsync(TCompactProtocol + TBufferedTransport): write = 1453 msec
-RunTestAsync(TCompactProtocol + TBufferedTransport): read = 4761 msec
-RunTestAsync(TJsonProtocol + TBufferedTransport): write = 8859 msec
-RunTestAsync(TJsonProtocol + TBufferedTransport): read = 30925 msec
-RunTestAsync(TBinaryProtocol + TFramedTransport): write = 2042 msec
-RunTestAsync(TBinaryProtocol + TFramedTransport): read = 5726 msec
-RunTestAsync(TCompactProtocol + TFramedTransport): write = 1480 msec
-RunTestAsync(TCompactProtocol + TFramedTransport): read = 4818 msec
-RunTestAsync(TJsonProtocol + TFramedTransport): write = 8612 msec
-RunTestAsync(TJsonProtocol + TFramedTransport): read = 30810 msec
diff --git a/test/netstd/Server/Server.csproj b/test/netstd/Server/Server.csproj
index cbd0fb1f9..fa5ce4615 100644
--- a/test/netstd/Server/Server.csproj
+++ b/test/netstd/Server/Server.csproj
@@ -33,7 +33,7 @@
<ItemGroup>
<PackageReference Include="System.IO.Pipes" Version="4.3.0" />
<PackageReference Include="System.IO.Pipes.AccessControl" Version="4.5.1" />
- <PackageReference Include="System.Net.Http.WinHttpHandler" Version="4.7.2" />
+ <PackageReference Include="System.Net.Http.WinHttpHandler" Version="4.7.0" />
<PackageReference Include="System.Runtime.Serialization.Primitives" Version="[4.3,)" />
<PackageReference Include="System.ServiceModel.Primitives" Version="4.7.0" />
<PackageReference Include="System.Threading" Version="[4.3,)" />
diff --git a/test/netstd/ThriftTest.sln b/test/netstd/ThriftTest.sln
index 7e101d9e0..352576ef0 100644
--- a/test/netstd/ThriftTest.sln
+++ b/test/netstd/ThriftTest.sln
@@ -1,7 +1,6 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 16
-VisualStudioVersion = 16.0.30104.148
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 15
+VisualStudioVersion = 15.0.26730.12
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Thrift", "..\..\lib\netstd\Thrift\Thrift.csproj", "{C20EA2A9-7660-47DE-9A49-D1EF12FB2895}"
EndProject
@@ -9,14 +8,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Client", "Client\Client.csp
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Server", "Server\Server.csproj", "{0C6E8685-F191-4479-9842-882A38961127}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Thrift.IntegrationTests", "..\..\lib\netstd\Tests\Thrift.IntegrationTests\Thrift.IntegrationTests.csproj", "{C8148BFF-B943-4474-8D33-A641C6FD3DAB}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Thrift.PublicInterfaces.Compile.Tests", "..\..\lib\netstd\Tests\Thrift.PublicInterfaces.Compile.Tests\Thrift.PublicInterfaces.Compile.Tests.csproj", "{5D86C1B6-0CDA-4D1D-80A5-240583B21148}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Thrift.Tests", "..\..\lib\netstd\Tests\Thrift.Tests\Thrift.Tests.csproj", "{37FDED71-F8FB-434B-B2A8-1C53CCD9FD38}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Thrift.Benchmarks", "..\..\lib\netstd\Benchmarks\Thrift.Benchmarks\Thrift.Benchmarks.csproj", "{66946544-8DE7-45E9-8D0E-93EADA028D44}"
-EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -63,54 +54,6 @@ Global
{0C6E8685-F191-4479-9842-882A38961127}.Release|x64.Build.0 = Release|Any CPU
{0C6E8685-F191-4479-9842-882A38961127}.Release|x86.ActiveCfg = Release|Any CPU
{0C6E8685-F191-4479-9842-882A38961127}.Release|x86.Build.0 = Release|Any CPU
- {C8148BFF-B943-4474-8D33-A641C6FD3DAB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {C8148BFF-B943-4474-8D33-A641C6FD3DAB}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {C8148BFF-B943-4474-8D33-A641C6FD3DAB}.Debug|x64.ActiveCfg = Debug|Any CPU
- {C8148BFF-B943-4474-8D33-A641C6FD3DAB}.Debug|x64.Build.0 = Debug|Any CPU
- {C8148BFF-B943-4474-8D33-A641C6FD3DAB}.Debug|x86.ActiveCfg = Debug|Any CPU
- {C8148BFF-B943-4474-8D33-A641C6FD3DAB}.Debug|x86.Build.0 = Debug|Any CPU
- {C8148BFF-B943-4474-8D33-A641C6FD3DAB}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {C8148BFF-B943-4474-8D33-A641C6FD3DAB}.Release|Any CPU.Build.0 = Release|Any CPU
- {C8148BFF-B943-4474-8D33-A641C6FD3DAB}.Release|x64.ActiveCfg = Release|Any CPU
- {C8148BFF-B943-4474-8D33-A641C6FD3DAB}.Release|x64.Build.0 = Release|Any CPU
- {C8148BFF-B943-4474-8D33-A641C6FD3DAB}.Release|x86.ActiveCfg = Release|Any CPU
- {C8148BFF-B943-4474-8D33-A641C6FD3DAB}.Release|x86.Build.0 = Release|Any CPU
- {5D86C1B6-0CDA-4D1D-80A5-240583B21148}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {5D86C1B6-0CDA-4D1D-80A5-240583B21148}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {5D86C1B6-0CDA-4D1D-80A5-240583B21148}.Debug|x64.ActiveCfg = Debug|Any CPU
- {5D86C1B6-0CDA-4D1D-80A5-240583B21148}.Debug|x64.Build.0 = Debug|Any CPU
- {5D86C1B6-0CDA-4D1D-80A5-240583B21148}.Debug|x86.ActiveCfg = Debug|Any CPU
- {5D86C1B6-0CDA-4D1D-80A5-240583B21148}.Debug|x86.Build.0 = Debug|Any CPU
- {5D86C1B6-0CDA-4D1D-80A5-240583B21148}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {5D86C1B6-0CDA-4D1D-80A5-240583B21148}.Release|Any CPU.Build.0 = Release|Any CPU
- {5D86C1B6-0CDA-4D1D-80A5-240583B21148}.Release|x64.ActiveCfg = Release|Any CPU
- {5D86C1B6-0CDA-4D1D-80A5-240583B21148}.Release|x64.Build.0 = Release|Any CPU
- {5D86C1B6-0CDA-4D1D-80A5-240583B21148}.Release|x86.ActiveCfg = Release|Any CPU
- {5D86C1B6-0CDA-4D1D-80A5-240583B21148}.Release|x86.Build.0 = Release|Any CPU
- {37FDED71-F8FB-434B-B2A8-1C53CCD9FD38}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {37FDED71-F8FB-434B-B2A8-1C53CCD9FD38}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {37FDED71-F8FB-434B-B2A8-1C53CCD9FD38}.Debug|x64.ActiveCfg = Debug|Any CPU
- {37FDED71-F8FB-434B-B2A8-1C53CCD9FD38}.Debug|x64.Build.0 = Debug|Any CPU
- {37FDED71-F8FB-434B-B2A8-1C53CCD9FD38}.Debug|x86.ActiveCfg = Debug|Any CPU
- {37FDED71-F8FB-434B-B2A8-1C53CCD9FD38}.Debug|x86.Build.0 = Debug|Any CPU
- {37FDED71-F8FB-434B-B2A8-1C53CCD9FD38}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {37FDED71-F8FB-434B-B2A8-1C53CCD9FD38}.Release|Any CPU.Build.0 = Release|Any CPU
- {37FDED71-F8FB-434B-B2A8-1C53CCD9FD38}.Release|x64.ActiveCfg = Release|Any CPU
- {37FDED71-F8FB-434B-B2A8-1C53CCD9FD38}.Release|x64.Build.0 = Release|Any CPU
- {37FDED71-F8FB-434B-B2A8-1C53CCD9FD38}.Release|x86.ActiveCfg = Release|Any CPU
- {37FDED71-F8FB-434B-B2A8-1C53CCD9FD38}.Release|x86.Build.0 = Release|Any CPU
- {66946544-8DE7-45E9-8D0E-93EADA028D44}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {66946544-8DE7-45E9-8D0E-93EADA028D44}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {66946544-8DE7-45E9-8D0E-93EADA028D44}.Debug|x64.ActiveCfg = Debug|Any CPU
- {66946544-8DE7-45E9-8D0E-93EADA028D44}.Debug|x64.Build.0 = Debug|Any CPU
- {66946544-8DE7-45E9-8D0E-93EADA028D44}.Debug|x86.ActiveCfg = Debug|Any CPU
- {66946544-8DE7-45E9-8D0E-93EADA028D44}.Debug|x86.Build.0 = Debug|Any CPU
- {66946544-8DE7-45E9-8D0E-93EADA028D44}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {66946544-8DE7-45E9-8D0E-93EADA028D44}.Release|Any CPU.Build.0 = Release|Any CPU
- {66946544-8DE7-45E9-8D0E-93EADA028D44}.Release|x64.ActiveCfg = Release|Any CPU
- {66946544-8DE7-45E9-8D0E-93EADA028D44}.Release|x64.Build.0 = Release|Any CPU
- {66946544-8DE7-45E9-8D0E-93EADA028D44}.Release|x86.ActiveCfg = Release|Any CPU
- {66946544-8DE7-45E9-8D0E-93EADA028D44}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/tutorial/csharp/CsharpClient/CsharpClient.cs b/tutorial/csharp/CsharpClient/CsharpClient.cs
deleted file mode 100644
index 113a47223..000000000
--- a/tutorial/csharp/CsharpClient/CsharpClient.cs
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * 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 Thrift;
-using Thrift.Protocol;
-using Thrift.Server;
-using Thrift.Transport;
-
-
-namespace CSharpTutorial
-{
- public class CSharpClient
- {
- public static void Main()
- {
- try
- {
- TTransport transport = new TSocket("localhost", 9090);
- TProtocol protocol = new TBinaryProtocol(transport);
- Calculator.Client client = new Calculator.Client(protocol);
-
- transport.Open();
- try
- {
- client.ping();
- Console.WriteLine("ping()");
-
- int sum = client.add(1, 1);
- Console.WriteLine("1+1={0}", sum);
-
- Work work = new Work();
-
- work.Op = Operation.DIVIDE;
- work.Num1 = 1;
- work.Num2 = 0;
- try
- {
- int quotient = client.calculate(1, work);
- Console.WriteLine("Whoa we can divide by 0");
- }
- catch (InvalidOperation io)
- {
- Console.WriteLine("Invalid operation: " + io.Why);
- }
-
- work.Op = Operation.SUBTRACT;
- work.Num1 = 15;
- work.Num2 = 10;
- try
- {
- int diff = client.calculate(1, work);
- Console.WriteLine("15-10={0}", diff);
- }
- catch (InvalidOperation io)
- {
- Console.WriteLine("Invalid operation: " + io.Why);
- }
-
- SharedStruct log = client.getStruct(1);
- Console.WriteLine("Check log: {0}", log.Value);
-
- }
- finally
- {
- transport.Close();
- }
- }
- catch (TApplicationException x)
- {
- Console.WriteLine(x.StackTrace);
- }
-
- }
- }
-}
diff --git a/tutorial/csharp/CsharpClient/CsharpClient.csproj b/tutorial/csharp/CsharpClient/CsharpClient.csproj
deleted file mode 100644
index 1ea7ff639..000000000
--- a/tutorial/csharp/CsharpClient/CsharpClient.csproj
+++ /dev/null
@@ -1,110 +0,0 @@
-<?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>{18F24087-4760-43DA-ACAB-7B9F0E096B11}</ProjectGuid>
- <OutputType>Exe</OutputType>
- <AppDesignerFolder>Properties</AppDesignerFolder>
- <RootNamespace>CsharpClient</RootNamespace>
- <AssemblyName>CsharpClient</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" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="..\gen-csharp\Calculator.cs">
- <Link>Calculator.cs</Link>
- </Compile>
- <Compile Include="..\gen-csharp\InvalidOperation.cs">
- <Link>InvalidOperation.cs</Link>
- </Compile>
- <Compile Include="..\gen-csharp\Operation.cs">
- <Link>Operation.cs</Link>
- </Compile>
- <Compile Include="..\gen-csharp\SharedService.cs">
- <Link>SharedService.cs</Link>
- </Compile>
- <Compile Include="..\gen-csharp\SharedStruct.cs">
- <Link>SharedStruct.cs</Link>
- </Compile>
- <Compile Include="..\gen-csharp\tutorial.Constants.cs">
- <Link>tutorial.Constants.cs</Link>
- </Compile>
- <Compile Include="..\gen-csharp\Work.cs">
- <Link>Work.cs</Link>
- </Compile>
- <Compile Include="CsharpClient.cs" />
- <Compile Include="Properties\AssemblyInfo.cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\..\..\lib\csharp\src\Thrift.csproj">
- <Project>{499eb63c-d74c-47e8-ae48-a2fc94538e9d}</Project>
- <Name>Thrift</Name>
- </ProjectReference>
- </ItemGroup>
- <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
- <PropertyGroup>
- <PreBuildEvent>pushd "$(SolutionDir)"
-thrift -gen csharp -r ../tutorial.thrift
-popd
-</PreBuildEvent>
- </PropertyGroup>
- <!-- 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/CsharpClient/Properties/AssemblyInfo.cs b/tutorial/csharp/CsharpClient/Properties/AssemblyInfo.cs
deleted file mode 100644
index 8f5b32a28..000000000
--- a/tutorial/csharp/CsharpClient/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * 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("The Apache Software Foundation")]
-[assembly: AssemblyProduct("Thrift")]
-[assembly: AssemblyCopyright("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("0.14.0.0")]
-[assembly: AssemblyFileVersion("0.14.0.0")]
diff --git a/tutorial/csharp/CsharpServer/CsharpServer.cs b/tutorial/csharp/CsharpServer/CsharpServer.cs
deleted file mode 100644
index 439790aaf..000000000
--- a/tutorial/csharp/CsharpServer/CsharpServer.cs
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * 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.WhatOp = (int)work.Op;
- io.Why = "Cannot divide by 0";
- throw io;
- }
- val = work.Num1 / work.Num2;
- break;
-
- default:
- {
- InvalidOperation io = new InvalidOperation();
- io.WhatOp = (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
deleted file mode 100644
index 07481806c..000000000
--- a/tutorial/csharp/CsharpServer/CsharpServer.csproj
+++ /dev/null
@@ -1,111 +0,0 @@
-<?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" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="..\gen-csharp\Calculator.cs">
- <Link>Calculator.cs</Link>
- </Compile>
- <Compile Include="..\gen-csharp\InvalidOperation.cs">
- <Link>InvalidOperation.cs</Link>
- </Compile>
- <Compile Include="..\gen-csharp\Operation.cs">
- <Link>Operation.cs</Link>
- </Compile>
- <Compile Include="..\gen-csharp\SharedService.cs">
- <Link>SharedService.cs</Link>
- </Compile>
- <Compile Include="..\gen-csharp\SharedStruct.cs">
- <Link>SharedStruct.cs</Link>
- </Compile>
- <Compile Include="..\gen-csharp\tutorial.Constants.cs">
- <Link>tutorial.Constants.cs</Link>
- </Compile>
- <Compile Include="..\gen-csharp\Work.cs">
- <Link>Work.cs</Link>
- </Compile>
- <Compile Include="CsharpServer.cs" />
- <Compile Include="Properties\AssemblyInfo.cs" />
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="..\..\..\lib\csharp\src\Thrift.csproj">
- <Project>{499eb63c-d74c-47e8-ae48-a2fc94538e9d}</Project>
- <Name>Thrift</Name>
- </ProjectReference>
- </ItemGroup>
- <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
- <PropertyGroup>
- <PreBuildEvent>pushd "$(SolutionDir)"
-thrift -gen csharp -r ../tutorial.thrift
-popd
-
-</PreBuildEvent>
- </PropertyGroup>
- <!-- 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
deleted file mode 100644
index 0d4f0fbb1..000000000
--- a/tutorial/csharp/CsharpServer/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * 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("The Apache Software Foundation")]
-[assembly: AssemblyProduct("Thrift")]
-[assembly: AssemblyCopyright("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("0.14.0.0")]
-[assembly: AssemblyFileVersion("0.14.0.0")]
diff --git a/tutorial/csharp/tutorial.sln b/tutorial/csharp/tutorial.sln
deleted file mode 100644
index ec57a188d..000000000
--- a/tutorial/csharp/tutorial.sln
+++ /dev/null
@@ -1,39 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-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
diff --git a/tutorial/netstd/Client/Client.csproj b/tutorial/netstd/Client/Client.csproj
index 81b503f14..10d5040f0 100644
--- a/tutorial/netstd/Client/Client.csproj
+++ b/tutorial/netstd/Client/Client.csproj
@@ -30,7 +30,7 @@
</PropertyGroup>
<ItemGroup>
- <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.4" />
+ <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.0" />
</ItemGroup>
<ItemGroup>
diff --git a/tutorial/netstd/Server/Server.csproj b/tutorial/netstd/Server/Server.csproj
index 95eabd37d..b3ff516e3 100644
--- a/tutorial/netstd/Server/Server.csproj
+++ b/tutorial/netstd/Server/Server.csproj
@@ -38,7 +38,7 @@
<PackageReference Include="Microsoft.AspNetCore" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Server.IISIntegration" Version="2.2.1" />
<PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="2.2.0" />
- <PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="3.1.4" />
+ <PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="3.1.0" />
</ItemGroup>
</Project>