Skip to content

Commit a58d44e

Browse files
committed
start implementing a command line user interface
1 parent c84b940 commit a58d44e

File tree

3 files changed

+244
-193
lines changed

3 files changed

+244
-193
lines changed

src/net/sharksystem/cmdline/CmdLineUI.java

Lines changed: 31 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
package net.sharksystem.cmdline;
22

3-
import net.sharksystem.util.localloop.TCPChannel;
4-
import sun.rmi.transport.tcp.TCPConnection;
5-
63
import java.io.*;
74
import java.util.HashMap;
85
import java.util.Map;
@@ -55,6 +52,12 @@ public void printUsage() {
5552
b.append(OPEN);
5653
b.append(".. open socket");
5754
b.append("\n");
55+
b.append(LIST);
56+
b.append(".. list open connections");
57+
b.append("\n");
58+
b.append(KILL);
59+
b.append(".. kill an open connection");
60+
b.append("\n");
5861
b.append(EXIT);
5962
b.append(".. exit");
6063

@@ -86,6 +89,7 @@ public void printUsage(String cmdString, String comment) {
8689
out.println("example: " + KILL + "localhost:7070");
8790
out.println("kills channel named localhost:7070");
8891
out.println("channel names are produced by using list");
92+
out.println(KILL + "all .. kills all open connections");
8993
break;
9094
}
9195

@@ -96,7 +100,6 @@ public void runGame() {
96100

97101
boolean again = true;
98102
while(again) {
99-
System.out.println("TODO: do not use that TCPChannel Class");
100103

101104
try {
102105
// read user input
@@ -131,6 +134,7 @@ public void runGame() {
131134
this.doKill(parameterString); break;
132135
case "q": // convenience
133136
case EXIT:
137+
this.doKill("all");
134138
again = false; break; // end loop
135139

136140
default: this.consoleOutput.println("unknown command:" +
@@ -148,6 +152,7 @@ public void runGame() {
148152
private Map<String, TCPChannel> openConnections = new HashMap<>();
149153

150154
private void startChannel(String name, TCPChannel channel) {
155+
channel.setWaitPeriod(1000*30); // 30 seconds
151156
channel.start();
152157
this.openConnections.put(name, channel);
153158
}
@@ -194,25 +199,31 @@ private void doList() {
194199
private void doKill(String parameterString) {
195200
StringTokenizer st = new StringTokenizer(parameterString);
196201

197-
String channelName = st.nextToken();
198-
TCPChannel channel = this.openConnections.remove(channelName);
199-
if(channel == null) {
200-
System.err.println("channel does not exist: " + channelName);
201-
return;
202-
}
203-
System.out.println("close channel");
204-
InputStream inputStream = null;
205202
try {
206-
inputStream = channel.getInputStream();
207-
inputStream.close();
208-
channel.getOutputStream().close();
203+
String channelName = st.nextToken();
204+
if(channelName.equalsIgnoreCase("all")) {
205+
System.out.println("kill all open channels..");
206+
for(TCPChannel channel : this.openConnections.values()) {
207+
channel.kill();
208+
}
209+
this.openConnections = new HashMap<>();
210+
System.out.println(".. done");
211+
} else {
212+
213+
TCPChannel channel = this.openConnections.remove(channelName);
214+
if (channel == null) {
215+
System.err.println("channel does not exist: " + channelName);
216+
return;
217+
}
218+
System.out.println("kill channel");
219+
channel.kill();
220+
221+
System.out.println(".. done");
222+
}
209223
}
210-
catch(IOException e) {
211-
System.out.println("no open stream yet - kill anyway");
212-
channel.interrupt();
224+
catch(RuntimeException e) {
225+
this.printUsage(KILL, e.getLocalizedMessage());
213226
}
214-
215-
System.out.println(".. done");
216227
}
217228
}
218229

0 commit comments

Comments
 (0)