-
Notifications
You must be signed in to change notification settings - Fork 0
/
Worker.java
123 lines (118 loc) · 3.63 KB
/
Worker.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
import java.io.*;
import java.net.*;
import java.util.*;
public class Worker implements Runnable {
Socket sock;
Librarian mylib;
/**
* Constructor to just fill in the fields
* @param s Socket to connect to
*/
public Worker (Socket s){
sock = s;
ResourceBundle bundle = ResourceBundle.getBundle("javaconfig");
mylib = new Librarian(bundle, 0);
}
/**
* Method to run this thread of the worker. Reads in from the InputStream
*/
public void run(){
try{
InputStream inStream = sock.getInputStream();
OutputStream outStream = sock.getOutputStream();
Ingredients tempIn = new Ingredients();
while(true){
Message m = new Message(inStream);
if(m.type.equals("getFile")){
getFile(m);
}
if(m.type.equals("GET")){
m.myIngredients = tempIn;
System.out.println("################# OUR INGREDIENTS ###################");
System.out.println(tempIn.ingredientnames.size());
for(String s:tempIn.ingredientnames){
System.out.println("################# OUR INGREDIENTS ###################");
System.out.println(s);
}
handleGET(m);
}
if(m.type.equals("POST")){
if(m.requestedUrl.equals("/lookupproduct")){
handleGET(m);
}
else{
tempIn = m.myIngredients;
m.myIngredients = tempIn;
System.out.println("################# OUR INGREDIENTS ###################");
System.out.println(tempIn.ingredientnames.size());
for(String s:tempIn.ingredientnames){
System.out.println("################# OUR INGREDIENTS ###################");
System.out.println(s);
}
handleGET(m);
}
}
String endm = "END";
if(m.content.regionMatches(0,endm,0,3) || m.content.regionMatches(0,"EOT",0,3)){
sock.close();
break;
}
}
}catch (IOException e) {
System.out.println(e.getMessage());
}
}
public void handleGET(Message m){
try{
DataOutputStream outStream = new DataOutputStream(sock.getOutputStream());
Message m3 = new Message("GET","");
if(m.requestedUrl == "/getallingredients"){
m3.requestedUrl = m.requestedUrl;
m3.myIngredients=mylib.getAllIngredients();
m3.sendData(outStream);
}
else if(m.requestedUrl == "/lookupproduct"){
m3.requestedUrl = m.requestedUrl;
m3.type = "GET";
m3.myIngredients = mylib.searchIngredients(m.content);
m3.sendData(outStream);
}
else if(m.requestedUrl == "/getallrecipes"){
m3.requestedUrl = m.requestedUrl;
m3.myRecipes = mylib.getAllRecipes();
m3.sendData(outStream);
}
else {
m3.myRecipes=mylib.searchPotentialRecipes(m.myIngredients);
m3.sendData(outStream);
}
} catch(IOException e){
System.out.println(e.getMessage());
}
}
public void getFile(Message m){
try{
OutputStream outStream = sock.getOutputStream();
File testFile = new File("files/" + m.content);
FileInputStream fromLocalFile = new FileInputStream(testFile);
byte[] fileContent = new byte[m.MAXBUFF];
int tFileLength;
while((tFileLength = fromLocalFile.read(fileContent)) != -1){
Message m3 = new Message("byteData", String.valueOf(tFileLength));
m3.send(outStream);
outStream.write(fileContent,0,tFileLength);
outStream.flush();
}
fromLocalFile.close();
} catch (IOException e) {
try{
OutputStream outStream = sock.getOutputStream();
Message m4 = new Message("NACK","");
m4.send(outStream);
} catch(IOException e2) {
System.out.println(e2.getMessage());
}
System.out.println(e.getMessage());
}
}
}