Package org.apache.jmeter.util

Source Code of org.apache.jmeter.util.BeanShellClient$SockRead

/*
* 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.
*
*/

package org.apache.jmeter.util;

import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;


/**
* Implements a client that can talk to the JMeter BeanShell server.
*/
public class BeanShellClient {

    private static final int MINARGS = 3;

    public static void main(String [] args) throws Exception{
        if (args.length < MINARGS){
            System.out.println("Please provide "+MINARGS+" or more arguments:");
            System.out.println("serverhost serverport filename [arg1 arg2 ...]");
            System.out.println("e.g. ");
            System.out.println("localhost 9000 extras/remote.bsh apple blake 7");
            System.exit(1);
        }
        String host=args[0];
        String portString = args[1];
        String file=args[2];

        int port=Integer.parseInt(portString)+1;// convert to telnet port

        System.out.println("Connecting to BSH server on "+host+":"+portString);

        Socket sock = new Socket(host,port);
        InputStream is = sock.getInputStream();

        OutputStream os = sock.getOutputStream();

        InputStreamReader fis = new FileReader(file);

        new SockRead(is).start();

        sendLine("bsh.prompt=\"\";",os);// Prompt is unnecessary

        sendLine("String [] args={",os);
        for (int i=MINARGS; i<args.length;i++){
            sendLine("\""+args[i]+"\",\n",os);
        }
        sendLine("};",os);

        int b;
        while ((b=fis.read()) != -1){
            os.write(b);
        }
        sendLine("bsh.prompt=\"bsh % \";",os);// Reset for other users
        os.flush();
        sock.shutdownOutput(); // Tell server that we are done
    }

    private static void sendLine( String line, OutputStream outPipe )
    throws IOException
    {
        outPipe.write( line.getBytes() ); // TODO - charset?
        outPipe.flush();
    }

    private static class SockRead extends Thread {

        private final InputStream is;

        public SockRead(InputStream _is) {
            this.is=_is;
            //this.setDaemon(true);
        }

        @Override
        public void run(){
            System.out.println("Reading responses from server ...");
            int x = 0;
            try {
                while ((x = is.read()) > -1) {
                    char c = (char) x;
                    System.out.print(c);
                }
            } catch (IOException e) {
            } finally {
                System.out.println("... disconnected from server.");
                try {
                    is.close();
                } catch (IOException e) {
                }
            }

        }

    }
}
TOP

Related Classes of org.apache.jmeter.util.BeanShellClient$SockRead

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.