11package net .sharksystem .cmdline ;
22
3- import net .sharksystem .util .localloop .TCPChannel ;
4- import sun .rmi .transport .tcp .TCPConnection ;
5-
63import java .io .*;
74import java .util .HashMap ;
85import 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