| (* |
| 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();; |