summaryrefslogtreecommitdiffstats
path: root/src/jaegertracing/thrift/tutorial/ocaml/CalcClient.ml
diff options
context:
space:
mode:
Diffstat (limited to 'src/jaegertracing/thrift/tutorial/ocaml/CalcClient.ml')
-rwxr-xr-xsrc/jaegertracing/thrift/tutorial/ocaml/CalcClient.ml74
1 files changed, 74 insertions, 0 deletions
diff --git a/src/jaegertracing/thrift/tutorial/ocaml/CalcClient.ml b/src/jaegertracing/thrift/tutorial/ocaml/CalcClient.ml
new file mode 100755
index 000000000..5a8467be2
--- /dev/null
+++ b/src/jaegertracing/thrift/tutorial/ocaml/CalcClient.ml
@@ -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();;