diff --git a/cs654/proj1/KaZaClient.java b/cs654/proj1/KaZaClient.java index ecbb253..e01410e 100644 --- a/cs654/proj1/KaZaClient.java +++ b/cs654/proj1/KaZaClient.java @@ -10,6 +10,7 @@ public class KaZaClient private String m_sharedFolder; private boolean m_connected = false; private Socket m_socket; + private DataOutputStream m_os; public KaZaClient(String userName, int kbps, String sharedFolder, String server) @@ -18,10 +19,9 @@ public class KaZaClient try { m_socket = new Socket(server, KaZaServer.LISTEN_PORT); - DataOutputStream os = new DataOutputStream( - m_socket.getOutputStream()); - os.writeBytes("HELO " + userName + "\n"); - os.writeBytes("SPED " + kbps + "\n"); + m_os = new DataOutputStream(m_socket.getOutputStream()); + m_os.writeBytes("HELO " + userName + "\n"); + m_os.writeBytes("SPED " + kbps + "\n"); File sharedDir = new File(m_sharedFolder); if (sharedDir.isDirectory()) { @@ -38,7 +38,7 @@ public class KaZaClient new InputStreamReader(fis)); String sharedFileName = br.readLine(); String sharedFileDesc = br.readLine(); - os.writeBytes("DESC " + sharedFileName + "\n" + + m_os.writeBytes("DESC " + sharedFileName + "\n" + sharedFileDesc + "\n"); } } @@ -52,4 +52,57 @@ public class KaZaClient } public boolean connected() { return m_connected; } + + public Vector performSearch(String query) + { + Vector results = new Vector(); + try + { + m_os.writeBytes("SRCH 2 " + query + "\n"); + BufferedReader br = new BufferedReader( + new InputStreamReader( + m_socket.getInputStream())); + for (;;) + { + String resultStr = br.readLine(); + if (resultStr.equals(".")) + break; + StringTokenizer tokens = new StringTokenizer(resultStr, "|"); + SearchResult result = new SearchResult(); + for (int i = 0; i < 4; i++) + { + if (tokens.hasMoreTokens()) + { + String t = tokens.nextToken(); + switch (i) + { + case 0: + result.peerAddress = t; + break; + case 1: + result.userName = t; + break; + case 2: + result.fileName = t; + break; + case 3: + result.fileDescription = t; + break; + } + } + } + results.add(result); + } + } + catch (Exception e) { } + return results; + } + + public class SearchResult + { + String peerAddress = ""; + String userName = ""; + String fileName = ""; + String fileDescription = ""; + } } diff --git a/cs654/proj1/KaZaGUI.java b/cs654/proj1/KaZaGUI.java index 22834e1..af67ece 100644 --- a/cs654/proj1/KaZaGUI.java +++ b/cs654/proj1/KaZaGUI.java @@ -104,6 +104,22 @@ public class KaZaGUI extends JFrame m_serverStartButton.setEnabled(false); } } + else if (e.getSource() == m_searchButton) + { + if (m_client != null && m_client.connected()) + { + Vector results = + m_client.performSearch(m_queryField.getText()); + for (KaZaClient.SearchResult r : results) + { + System.out.println("Result: " + + r.peerAddress + ", " + + r.userName + ", " + + r.fileName + ", " + + r.fileDescription); + } + } + } } } diff --git a/cs654/proj1/KaZaServer.java b/cs654/proj1/KaZaServer.java index f1bf9db..237bc75 100644 --- a/cs654/proj1/KaZaServer.java +++ b/cs654/proj1/KaZaServer.java @@ -125,6 +125,7 @@ public class KaZaServer implements Runnable { m_clientInfo.userName = inLine.substring(5); } + System.out.println("Got HELO from " + m_clientInfo.userName); } else if (opCode.equals("SPED")) { @@ -136,6 +137,7 @@ public class KaZaServer implements Runnable { m_clientInfo.speed = speed; } + System.out.println("Got SPED of " + m_clientInfo.speed); } } else if (opCode.equals("DESC")) @@ -147,6 +149,8 @@ public class KaZaServer implements Runnable { m_clientInfo.files.put(fileName, fileDesc); } + System.out.println("Got DESC of '" + fileName + + "': '" + fileDesc + "'"); } else if (opCode.equals("SRCH")) { @@ -160,6 +164,8 @@ public class KaZaServer implements Runnable String searchResults = performSearch(depth, query); os.writeBytes(searchResults); os.writeBytes(".\n"); + System.out.println("Got SRCH for " + query + + ", results:\n" + searchResults); } } }