Package edu.brown.protorpc

Source Code of edu.brown.protorpc.CounterExample

package edu.brown.protorpc;

import java.net.InetSocketAddress;

import ca.evanjones.protorpc.Counter.CounterService;
import ca.evanjones.protorpc.Counter.GetRequest;
import ca.evanjones.protorpc.Counter.Value;

import com.google.protobuf.RpcCallback;
import com.google.protobuf.RpcController;

class CounterExample extends CounterService {
    private int counter;

    @Override
    public void add(RpcController controller, Value request,
            RpcCallback<Value> done) {
        counter += request.getValue();
        System.out.println("add " + request.getValue() + " = " + counter);
        done.run(Value.newBuilder().setValue(counter).build());
    }

    @Override
    public void get(RpcController controller, GetRequest request,
            RpcCallback<Value> done) {
        System.out.println("get = " + counter);
        done.run(Value.newBuilder().setValue(counter).build());
    }

    public static void server(int port) {
        NIOEventLoop eventLoop = new NIOEventLoop();
        ProtoServer server = new ProtoServer(eventLoop);
        server.bind(port);
        CounterExample counter = new CounterExample();
        server.register(counter);
        eventLoop.setExitOnSigInt(true);
        eventLoop.run();
    }

    public static void client(String host, int port, boolean isGet, int increment) {
        // Set up the connection to the server
        NIOEventLoop eventLoop = new NIOEventLoop();
        ProtoRpcChannel[] channels = ProtoRpcChannel.connectParallel(eventLoop,
                new InetSocketAddress[] {new InetSocketAddress(host, port)});
//        ProtoRpcChannel channel = new ProtoRpcChannel(eventLoop, new InetSocketAddress(host, port));
        CounterService stub = CounterService.newStub(channels[0]);
        ProtoRpcController rpc = new ProtoRpcController();
        StoreResultCallback<Value> callback = new StoreResultCallback<Value>();

        // Build the request
        if (isGet) {
            stub.get(rpc, GetRequest.getDefaultInstance(), callback);
            rpc.block();
            System.out.println("get = " + callback.getResult().getValue());
        } else {
            stub.add(rpc, Value.newBuilder().setValue(increment).build(), callback);
            rpc.block();
            System.out.println("counter + " + increment + " = " + callback.getResult().getValue());
        }
    }

    public static void main(String[] args) {
        if (args.length == 1) {
            server(Integer.parseInt(args[0]));
        } else if (args.length == 2 || args.length == 3) {
            boolean isGet = args.length == 2;
            int increment = 0;
            if (!isGet) increment = Integer.parseInt(args[2]);
            client(args[0], Integer.parseInt(args[1]), isGet, increment);
        } else {
            System.err.println("[port]|[host port]|[host port increment]");
            System.exit(1);
        }
    }
}
TOP

Related Classes of edu.brown.protorpc.CounterExample

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.