gvsu/cs654/proj1/KaZaClient.java
josh a4bc6d4ebf search results now include connection speed
git-svn-id: svn://anubis/gvsu@49 45c1a28c-8058-47b2-ae61-ca45b979098e
2008-03-09 00:58:39 +00:00

126 lines
4.1 KiB
Java

import java.io.*;
import java.net.*;
import java.util.*;
public class KaZaClient
{
public static final int LISTEN_PORT = 3443;
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)
{
m_sharedFolder = sharedFolder;
try {
m_socket = new Socket(server, KaZaServer.LISTEN_PORT);
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())
{
String[] files = sharedDir.list();
for (String fName : files)
{
if (fName.endsWith(".kaza"))
{
/* we found a description file, publish this file */
FileInputStream fis = new FileInputStream(m_sharedFolder +
File.separator +
fName);
BufferedReader br = new BufferedReader(
new InputStreamReader(fis));
String sharedFileName = br.readLine();
String sharedFileDesc = br.readLine();
m_os.writeBytes("DESC " + sharedFileName + "\n" +
sharedFileDesc + "\n");
}
}
}
} catch (Exception e) {
return;
}
Thread fsThread = new Thread(new FileServer(LISTEN_PORT, m_sharedFolder));
m_connected = true;
}
public boolean connected() { return m_connected; }
public void close()
{
if (m_connected)
{
try {
m_os.writeBytes("QUIT\n");
m_os.close();
m_socket.close();
} catch (Exception e) { }
m_connected = false;
}
}
public Vector<SearchResult> performSearch(String query)
{
Vector<SearchResult> results = new Vector<SearchResult>();
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 < 5; 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.speed = Integer.parseInt(t);
break;
case 3:
result.fileName = t;
break;
case 4:
result.fileDescription = t;
break;
}
}
}
results.add(result);
}
}
catch (Exception e) { }
return results;
}
public class SearchResult
{
String peerAddress = "";
String userName = "";
int speed = 0;
String fileName = "";
String fileDescription = "";
}
}