|  | /* | 
|  | * 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.Test; //generated code | 
|  | using Thrift.Transport; | 
|  | using Thrift.Protocol; | 
|  | using Thrift.Server; | 
|  |  | 
|  | namespace Test | 
|  | { | 
|  | public class TestServer | 
|  | { | 
|  | public class TestHandler : ThriftTest.Iface | 
|  | { | 
|  | public TServer server; | 
|  |  | 
|  | public TestHandler() { } | 
|  |  | 
|  | public void testVoid() | 
|  | { | 
|  | Console.WriteLine("testVoid()"); | 
|  | } | 
|  |  | 
|  | public string testString(string thing) | 
|  | { | 
|  | Console.WriteLine("teststring(\"" + thing + "\")"); | 
|  | return thing; | 
|  | } | 
|  |  | 
|  | public byte testByte(byte thing) | 
|  | { | 
|  | Console.WriteLine("testByte(" + thing + ")"); | 
|  | return thing; | 
|  | } | 
|  |  | 
|  | public int testI32(int thing) | 
|  | { | 
|  | Console.WriteLine("testI32(" + thing + ")"); | 
|  | return thing; | 
|  | } | 
|  |  | 
|  | public long testI64(long thing) | 
|  | { | 
|  | Console.WriteLine("testI64(" + thing + ")"); | 
|  | return thing; | 
|  | } | 
|  |  | 
|  | public double testDouble(double thing) | 
|  | { | 
|  | Console.WriteLine("testDouble(" + thing + ")"); | 
|  | return thing; | 
|  | } | 
|  |  | 
|  | public Xtruct testStruct(Xtruct thing) | 
|  | { | 
|  | Console.WriteLine("testStruct({" + | 
|  | "\"" + thing.String_thing + "\", " + | 
|  | thing.Byte_thing + ", " + | 
|  | thing.I32_thing + ", " + | 
|  | thing.I64_thing + "})"); | 
|  | return thing; | 
|  | } | 
|  |  | 
|  | public Xtruct2 testNest(Xtruct2 nest) | 
|  | { | 
|  | Xtruct thing = nest.Struct_thing; | 
|  | Console.WriteLine("testNest({" + | 
|  | 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) | 
|  | { | 
|  | Console.WriteLine("testMap({"); | 
|  | bool first = true; | 
|  | foreach (int key in thing.Keys) | 
|  | { | 
|  | if (first) | 
|  | { | 
|  | first = false; | 
|  | } | 
|  | else | 
|  | { | 
|  | Console.WriteLine(", "); | 
|  | } | 
|  | Console.WriteLine(key + " => " + thing[key]); | 
|  | } | 
|  | Console.WriteLine("})"); | 
|  | return thing; | 
|  | } | 
|  |  | 
|  | public THashSet<int> testSet(THashSet<int> thing) | 
|  | { | 
|  | Console.WriteLine("testSet({"); | 
|  | bool first = true; | 
|  | foreach (int elem in thing) | 
|  | { | 
|  | if (first) | 
|  | { | 
|  | first = false; | 
|  | } | 
|  | else | 
|  | { | 
|  | Console.WriteLine(", "); | 
|  | } | 
|  | Console.WriteLine(elem); | 
|  | } | 
|  | Console.WriteLine("})"); | 
|  | return thing; | 
|  | } | 
|  |  | 
|  | public List<int> testList(List<int> thing) | 
|  | { | 
|  | Console.WriteLine("testList({"); | 
|  | bool first = true; | 
|  | foreach (int elem in thing) | 
|  | { | 
|  | if (first) | 
|  | { | 
|  | first = false; | 
|  | } | 
|  | else | 
|  | { | 
|  | Console.WriteLine(", "); | 
|  | } | 
|  | Console.WriteLine(elem); | 
|  | } | 
|  | Console.WriteLine("})"); | 
|  | return thing; | 
|  | } | 
|  |  | 
|  | public Numberz testEnum(Numberz thing) | 
|  | { | 
|  | Console.WriteLine("testEnum(" + thing + ")"); | 
|  | return thing; | 
|  | } | 
|  |  | 
|  | public long testTypedef(long thing) | 
|  | { | 
|  | Console.WriteLine("testTypedef(" + thing + ")"); | 
|  | return thing; | 
|  | } | 
|  |  | 
|  | public Dictionary<int, Dictionary<int, int>> testMapMap(int hello) | 
|  | { | 
|  | Console.WriteLine("testMapMap(" + 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; | 
|  | } | 
|  |  | 
|  | public Dictionary<long, Dictionary<Numberz, Insanity>> testInsanity(Insanity argument) | 
|  | { | 
|  | Console.WriteLine("testInsanity()"); | 
|  |  | 
|  | Xtruct hello = new Xtruct(); | 
|  | hello.String_thing = "Hello2"; | 
|  | hello.Byte_thing = 2; | 
|  | hello.I32_thing = 2; | 
|  | hello.I64_thing = 2; | 
|  |  | 
|  | Xtruct goodbye = new Xtruct(); | 
|  | goodbye.String_thing = "Goodbye4"; | 
|  | goodbye.Byte_thing = (byte)4; | 
|  | goodbye.I32_thing = 4; | 
|  | goodbye.I64_thing = (long)4; | 
|  |  | 
|  | Insanity crazy = new Insanity(); | 
|  | crazy.UserMap = new Dictionary<Numberz, long>(); | 
|  | crazy.UserMap[Numberz.EIGHT] = (long)8; | 
|  | crazy.Xtructs = new List<Xtruct>(); | 
|  | crazy.Xtructs.Add(goodbye); | 
|  |  | 
|  | Insanity looney = new Insanity(); | 
|  | crazy.UserMap[Numberz.FIVE] = (long)5; | 
|  | crazy.Xtructs.Add(hello); | 
|  |  | 
|  | Dictionary<Numberz, Insanity> first_map = new Dictionary<Numberz, Insanity>(); | 
|  | Dictionary<Numberz, Insanity> second_map = new Dictionary<Numberz, Insanity>(); ; | 
|  |  | 
|  | first_map[Numberz.TWO] = crazy; | 
|  | first_map[Numberz.THREE] = crazy; | 
|  |  | 
|  | second_map[Numberz.SIX] = looney; | 
|  |  | 
|  | 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(byte arg0, int arg1, long arg2, Dictionary<short, string> arg3, Numberz arg4, long arg5) | 
|  | { | 
|  | Console.WriteLine("testMulti()"); | 
|  |  | 
|  | Xtruct hello = new Xtruct(); ; | 
|  | hello.String_thing = "Hello2"; | 
|  | hello.Byte_thing = arg0; | 
|  | hello.I32_thing = arg1; | 
|  | hello.I64_thing = arg2; | 
|  | return hello; | 
|  | } | 
|  |  | 
|  | public void testException(string arg) | 
|  | { | 
|  | Console.WriteLine("testException(" + arg + ")"); | 
|  | if (arg == "Xception") | 
|  | { | 
|  | Xception x = new Xception(); | 
|  | x.ErrorCode = 1001; | 
|  | x.Message = "This is an Xception"; | 
|  | throw x; | 
|  | } | 
|  | return; | 
|  | } | 
|  |  | 
|  | public Xtruct testMultiException(string arg0, string arg1) | 
|  | { | 
|  | Console.WriteLine("testMultiException(" + 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) | 
|  | { | 
|  | Console.WriteLine("testOneway(" + arg + "), sleeping..."); | 
|  | System.Threading.Thread.Sleep(arg * 1000); | 
|  | Console.WriteLine("testOneway finished"); | 
|  | } | 
|  |  | 
|  | } // class TestHandler | 
|  |  | 
|  | public static void Execute(string[] args) | 
|  | { | 
|  | try | 
|  | { | 
|  | bool useBufferedSockets = false; | 
|  | int port = 9090; | 
|  | if (args.Length > 0) | 
|  | { | 
|  | port = int.Parse(args[0]); | 
|  |  | 
|  | if (args.Length > 1) | 
|  | { | 
|  | bool.TryParse(args[1], out useBufferedSockets); | 
|  | } | 
|  | } | 
|  |  | 
|  | // Processor | 
|  | TestHandler testHandler = new TestHandler(); | 
|  | ThriftTest.Processor testProcessor = new ThriftTest.Processor(testHandler); | 
|  |  | 
|  | // Transport | 
|  | TServerSocket tServerSocket = new TServerSocket(port, 0, useBufferedSockets); | 
|  |  | 
|  | TServer serverEngine; | 
|  |  | 
|  | // Simple Server | 
|  | serverEngine = new TSimpleServer(testProcessor, tServerSocket); | 
|  |  | 
|  | // ThreadPool Server | 
|  | // serverEngine = new TThreadPoolServer(testProcessor, tServerSocket); | 
|  |  | 
|  | // Threaded Server | 
|  | // serverEngine = new TThreadedServer(testProcessor, tServerSocket); | 
|  |  | 
|  | testHandler.server = serverEngine; | 
|  |  | 
|  | // Run it | 
|  | Console.WriteLine("Starting the server on port " + port + (useBufferedSockets ? " with buffered socket" : "") + "..."); | 
|  | serverEngine.Serve(); | 
|  |  | 
|  | } | 
|  | catch (Exception x) | 
|  | { | 
|  | Console.Error.Write(x); | 
|  | } | 
|  | Console.WriteLine("done."); | 
|  | } | 
|  | } | 
|  | } |