Subversion Repositories SmartDukaan

Rev

Rev 30 | Blame | Compare with Previous | Last modification | View Log | RSS feed

/*
 * 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.");
                }
        }
}