Skip to content

Commit 8f7be3f

Browse files
Add a fully parameterized CLI client
1 parent 953f9fa commit 8f7be3f

File tree

2 files changed

+207
-137
lines changed

2 files changed

+207
-137
lines changed
Lines changed: 205 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,205 @@
1+
package de.dhbw.ravensburg.verteiltesysteme.client;
2+
3+
4+
import de.dhbw.ravensburg.verteiltesysteme.de.dhbw.ravensburg.verteiltesysteme.rpc.SamplingMessageGrpc;
5+
import de.dhbw.ravensburg.verteiltesysteme.de.dhbw.ravensburg.verteiltesysteme.rpc.SamplingMessageGrpcService;
6+
import io.grpc.ManagedChannel;
7+
import io.grpc.ManagedChannelBuilder;
8+
import lombok.extern.slf4j.Slf4j;
9+
import org.apache.commons.cli.*;
10+
11+
@Slf4j
12+
public class CommandLineClient {
13+
14+
private Options options;
15+
private HelpFormatter helpFormatter;
16+
17+
18+
CommandLineClient() {
19+
options = new Options();
20+
21+
options.addOption(Option.builder("n")
22+
.longOpt("name")
23+
.hasArg(true)
24+
.required(true)
25+
.desc("message name")
26+
.build());
27+
28+
options.addOption(Option.builder("c")
29+
.longOpt("content")
30+
.hasArg(true)
31+
.desc("message content")
32+
.build());
33+
34+
options.addOption(Option.builder("d")
35+
.longOpt("duration")
36+
.hasArg(true)
37+
.desc("duration of the message")
38+
.build());
39+
40+
options.addOption(Option.builder("m")
41+
.longOpt("method")
42+
.hasArg(true)
43+
.required(true)
44+
.desc("client method to be used")
45+
.build());
46+
47+
options.addOption(Option.builder("a")
48+
.longOpt("address")
49+
.hasArg(true)
50+
.required(true)
51+
.desc("sampling message server address")
52+
.build());
53+
54+
options.addOption(Option.builder("p")
55+
.longOpt("port")
56+
.hasArg(true)
57+
.required(true)
58+
.desc("sampling message server port")
59+
.build());
60+
}
61+
62+
public void run(String[] args) throws Exception {
63+
CommandLineParser commandLineParser = new DefaultParser();
64+
helpFormatter = new HelpFormatter();
65+
CommandLine commandLine;
66+
67+
try {
68+
commandLine = commandLineParser.parse(options, args);
69+
} catch (ParseException e) {
70+
exitWithError(e.getMessage());
71+
return;
72+
}
73+
74+
final String address = commandLine.getOptionValue("address");
75+
final int port = Integer.parseInt(commandLine.getOptionValue("port"));
76+
77+
final int method = Integer.parseInt(commandLine.getOptionValue("method"));
78+
79+
ManagedChannelBuilder<?> managedChannelBuilder = ManagedChannelBuilder.forAddress(address, port).usePlaintext();
80+
ManagedChannel managedChannel = managedChannelBuilder.build();
81+
SamplingMessageGrpc.SamplingMessageStub samplingMessageStub = SamplingMessageGrpc.newStub(managedChannel);
82+
SamplingMessageGrpc.SamplingMessageBlockingStub samplingMessageBlockingStub = SamplingMessageGrpc.newBlockingStub(managedChannel);
83+
84+
if (method == 0) {
85+
createSamplingMessage(commandLine, samplingMessageBlockingStub);
86+
} else if (method == 1) {
87+
writeSamplingMessage(commandLine, samplingMessageBlockingStub);
88+
} else if (method == 2) {
89+
clearSamplingMessage(commandLine, samplingMessageBlockingStub);
90+
} else if (method == 3) {
91+
readSamplingMessage(commandLine, samplingMessageBlockingStub);
92+
} else if (method == 4) {
93+
getSamplingMessageStatus(commandLine, samplingMessageBlockingStub);
94+
} else if (method == 5) {
95+
deleteSamplingMessage(commandLine, samplingMessageBlockingStub);
96+
} else {
97+
exitWithError("Unknown method: " + method);
98+
}
99+
100+
managedChannel.shutdown();
101+
}
102+
103+
private void createSamplingMessage(CommandLine commandLine, SamplingMessageGrpc.SamplingMessageBlockingStub samplingMessageBlockingStub) {
104+
String name = commandLine.getOptionValue("name");
105+
long duration;
106+
107+
if (commandLine.getOptionValue("duration") == null) {
108+
exitWithError("Missing argument -d: no sampling message duration given");
109+
// only required to have the IDE not complain about a possibly not initialized duration variable
110+
return;
111+
} else {
112+
duration = Long.parseLong(commandLine.getOptionValue("duration"));
113+
}
114+
115+
SamplingMessageGrpcService.CreateSamplingMessageRequest request =
116+
SamplingMessageGrpcService.CreateSamplingMessageRequest.newBuilder()
117+
.setMessageName(name)
118+
.setLifetimeInSec(duration)
119+
.build();
120+
log.info("creating sampling message " + request.getMessageName());
121+
122+
SamplingMessageGrpcService.CreateSamplingMessageResponse response = samplingMessageBlockingStub.createSamplingMessage(request);
123+
log.info("createSamplingMessageResponse Status Code: " + response.getStatusCode().name());
124+
}
125+
126+
private void writeSamplingMessage(CommandLine commandLine, SamplingMessageGrpc.SamplingMessageBlockingStub samplingMessageBlockingStub) {
127+
String name = commandLine.getOptionValue("name");
128+
String content = commandLine.getOptionValue("content");
129+
130+
if (content == null) {
131+
exitWithError("Missing argument -c: no sampling message content given");
132+
}
133+
134+
SamplingMessageGrpcService.WriteSamplingMessageRequest request =
135+
SamplingMessageGrpcService.WriteSamplingMessageRequest.newBuilder()
136+
.setMessageName(name)
137+
.setMessageContent(content)
138+
.build();
139+
log.info("writing sampling message " + request.getMessageName());
140+
141+
SamplingMessageGrpcService.WriteSamplingMessageResponse response = samplingMessageBlockingStub.writeSamplingMessage(request);
142+
log.info("writeSamplingMessageResponse Status Code: " + response.getStatusCode().name());
143+
}
144+
145+
private void clearSamplingMessage(CommandLine commandLine, SamplingMessageGrpc.SamplingMessageBlockingStub samplingMessageBlockingStub) {
146+
String name = commandLine.getOptionValue("name");
147+
SamplingMessageGrpcService.ClearSamplingMessageRequest request =
148+
SamplingMessageGrpcService.ClearSamplingMessageRequest.newBuilder()
149+
.setMessageName(name)
150+
.build();
151+
log.info("clearing sampling message " + request.getMessageName());
152+
153+
SamplingMessageGrpcService.ClearSamplingMessageResponse response = samplingMessageBlockingStub.clearSamplingMessage(request);
154+
log.info("writeSamplingMessageResponse Status Code: " + response.getStatusCode().name());
155+
}
156+
157+
private void readSamplingMessage(CommandLine commandLine, SamplingMessageGrpc.SamplingMessageBlockingStub samplingMessageBlockingStub) {
158+
String name = commandLine.getOptionValue("name");
159+
160+
SamplingMessageGrpcService.ReadSamplingMessageRequest request =
161+
SamplingMessageGrpcService.ReadSamplingMessageRequest.newBuilder()
162+
.setMessageName(name)
163+
.build();
164+
log.info("reading sampling message " + request.getMessageName());
165+
166+
SamplingMessageGrpcService.ReadSamplingMessageResponse response = samplingMessageBlockingStub.readSamplingMessage(request);
167+
log.info("readSamplingMessageResponse Status Code: " + response.getStatusCode().name());
168+
log.info("readSamplingMessageResponse Content: " + response.getMessageContent());
169+
log.info("readSamplingMessageResponse Valid: " + response.getMessageIsValid());
170+
}
171+
172+
private void getSamplingMessageStatus(CommandLine commandLine, SamplingMessageGrpc.SamplingMessageBlockingStub samplingMessageBlockingStub) {
173+
String name = commandLine.getOptionValue("name");
174+
175+
SamplingMessageGrpcService.GetSamplingMessageStatusRequest request =
176+
SamplingMessageGrpcService.GetSamplingMessageStatusRequest.newBuilder()
177+
.setMessageName(name)
178+
.build();
179+
log.info("getting status code for message " + request.getMessageName());
180+
181+
SamplingMessageGrpcService.GetSamplingMessageStatusResponse response = samplingMessageBlockingStub.getSamplingMessageStatus(request);
182+
log.info("getSamplingMessageStatusResponse Status Code: " + response.getStatusCode().name());
183+
}
184+
185+
private void deleteSamplingMessage(CommandLine commandLine, SamplingMessageGrpc.SamplingMessageBlockingStub samplingMessageBlockingStub) {
186+
String name = commandLine.getOptionValue("name");
187+
188+
SamplingMessageGrpcService.DeleteSamplingMessageRequest request =
189+
SamplingMessageGrpcService.DeleteSamplingMessageRequest.newBuilder()
190+
.setMessageName(name)
191+
.build();
192+
log.info("deleting status code for message " + request.getMessageName());
193+
194+
SamplingMessageGrpcService.DeleteSamplingMessageResponse response = samplingMessageBlockingStub.deleteSamplingMessage(request);
195+
log.info("getSamplingMessageStatusResponse Status Code: " + response.getStatusCode().name());
196+
}
197+
198+
199+
200+
private void exitWithError(String errorMessage) {
201+
System.out.println(errorMessage);
202+
helpFormatter.printHelp("sampling-message-client", options);
203+
System.exit(1);
204+
}
205+
}
Lines changed: 2 additions & 137 deletions
Original file line numberDiff line numberDiff line change
@@ -1,143 +1,8 @@
11
package de.dhbw.ravensburg.verteiltesysteme.client;
22

3-
import de.dhbw.ravensburg.verteiltesysteme.de.dhbw.ravensburg.verteiltesysteme.rpc.SamplingMessageGrpc;
4-
import de.dhbw.ravensburg.verteiltesysteme.de.dhbw.ravensburg.verteiltesysteme.rpc.SamplingMessageGrpcService;
5-
import io.grpc.ManagedChannel;
6-
import io.grpc.ManagedChannelBuilder;
7-
import lombok.extern.slf4j.Slf4j;
8-
import org.apache.commons.cli.*;
9-
10-
@Slf4j
113
public class Main {
124

13-
//TODO; implement Apache CLI https://stackoverflow.com/a/367714/876724
14-
public static void main(String[] args) throws InterruptedException {
15-
//TODO; parametrize server addr & server tcp port
16-
17-
ManagedChannelBuilder<?> managedChannelBuilder = ManagedChannelBuilder.forAddress("127.0.0.1", 8080).usePlaintext();
18-
ManagedChannel managedChannel = managedChannelBuilder.build();
19-
SamplingMessageGrpc.SamplingMessageStub samplingMessageStub = SamplingMessageGrpc.newStub(managedChannel);
20-
SamplingMessageGrpc.SamplingMessageBlockingStub samplingMessageBlockingStub = SamplingMessageGrpc.newBlockingStub(managedChannel);
21-
22-
Options options = new Options();
23-
24-
Option name = new Option("n", "name", true, "message name");
25-
name.setRequired(true);
26-
options.addOption(name);
27-
28-
Option content = new Option("c", "content", true, "message content");
29-
content.setRequired(true);
30-
options.addOption(content);
31-
32-
Option lifetime = new Option("d", "duration", true, "duration of the message");
33-
lifetime.setRequired(true);
34-
options.addOption(lifetime);
35-
36-
37-
CommandLineParser commandLineParser = new DefaultParser();
38-
HelpFormatter helpFormatter = new HelpFormatter();
39-
CommandLine commandLine;
40-
41-
try {
42-
commandLine = commandLineParser.parse(options, args);
43-
} catch (ParseException e) {
44-
System.out.println(e.getMessage());
45-
helpFormatter.printHelp("utility-name", options);
46-
47-
System.exit(1);
48-
return;
49-
}
50-
51-
final String name_value = commandLine.getOptionValue("name");
52-
final String content_value = commandLine.getOptionValue("content");
53-
final long lifetime_value = Long.parseLong(commandLine.getOptionValue("duration"));
54-
55-
SamplingMessageGrpcService.CreateSamplingMessageRequest createSamplingMessageRequest =
56-
SamplingMessageGrpcService.CreateSamplingMessageRequest.newBuilder()
57-
.setMessageName(name_value)
58-
.setLifetimeInSec(lifetime_value)
59-
.build();
60-
61-
SamplingMessageGrpcService.WriteSamplingMessageRequest writeSamplingMessageRequest =
62-
SamplingMessageGrpcService.WriteSamplingMessageRequest.newBuilder()
63-
.setMessageName(name_value)
64-
.setMessageContent(content_value)
65-
.build();
66-
67-
SamplingMessageGrpcService.ReadSamplingMessageRequest readSamplingMessageRequest =
68-
SamplingMessageGrpcService.ReadSamplingMessageRequest.newBuilder()
69-
.setMessageName(name_value)
70-
.build();
71-
72-
73-
//SamplingMessageGrpcService.WriteSamplingMessageRequest writeSamplingMessageRequest = SamplingMessageGrpcService.WriteSamplingMessageRequest.newBuilder().setMessageContent("BLA").setMessageName("BLA").build();
74-
/**
75-
samplingMessageStub.writeSamplingMessage(writeSamplingMessageRequest, new StreamObserver<SamplingMessageGrpcService.WriteSamplingMessageResponse>() {
76-
@Override public void onNext(SamplingMessageGrpcService.WriteSamplingMessageResponse writeSamplingMessageResponse) {
77-
log.info(writeSamplingMessageResponse.toString());
78-
}
79-
80-
@Override public void onError(Throwable throwable) {
81-
82-
}
83-
84-
@Override public void onCompleted() {
85-
log.info("DONE writeSamplingMessage");
86-
}
87-
});
88-
try {
89-
managedChannel.awaitTermination(10, TimeUnit.SECONDS);
90-
} catch (InterruptedException e) {
91-
e.printStackTrace();
92-
}**/
93-
/*System.out.println(System.currentTimeMillis());
94-
for(int i = 0; i < 10; ++i){
95-
samplingMessageStub.createSamplingMessage(createSamplingMessageRequest, new StreamObserver<SamplingMessageGrpcService.CreateSamplingMessageResponse>() {
96-
@Override public void onNext(SamplingMessageGrpcService.CreateSamplingMessageResponse createSamplingMessageResponse) {
97-
log.info(createSamplingMessageResponse.getStatusCode().name());
98-
System.out.println(System.currentTimeMillis());
99-
}
100-
101-
@Override public void onError(Throwable throwable) {
102-
log.error(throwable.getMessage());
103-
}
104-
105-
@Override public void onCompleted() {
106-
}
107-
});
108-
}
109-
Thread.sleep(200000);
110-
try {
111-
managedChannel.awaitTermination(100, TimeUnit.SECONDS);
112-
} catch (InterruptedException e) {
113-
e.printStackTrace();
114-
}
115-
managedChannel.shutdown();
116-
System.exit(0);*/
117-
118-
SamplingMessageGrpcService.CreateSamplingMessageResponse createSamplingMessageResponse = samplingMessageBlockingStub.createSamplingMessage(createSamplingMessageRequest);
119-
log.info("createSamplingMessageResponse Status Code: " + createSamplingMessageResponse.getStatusCode().name());
120-
121-
SamplingMessageGrpcService.WriteSamplingMessageResponse writeSamplingMessageResponse = samplingMessageBlockingStub.writeSamplingMessage(writeSamplingMessageRequest);
122-
log.info("writeSamplingMessageResponse Status Code: " + writeSamplingMessageResponse.getStatusCode().name());
123-
124-
125-
SamplingMessageGrpcService.ReadSamplingMessageResponse readSamplingMessageResponse = samplingMessageBlockingStub.readSamplingMessage(readSamplingMessageRequest);
126-
log.info("readSamplingMessageResponse Status Code: " + readSamplingMessageResponse.getStatusCode().name());
127-
log.info("readSamplingMessageResponse Content: " + readSamplingMessageResponse.getMessageContent());
128-
log.info("readSamplingMessageResponse Valid: " + readSamplingMessageResponse.getMessageIsValid());
129-
130-
131-
SamplingMessageGrpcService.CreateSamplingMessageResponse createDuplicateSamplingMessageResponse = samplingMessageBlockingStub.createSamplingMessage(createSamplingMessageRequest);
132-
log.info("createSamplingMessageResponse Status Code: " + createDuplicateSamplingMessageResponse.getStatusCode().name());
133-
134-
Thread.sleep(lifetime_value * 1000);
135-
136-
SamplingMessageGrpcService.ReadSamplingMessageResponse readSamplingMessageResponse3 = samplingMessageBlockingStub.readSamplingMessage(readSamplingMessageRequest);
137-
log.info("readSamplingMessageResponse Status Code: " + readSamplingMessageResponse3.getStatusCode().name());
138-
log.info("readSamplingMessageResponse Content: " + readSamplingMessageResponse3.getMessageContent());
139-
log.info("readSamplingMessageResponse Valid: " + readSamplingMessageResponse3.getMessageIsValid());
140-
141-
managedChannel.shutdown();
5+
public static void main(String[] args) throws Exception {
6+
new CommandLineClient().run(args);
1427
}
1438
}

0 commit comments

Comments
 (0)