// // TSimpleServer.cs // // Begin: Dec 3, 2007 // Authors: // Will Palmeri // // Distributed under the Thrift Software License // // See accompanying file LICENSE or visit the Thrift site at: // http://developers.facebook.com/thrift/using using System; using System.Collections.Generic; using System.Text; using Thrift.Transport; using Thrift.Protocol; namespace Thrift.Server { /// /// Simple single-threaded server for testing /// 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 override void Serve() { try { serverTransport.Listen(); } catch (TTransportException ttx) { logDelegate(ttx.ToString()); return; } while (!stop) { TTransport client = null; TTransport inputTransport = null; TTransport outputTransport = null; TProtocol inputProtocol = null; TProtocol outputProtocol = null; try { client = serverTransport.Accept(); if (client != null) { inputTransport = inputTransportFactory.GetTransport(client); outputTransport = outputTransportFactory.GetTransport(client); inputProtocol = inputProtocolFactory.GetProtocol(inputTransport); outputProtocol = outputProtocolFactory.GetProtocol(outputTransport); while (processor.Process(inputProtocol, outputProtocol)) { } } } catch (TTransportException ttx) { // Client died, just move on if (stop) { logDelegate("TSimpleServer was shutting down, caught " + ttx.GetType().Name); } } catch (Exception x) { logDelegate(x.ToString()); } if (inputTransport != null) { inputTransport.Close(); } if (outputTransport != null) { outputTransport.Close(); } } if (stop) { try { serverTransport.Close(); } catch (TTransportException ttx) { logDelegate("TServerTranport failed on close: " + ttx.Message); } stop = false; } } public override void Stop() { stop = true; serverTransport.Close(); } } }