/* * 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 { public interface ITestHandler { void SetServer( TServer aServer); } protected class TestHandlerImpl : ITestHandler { private TServer Server; public void SetServer( TServer aServer) { Server = aServer; } } protected class BenchmarkServiceImpl : TestHandlerImpl, 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; } } protected class AggrServiceImpl : TestHandlerImpl, Aggr.Iface { List values = new List(); public void addValue(int value) { values.Add( value); } public List getValues() { return values; } } static void Execute() { try { // create protocol factory, default to BinaryProtocol TProtocolFactory ProtocolFactory = new TBinaryProtocol.Factory(true,true); TServerTransport servertrans = new TServerSocket( 9090, 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); (benchHandler as ITestHandler).SetServer( ServerEngine); (aggrHandler as ITestHandler).SetServer( ServerEngine); Console.WriteLine("Starting the server ..."); ServerEngine.Serve(); (benchHandler as ITestHandler).SetServer(null); (aggrHandler as ITestHandler).SetServer(null); } catch( Exception e) { Console.WriteLine( e.Message); } Console.WriteLine( "done."); } static void Main(string[] args) { Execute(); } } }