/*
 *  bondTupleSpace.java
 *    @contains a Tuplespace service. It wraps 
 *          the implementation of IBM TSpaces.
 *          The tuplespace is a shared data space that 
 *          stores tuples, which is an ordered set of
 *          typed values.
 *
 *  @author Kyungkoo Jun.
 *  Bond group, CS, Purdue Univ.
 */

package bond.application.TupleSpace;

import bond.core.*;
import bond.core.probe.*;
import com.ibm.tspaces.server.*;

public class bondTupleSpace 
extends bondProbe
{

  private TSServer ts;

  public bondTupleSpace() {

    try {
      ts = new TSServer();
    }
    catch (Exception e) {
      //e.printStackTrace();
    }
    Thread serverThread = new Thread(ts, "TSServer");
    serverThread.setDaemon(true);
    serverThread.start();

    dir.addAlias("BondTupleSpace", this);
    System.out.println("Bond TupleSpace inited at "+ts.getHostName()+":"+ts.getServerHostPort());
  }

  public void stop() {
    ts.shutdown(0); // immediately shut down tuplespace server
  }

  public void say (bondMessage m, bondObject sender) {
    if (genericSPH(m, sender)) {
      return;
    }
    super.say(m, sender);
  }

  public void sphBondTupleSpaceControl(bondMessage m, bondObject sender) {
    if (m.content.equals("shutdown")) {
      stop();
    }
  }

  public boolean implementsSubprotocol(String pname) {
    if (pname.equals("BondTupleSpaceControl")) {
	return true;
    }
    return super.implementsSubprotocol(pname);
  }

}
