#!/usr/bin/env ruby # frozen_string_literal: true # 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 # # https://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. require 'socket' require 'avro' MAIL_PROTOCOL_JSON = <<-JSON {"namespace": "example.proto", "protocol": "Mail", "types": [ {"name": "Message", "type": "record", "fields": [ {"name": "to", "type": "string"}, {"name": "from", "type": "string"}, {"name": "body", "type": "string"} ] } ], "messages": { "send": { "request": [{"name": "message", "type": "Message"}], "response": "string" }, "replay": { "request": [], "response": "string" } } } JSON MAIL_PROTOCOL = Avro::Protocol.parse(MAIL_PROTOCOL_JSON) def make_requestor(server_address, port, protocol) sock = TCPSocket.new(server_address, port) client = Avro::IPC::SocketTransport.new(sock) Avro::IPC::Requestor.new(protocol, client) end if $0 == __FILE__ if ![3, 4].include?(ARGV.length) raise "Usage: []" end # client code - attach to the server and send a message # fill in the Message record message = { 'to' => ARGV[0], 'from' => ARGV[1], 'body' => ARGV[2] } num_messages = (ARGV[3] || 1).to_i # build the parameters for the request params = {'message' => message} # send the requests and print the result num_messages.times do requestor = make_requestor('localhost', 9090, MAIL_PROTOCOL) result = requestor.request('send', params) puts("Result: " + result) end # try out a replay message requestor = make_requestor('localhost', 9090, MAIL_PROTOCOL) result = requestor.request('replay', {}) puts("Replay Result: " + result) end