List         gossip_rsps=null;
    public void down(Event evt) {	Message      msg, copy;	PingHeader   hdr;	long         time_to_wait, start_time;	List         gossip_rsps=null;	String       h;	switch(evt.getType()) {	case Event.FIND_INITIAL_MBRS:   // sent by GMS layer, pass up a GET_MBRS_OK event	    	    // 1. Mcast GET_MBRS_REQ message	    System.out.println("WANPING.FIND_INITIAL_MBRS");	    	    hdr=new PingHeader(PingHeader.GET_MBRS_REQ, null);	    msg=new Message(null, null, null);	    msg.putHeader(getName(), hdr);	    System.out.println("Sending PING to " + initial_hosts);	    	    for(Enumeration en=initial_hosts.elements(); en.hasMoreElements();) {		h=(String)en.nextElement();		copy=msg.copy();		copy.setDest(new WanPipeAddress(h));		    System.out.println("WANPING.down(FIND_INITIAL_MBRS): sending PING request to " +				       copy.getDest());		passDown(new Event(Event.MSG, copy));	    }	    	    	    // 2. Wait 'timeout' ms or until 'num_initial_members' have been retrieved	    synchronized(initial_members) {		initial_members.removeAllElements();		start_time=System.currentTimeMillis();		time_to_wait=timeout;				while(initial_members.size() < num_initial_members && time_to_wait > 0) {		    try {initial_members.wait(time_to_wait);} catch(Exception e) {}		    time_to_wait-=System.currentTimeMillis() - start_time;		}	    }	    System.out.println("Initial members are " + initial_members);	    	    // 3. Send response	    passUp(new Event(Event.FIND_INITIAL_MBRS_OK, initial_members));	    break;	   	    	case Event.TMP_VIEW:	case Event.VIEW_CHANGE:	    	    Vector tmp;	    if((tmp=((View)evt.getArg()).getMembers()) != null) {		synchronized(members) {		    members.removeAllElements();		    for(int i=0; i < tmp.size(); i++)			members.addElement(tmp.elementAt(i));		}	    }	    passDown(evt);	    break;	case Event.BECOME_SERVER: // called after client has joined and is fully working group member	    passDown(evt);	    is_server=true;	    break;	case Event.CONNECT:	    group_addr=(String)evt.getArg();	    passDown(evt);	    break;	case Event.DISCONNECT:	    passDown(evt);	    break;	    	default:	    passDown(evt);          // Pass on to the layer below us	    break;	}    }