KaZaServer progress, working on search functions

git-svn-id: svn://anubis/gvsu@37 45c1a28c-8058-47b2-ae61-ca45b979098e
This commit is contained in:
josh 2008-03-08 22:31:49 +00:00
parent 321043b407
commit c6534cefca

View File

@ -8,6 +8,7 @@ public class KaZaServer implements Runnable
public static final int LISTEN_PORT = 3442;
private ServerSocket m_serverSocket;
private HashMap<String, ClientInfo> m_clientData;
private Vector<Socket> m_peerGroupLeaders;
public void run()
{
@ -77,6 +78,7 @@ public class KaZaServer implements Runnable
BufferedReader br = new BufferedReader(
new InputStreamReader(
m_socket.getInputStream()));
DataOutputStream os = new DataOutputStream(socket.getOutputStream);
/* loop processing client messages */
for (;;)
@ -101,25 +103,66 @@ public class KaZaServer implements Runnable
{
/* user is giving us a description of a file */
String fileName = inLine.substring(5);
String fileDesc = "";
boolean first = true;
for (;;)
{
String descLine = br.readLine();
if (descLine.equals("."))
break;
if (!first)
fileDesc += "\n";
fileDesc += descLine;
first = false;
}
String fileDesc = br.readLine();
synchronized (m_clientData)
{
m_clientInfo.files.put(fileName, fileDesc);
}
}
else if (opCode.equals("SRCH"))
{
/* user is requesting a search */
if (tokens.hasMoreTokens())
{
int depth = Integer.parseInt(tokens.nextToken());
if (tokens.hasMoreTokens())
{
String query = tokens.nextToken();
String searchResults = performSearch(depth, query);
os.write(searchResults.getBytes();
}
}
}
}
} catch (Exception e) { }
}
}
private String performSearch(int depth, String query)
{
String results = "";
if (depth > 0)
{
synchronized (m_peerGroupLeaders)
{
for (Socket s : m_peerGroupLeaders)
{
String peerResults =
getSearchResultsFromPeerGroupLeader(s, depth-1, query);
results += peerResults;
}
}
}
/* now search my own file list */
}
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 (;;)
{
String inLine = br.readLine();
if (inLine.equals("."))
break;
searchResults += inLine + "\n";
}
return searchResults;
}
}