package com.limegroup.gnutella.xml; import com.limegroup.gnutella.ActivityCallback; import com.limegroup.gnutella.messages.QueryRequest; import com.limegroup.gnutella.util.ManagedThread; /** * Opens a special connection with a known server of the metadata * and send it the special query * @author Sumeet Thadani (11/16/01) */ public final class RichConnectionThread extends ManagedThread{ private String ipAddress; private QueryRequest query; private ActivityCallback callback; //constructor public RichConnectionThread(String ip, QueryRequest qr, ActivityCallback callback){ this.ipAddress = ip; this.query = qr; this.callback = callback; setName("RichConnectionThread"); } /** * opens a connection with the specified ip address and sends it a * rich query request */ public void managedRun(){ /* try { Connection c = new Connection(ipAddress,6346);//use default port QueryReply qr = null; try{ c.initialize();//handshake //System.out.println("Sumeet: initialized"); c.send(query);//send the query along //System.out.println("Sumeet: sent query"); c.flush(); //System.out.println("Sumeet: flushed query"); }catch(IOException ee){//could not send? return return; } byte[] queryGUID = query.getGUID(); while(true){//keep receiving 'em try{ //lets give the server 10 seconds to respond Message m = c.receive(10000); if(m instanceof QueryReply) qr = (QueryReply)m; else continue;//carry on //System.out.println("Sumeet: received reply"); }catch(Exception e){//exception? close connection and get out //e.printStackTrace(); if(c.isOpen()) c.close(); break; } //handle the query reply... //we know its for us...so we need not route...just consume it byte[] replyGUID = qr.getGUID(); if(Arrays.equals(replyGUID,queryGUID)) { SearchResultHandler resultHandler = RouterService.getSearchResultHandler(); resultHandler.handleQueryReply(qr); //callback.handleQueryReply(qr); } } } catch(Throwable t) { ErrorService.error(t); } */ } }