Go to most recent revision | 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.*/using System;using System.Collections.Generic;using Thrift.Server;using Thrift.Transport;namespace CSharpTutorial{public class CalculatorHandler : Calculator.Iface{Dictionary<int, SharedStruct> log;public CalculatorHandler(){log = new Dictionary<int, SharedStruct>();}public void ping(){Console.WriteLine("ping()");}public int add(int n1, int n2){Console.WriteLine("add({0},{1})", n1, n2);return n1 + n2;}public int calculate(int logid, Work work){Console.WriteLine("calculate({0}, [{1},{2},{3}])", logid, work.op, work.num1, work.num2);int val = 0;switch (work.op){case Operation.ADD:val = work.num1 + work.num2;break;case Operation.SUBTRACT:val = work.num1 - work.num2;break;case Operation.MULTIPLY:val = work.num1 * work.num2;break;case Operation.DIVIDE:if (work.num2 == 0){InvalidOperation io = new InvalidOperation();io.what = (int)work.op;io.why = "Cannot divide by 0";throw io;}val = work.num1 / work.num2;break;default:{InvalidOperation io = new InvalidOperation();io.what = (int)work.op;io.why = "Unknown operation";throw io;}}SharedStruct entry = new SharedStruct();entry.key = logid;entry.value = val.ToString();log[logid] = entry;return val;}public SharedStruct getStruct(int key){Console.WriteLine("getStruct({0})", key);return log[key];}public void zip(){Console.WriteLine("zip()");}}public class CSharpServer{public static void Main(){try{CalculatorHandler handler = new CalculatorHandler();Calculator.Processor processor = new Calculator.Processor(handler);TServerTransport serverTransport = new TServerSocket(9090);TServer server = new TSimpleServer(processor, serverTransport);// Use this for a multithreaded server// server = new TThreadPoolServer(processor, serverTransport);Console.WriteLine("Starting the server...");server.Serve();}catch (Exception x){Console.WriteLine(x.StackTrace);}Console.WriteLine("done.");}}}