From: David Reiss Date: Sun, 2 Mar 2008 00:58:04 +0000 (+0000) Subject: Add Stop methods for C# servers. X-Git-Tag: 0.2.0~934 X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=dc815f5402deeaa6ddd25c536bf912be59438d57;p=common%2Fthrift.git Add Stop methods for C# servers. git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@665538 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/lib/csharp/src/Server/TServer.cs b/lib/csharp/src/Server/TServer.cs index b168d993..a9b2816a 100644 --- a/lib/csharp/src/Server/TServer.cs +++ b/lib/csharp/src/Server/TServer.cs @@ -103,6 +103,8 @@ namespace Thrift.Server * The run method fires up the server and gets things going. */ public abstract void Serve(); + + public abstract void Stop(); } } diff --git a/lib/csharp/src/Server/TSimpleServer.cs b/lib/csharp/src/Server/TSimpleServer.cs index b2a70fe9..ff59fc3a 100644 --- a/lib/csharp/src/Server/TSimpleServer.cs +++ b/lib/csharp/src/Server/TSimpleServer.cs @@ -22,6 +22,7 @@ namespace Thrift.Server /// 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()) @@ -65,7 +66,7 @@ namespace Thrift.Server return; } - while (true) + while (!stop) { TTransport client = null; TTransport inputTransport = null; @@ -103,6 +104,24 @@ namespace Thrift.Server outputTransport.Close(); } } + + if (stop) + { + try + { + serverTransport.Close(); + } + catch (TTransportException ttx) + { + Console.Error.WriteLine("TServerTrasnport failed on close: " + ttx.Message); + } + stop = false; + } + } + + public override void Stop() + { + stop = true; } } } diff --git a/lib/csharp/src/Server/TThreadPoolServer.cs b/lib/csharp/src/Server/TThreadPoolServer.cs index b62de814..f8ee355d 100644 --- a/lib/csharp/src/Server/TThreadPoolServer.cs +++ b/lib/csharp/src/Server/TThreadPoolServer.cs @@ -25,6 +25,7 @@ namespace Thrift.Server { private const int DEFAULT_MIN_THREADS = 10; private const int DEFAULT_MAX_THREADS = 100; + private volatile bool stop = false; public TThreadPoolServer(TProcessor processor, TServerTransport serverTransport) :this(processor, serverTransport, @@ -81,7 +82,7 @@ namespace Thrift.Server return; } - while (true) + while (!stop) { int failureCount = 0; try @@ -95,6 +96,25 @@ namespace Thrift.Server Console.Error.WriteLine(ttx); } } + + if (stop) + { + try + { + serverTransport.Close(); + } + catch (TTransportException ttx) + { + Console.Error.WriteLine("TServerTrasnport failed on close: " + ttx.Message); + } + stop = false; + } + } + + + public override void Stop() + { + stop = true; } ///