diff --git a/cs654/proj1/KaZaServer.java b/cs654/proj1/KaZaServer.java index 8d3364f..ef232da 100644 --- a/cs654/proj1/KaZaServer.java +++ b/cs654/proj1/KaZaServer.java @@ -78,7 +78,8 @@ public class KaZaServer implements Runnable BufferedReader br = new BufferedReader( new InputStreamReader( m_socket.getInputStream())); - DataOutputStream os = new DataOutputStream(socket.getOutputStream); + DataOutputStream os = new DataOutputStream( + m_socket.getOutputStream()); /* loop processing client messages */ for (;;) @@ -90,7 +91,7 @@ public class KaZaServer implements Runnable continue; String opCode = tokens.nextToken(); - opCode.toUpperCase(); + opCode = opCode.toUpperCase(); if (opCode.equals("HELO")) { /* user is announcing his or her username */ @@ -119,7 +120,8 @@ public class KaZaServer implements Runnable { String query = tokens.nextToken(); String searchResults = performSearch(depth, query); - os.write(searchResults.getBytes(); + os.writeBytes(searchResults); + os.writeBytes(".\n"); } } } @@ -131,6 +133,7 @@ public class KaZaServer implements Runnable private String performSearch(int depth, String query) { String results = ""; + String querylc = query.toLowerCase(); if (depth > 0) { synchronized (m_peerGroupLeaders) @@ -145,23 +148,53 @@ public class KaZaServer implements Runnable } /* now search my own file list */ + synchronized (m_clientData) + { + Set clients = m_clientData.keySet(); + for (String clientIP : clients) + { + HashMap files = m_clientData.get(clientIP).files; + Set clientFiles = files.keySet(); + for (String fileName : clientFiles) + { + String fnamelc = fileName.toLowerCase(); + if ( (fnamelc.indexOf(querylc) >= 0) || + (files.get(fileName).toLowerCase().indexOf(querylc) >= 0) ) + { + results += clientIP + "|" + + m_clientData.get(clientIP).userName + "|" + + fileName + "|" + + files.get(fileName) + "\n"; + } + } + } + } + return results; } - private String getSearchResultsFromPeerGroupLeader(Socket s, int depth, String query) + private String getSearchResultsFromPeerGroupLeader(Socket s, int depth, + String query) { - BufferedReader br = new BufferedReader( - new InputStreamReader( - s.getInputStream())); - DataOutputStream os = new DataOutputStream(s.getOutputStream()); - - os.write("SRCH " + depth + " " + query); String searchResults = ""; - for (;;) + try { - String inLine = br.readLine(); - if (inLine.equals(".")) - break; - searchResults += inLine + "\n"; + BufferedReader br = new BufferedReader( + new InputStreamReader( + s.getInputStream())); + DataOutputStream os = new DataOutputStream(s.getOutputStream()); + + os.writeBytes("SRCH " + depth + " " + query); + for (;;) + { + String inLine = br.readLine(); + if (inLine.equals(".")) + break; + searchResults += inLine + "\n"; + } + } + catch (Exception e) + { + return ""; } return searchResults; }