mirror of
https://github.com/valitydev/thrift.git
synced 2024-11-07 10:48:51 +00:00
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/thrift
This commit is contained in:
commit
1077ed678d
@ -37,8 +37,6 @@ EXTRA_DIST = \
|
||||
doc \
|
||||
tutorial \
|
||||
contrib \
|
||||
CONTRIBUTORS \
|
||||
LICENSE \
|
||||
CHANGES \
|
||||
DISCLAIMER \
|
||||
NOTICE
|
||||
|
74
tutorial/ocaml/CalcClient.ml
Executable file
74
tutorial/ocaml/CalcClient.ml
Executable file
@ -0,0 +1,74 @@
|
||||
(*
|
||||
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.
|
||||
*)
|
||||
|
||||
open Arg
|
||||
open Thrift
|
||||
open Tutorial_types
|
||||
open Shared_types
|
||||
|
||||
exception Die;;
|
||||
let sod = function
|
||||
Some v -> v
|
||||
| None -> raise Die;;
|
||||
|
||||
type connection = {
|
||||
trans : Transport.t ;
|
||||
proto : Thrift.Protocol.t;
|
||||
calc : Calculator.client ;
|
||||
}
|
||||
|
||||
let connect ~host port =
|
||||
let tx = new TSocket.t host port in
|
||||
let proto = new TBinaryProtocol.t tx in
|
||||
let calc = new Calculator.client proto proto in
|
||||
tx#opn;
|
||||
{ trans = tx ; proto = proto; calc = calc }
|
||||
;;
|
||||
|
||||
let doclient () =
|
||||
let cli = connect ~host:"127.0.0.1" 9090 in
|
||||
try
|
||||
cli.calc#ping ;
|
||||
Printf.printf "ping()\n" ; flush stdout ;
|
||||
(let sum = cli.calc#add (Int32.of_int 1) (Int32.of_int 1) in
|
||||
Printf.printf "1+1=%ld\n" sum ;
|
||||
flush stdout) ;
|
||||
(let w = new work in
|
||||
w#set_op Operation.DIVIDE ;
|
||||
w#set_num1 (Int32.of_int 1) ;
|
||||
w#set_num2 (Int32.of_int 0) ;
|
||||
try
|
||||
let quotient = cli.calc#calculate (Int32.of_int 1) w in
|
||||
Printf.printf "Whoa? We can divide by zero!\n" ; flush stdout
|
||||
with InvalidOperation io ->
|
||||
Printf.printf "InvalidOperation: %s\n" io#grab_why ; flush stdout) ;
|
||||
(let w = new work in
|
||||
w#set_op Operation.SUBTRACT ;
|
||||
w#set_num1 (Int32.of_int 15) ;
|
||||
w#set_num2 (Int32.of_int 10) ;
|
||||
let diff = cli.calc#calculate (Int32.of_int 1) w in
|
||||
Printf.printf "15-10=%ld\n" diff ; flush stdout) ;
|
||||
(let ss = cli.calc#getStruct (Int32.of_int 1) in
|
||||
Printf.printf "Check log: %s\n" ss#grab_value ; flush stdout) ;
|
||||
cli.trans#close
|
||||
with Transport.E (_,what) ->
|
||||
Printf.printf "ERROR: %s\n" what ; flush stdout
|
||||
;;
|
||||
|
||||
doclient();;
|
89
tutorial/ocaml/CalcServer.ml
Executable file
89
tutorial/ocaml/CalcServer.ml
Executable file
@ -0,0 +1,89 @@
|
||||
(*
|
||||
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.
|
||||
*)
|
||||
|
||||
open Arg
|
||||
open Thrift
|
||||
open Tutorial_types
|
||||
open Shared_types
|
||||
|
||||
exception Die;;
|
||||
let sod = function
|
||||
Some v -> v
|
||||
| None -> raise Die;;
|
||||
|
||||
class calc_handler =
|
||||
object (self)
|
||||
inherit Calculator.iface
|
||||
val log = Hashtbl.create 23
|
||||
method ping = Printf.printf "ping()\n" ; flush stdout
|
||||
method add a b =
|
||||
Printf.printf"add(%ld,%ld)\n" (sod a) (sod b); flush stdout ;
|
||||
Int32.add (sod a) (sod b)
|
||||
method calculate logid w =
|
||||
let w = sod w in
|
||||
Printf.printf "calculate(%ld,{%ld,%ld,%ld})\n" (sod logid) (Operation.to_i w#grab_op) w#grab_num1 w#grab_num2; flush stdout ;
|
||||
let rv =
|
||||
match w#grab_op with
|
||||
Operation.ADD ->
|
||||
Int32.add w#grab_num1 w#grab_num2
|
||||
| Operation.SUBTRACT ->
|
||||
Int32.sub w#grab_num1 w#grab_num2
|
||||
| Operation.MULTIPLY ->
|
||||
Int32.mul w#grab_num1 w#grab_num2
|
||||
| Operation.DIVIDE ->
|
||||
if w#grab_num2 = Int32.zero then
|
||||
let io = new invalidOperation in
|
||||
io#set_what (Operation.to_i w#grab_op) ;
|
||||
io#set_why "Cannot divide by 0" ;
|
||||
raise (InvalidOperation io)
|
||||
else
|
||||
Int32.div w#grab_num1 w#grab_num2 in
|
||||
|
||||
let ss = new sharedStruct in
|
||||
ss#set_key (sod logid) ;
|
||||
let buffer = Int32.to_string rv in
|
||||
ss#set_value buffer ;
|
||||
Hashtbl.add log (sod logid) ss ;
|
||||
rv
|
||||
|
||||
method zip =
|
||||
Printf.printf "zip()\n"; flush stdout
|
||||
|
||||
method getStruct logid =
|
||||
Printf.printf "getStruct(%ld)\n" (sod logid) ; flush stdout ;
|
||||
Hashtbl.find log (sod logid)
|
||||
|
||||
end
|
||||
|
||||
let doserver () =
|
||||
let h = new calc_handler in
|
||||
let proc = new Calculator.processor h in
|
||||
let port = 9090 in
|
||||
let pf = new TBinaryProtocol.factory in
|
||||
let server = new TThreadedServer.t
|
||||
proc
|
||||
(new TServerSocket.t port)
|
||||
(new Transport.factory)
|
||||
pf
|
||||
pf
|
||||
in
|
||||
server#serve
|
||||
;;
|
||||
|
||||
doserver();;
|
15
tutorial/ocaml/README
Normal file
15
tutorial/ocaml/README
Normal file
@ -0,0 +1,15 @@
|
||||
|
||||
This is the ocaml tutorial example. It assumes that you've already
|
||||
built and installed the thrift ocaml runtime libraries in lib/ocaml.
|
||||
|
||||
To compile this, you will need to generate the Thrift sources for
|
||||
ocaml in this directory (due to limitations in the OASIS build-tool):
|
||||
|
||||
% thrift -r --gen ocaml ../tutorial.thrift
|
||||
% oasis setup
|
||||
% make
|
||||
|
||||
This will produce two executables Calc{Server,Client}.<type> where
|
||||
<type> is one of "byte" or "native", depending on your ocaml
|
||||
installation. Just run the server in the background, then the client
|
||||
(as you would do for the C++ example).
|
32
tutorial/ocaml/_oasis
Normal file
32
tutorial/ocaml/_oasis
Normal file
@ -0,0 +1,32 @@
|
||||
Name: tutorial
|
||||
Version: 1.0
|
||||
OASISFormat: 0.3
|
||||
Synopsis: OCaml Tutorial example
|
||||
Authors: Apache Thrift Developers <dev@thrift.apache.org>
|
||||
License: Apache-2.0
|
||||
Homepage: http://thrift.apache.org
|
||||
BuildTools: ocamlbuild
|
||||
Plugins: META (0.3),
|
||||
DevFiles (0.3)
|
||||
|
||||
Library tutorial_thrift
|
||||
Path: gen-ocaml
|
||||
FindlibName: tutorial_thrift
|
||||
buildTools: ocamlbuild
|
||||
BuildDepends: threads,thrift
|
||||
Modules: Calculator,Shared_consts,Tutorial_consts,SharedService,Shared_types,Tutorial_types
|
||||
XMETARequires: threads
|
||||
|
||||
Executable CalcClient
|
||||
Path: .
|
||||
MainIs: CalcClient.ml
|
||||
Build$: true
|
||||
CompiledObject: best
|
||||
BuildDepends: thrift, tutorial_thrift, threads
|
||||
|
||||
Executable CalcServer
|
||||
Path: .
|
||||
MainIs: CalcServer.ml
|
||||
Build$: true
|
||||
CompiledObject: best
|
||||
BuildDepends: thrift, tutorial_thrift, threads
|
Loading…
Reference in New Issue
Block a user