root / src / TestApp.java
History | View | Annotate | Download (5.15 KB)
1 |
import java.io.IOException; |
---|---|
2 |
import java.net.*; |
3 |
import java.util.Scanner; |
4 |
|
5 |
import static utils.Utils.BUFFER_SIZE; |
6 |
|
7 |
//TODO: parse args for reclaim and delete not fully functional
|
8 |
//grupo 11
|
9 |
|
10 |
public class TestApp { |
11 |
|
12 |
private static String hostname = "localhost"; |
13 |
private static int portNumber; |
14 |
private static String protocolRequest; |
15 |
private static String filePath; |
16 |
private static int replicationDegree; |
17 |
|
18 |
|
19 |
public static void main(String[] args) throws SocketException, UnknownHostException { |
20 |
mainMenu(); |
21 |
} |
22 |
|
23 |
private static void mainMenu() throws SocketException, UnknownHostException { |
24 |
|
25 |
System.out.println("1- Backup a file"); |
26 |
System.out.println("2- Restore a file"); |
27 |
System.out.println("0- Exit"); |
28 |
|
29 |
|
30 |
Scanner in = new Scanner(System.in); |
31 |
int option = in.nextInt();
|
32 |
|
33 |
switch(option){
|
34 |
case 0: |
35 |
System.out.println("exiting application..."); |
36 |
break;
|
37 |
case 1: |
38 |
backupMenu(); |
39 |
break;
|
40 |
case 2: |
41 |
restoreMenu(); |
42 |
break;
|
43 |
|
44 |
} |
45 |
} |
46 |
|
47 |
private static void restoreMenu() throws SocketException, UnknownHostException { |
48 |
String[] args = new String[4]; |
49 |
|
50 |
System.out.println("Please insert the peer port number which you want to send the request"); |
51 |
|
52 |
Scanner in = new Scanner(System.in); |
53 |
String portnumber = in.nextLine();
|
54 |
|
55 |
args[0] = portnumber;
|
56 |
|
57 |
args[1] = "RESTORE"; |
58 |
|
59 |
System.out.println("Specify the file name you want to restore "); |
60 |
|
61 |
String filename = in.nextLine();
|
62 |
|
63 |
args[2] = filename;
|
64 |
|
65 |
if(!parseArgs(args)) return; |
66 |
|
67 |
sendRequest(args); |
68 |
|
69 |
|
70 |
} |
71 |
|
72 |
private static void backupMenu() throws SocketException, UnknownHostException { |
73 |
String[] args = new String[4]; |
74 |
|
75 |
System.out.println("Please insert the peer port number which you want to send the request"); |
76 |
|
77 |
Scanner in = new Scanner(System.in); |
78 |
String portnumber = in.nextLine();
|
79 |
|
80 |
args[0] = portnumber;
|
81 |
|
82 |
args[1] = "BACKUP"; |
83 |
|
84 |
System.out.println("Specify the file name you want to backup (must be inside test folder) "); |
85 |
|
86 |
String filename = in.nextLine();
|
87 |
|
88 |
args[2] = filename;
|
89 |
|
90 |
System.out.println("Now enter the replication degree"); |
91 |
String replicD = in.nextLine();
|
92 |
|
93 |
args[3] = replicD;
|
94 |
|
95 |
if(!parseArgs(args)) return; |
96 |
|
97 |
sendRequest(args); |
98 |
|
99 |
} |
100 |
|
101 |
private static void sendRequest(String[] args) throws SocketException, UnknownHostException { |
102 |
DatagramSocket socket = new DatagramSocket(); |
103 |
byte[] buffer; |
104 |
String message = ""; |
105 |
|
106 |
for(int i = 1; i < args.length; i++){ |
107 |
if(i == args.length -1){ |
108 |
message += args[i]; |
109 |
break;
|
110 |
} |
111 |
message += args[i] + " ";
|
112 |
} |
113 |
|
114 |
buffer = message.getBytes(); |
115 |
|
116 |
InetAddress address = InetAddress.getByName(hostname); |
117 |
DatagramPacket packet = new DatagramPacket(buffer, buffer.length, address, portNumber); |
118 |
|
119 |
try {
|
120 |
socket.send(packet); |
121 |
} catch (IOException e) { |
122 |
e.printStackTrace(); |
123 |
} |
124 |
|
125 |
buffer = new byte[BUFFER_SIZE]; |
126 |
packet = new DatagramPacket(buffer, buffer.length); |
127 |
|
128 |
//
|
129 |
try {
|
130 |
socket.receive(packet); |
131 |
} catch (IOException e) { |
132 |
e.printStackTrace(); |
133 |
} |
134 |
|
135 |
String answer = new String(packet.getData(), 0, packet.getLength()); |
136 |
System.out.println("Peer said: " + answer); |
137 |
socket.close(); |
138 |
|
139 |
//after request sent and done, come back to main menu
|
140 |
mainMenu(); |
141 |
} |
142 |
|
143 |
private static boolean parseArgs(String[] args) { |
144 |
if(args == null || args.length < 3) { |
145 |
System.out.println("Usage: java TestApp <peer_ap> <sub_protocol> <opnd_1> <opnd_2>"); |
146 |
return false; |
147 |
} |
148 |
String[] peer_ap = args[0].split(":"); |
149 |
|
150 |
if(peer_ap.length == 1) { //user just gave the port number |
151 |
portNumber = Integer.parseInt(peer_ap[0]); |
152 |
} |
153 |
else if(peer_ap.length == 2) { |
154 |
hostname = peer_ap[0];
|
155 |
portNumber = Integer.parseInt(peer_ap[1]); |
156 |
} |
157 |
else {
|
158 |
System.out.println("Usage: java TestApp <peer_ap> <sub_protocol> <opnd_1> <opnd_2>"); |
159 |
return false; |
160 |
} |
161 |
|
162 |
switch(args[1]) { |
163 |
case "BACKUP": |
164 |
protocolRequest = "BACKUP";
|
165 |
filePath = args[2];
|
166 |
if(args[3] == null){ |
167 |
System.out.println("In backup protocol, you have to specify also the replication degree"); |
168 |
return false; |
169 |
} |
170 |
replicationDegree = Integer.parseInt(args[3]); |
171 |
break;
|
172 |
case "RESTORE": |
173 |
protocolRequest = "RESTORE";
|
174 |
filePath = args[2];
|
175 |
break;
|
176 |
case "DELETE": |
177 |
protocolRequest = "DELETE";
|
178 |
filePath = args[2];
|
179 |
break;
|
180 |
case "RECLAIM": |
181 |
protocolRequest = "RECLAIM";
|
182 |
break;
|
183 |
default: return false; |
184 |
} |
185 |
|
186 |
|
187 |
|
188 |
|
189 |
return true; |
190 |
} |
191 |
|
192 |
} |
193 |
|