mirror of
https://github.com/valitydev/thrift.git
synced 2024-11-06 18:35:19 +00:00
3b115dfa61
Patch: Anna Dymek <aadymek@gmail.com> Client: C++ This closes #469
112 lines
2.9 KiB
D
112 lines
2.9 KiB
D
/*
|
|
* 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.
|
|
*/
|
|
module server;
|
|
|
|
import std.conv : to;
|
|
import std.stdio;
|
|
import thrift.codegen.processor;
|
|
import thrift.protocol.binary;
|
|
import thrift.server.simple;
|
|
import thrift.server.transport.socket;
|
|
import thrift.transport.buffered;
|
|
|
|
import share.SharedService;
|
|
import share.shared_types;
|
|
import tutorial.Calculator;
|
|
import tutorial.tutorial_types;
|
|
|
|
/**
|
|
* The actual implementation of the Calculator interface that is called by
|
|
* the server to answer the requests.
|
|
*/
|
|
class CalculatorHandler : Calculator {
|
|
void ping() {
|
|
writeln("ping()");
|
|
}
|
|
|
|
int add(int n1, int n2) {
|
|
writefln("add(%s,%s)", n1, n2);
|
|
return n1 + n2;
|
|
}
|
|
|
|
int calculate(int logid, ref const(Work) work) {
|
|
writefln("calculate(%s, {%s, %s, %s})", logid, work.op, work.num1, work.num2);
|
|
int val;
|
|
|
|
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) {
|
|
auto io = new InvalidOperation();
|
|
io.whatOp = work.op;
|
|
io.why = "Cannot divide by 0";
|
|
throw io;
|
|
}
|
|
val = work.num1 / work.num2;
|
|
break;
|
|
default:
|
|
auto io = new InvalidOperation();
|
|
io.whatOp = work.op;
|
|
io.why = "Invalid Operation";
|
|
throw io;
|
|
}
|
|
|
|
auto ss = SharedStruct();
|
|
ss.key = logid;
|
|
ss.value = to!string(val);
|
|
log[logid] = ss;
|
|
|
|
return val;
|
|
}
|
|
|
|
SharedStruct getStruct(int logid) {
|
|
writefln("getStruct(%s)", logid);
|
|
return log[logid];
|
|
}
|
|
|
|
void zip() {
|
|
writeln("zip()");
|
|
}
|
|
|
|
protected:
|
|
SharedStruct[int] log;
|
|
}
|
|
|
|
void main() {
|
|
auto protocolFactory = new TBinaryProtocolFactory!();
|
|
auto processor = new TServiceProcessor!Calculator(new CalculatorHandler);
|
|
auto serverTransport = new TServerSocket(9090);
|
|
auto transportFactory = new TBufferedTransportFactory;
|
|
|
|
auto server = new TSimpleServer(
|
|
processor, serverTransport, transportFactory, protocolFactory);
|
|
|
|
writeln("Starting the server on port 9090...");
|
|
server.serve();
|
|
writeln("done.");
|
|
}
|