-- File [Ivy]<Nelson>Lupine>LupineTimeTestBinder.mesa.
-- Last edited by BZM on 12-May-82 19:25:22.


DIRECTORY
  LupineTimeTestRpcControl USING [
  	ImportInterface, UnimportInterface,
	ExportInterface, UnexportInterface ],
  MesaRPC USING [ExportFailed, ImportFailed, InterfaceName, MakeKey],
  Runtime USING [IsBound];


LupineTimeTestBinder: PROGRAM
  IMPORTS
	clientControl: LupineTimeTestRpcControl,
	serverControl: LupineTimeTestRpcControl,
	RPC: MesaRPC, Runtime  =
  BEGIN


-- Remote Binding Routines for LupineTimeTest.

  BindingFailed: SIGNAL [{import, export}] = CODE;
  
  TimeTestInterface: RPC.InterfaceName = [instance: "Nelson.PA"];

  ImportTestProgram: PROC = 
    BEGIN
    IF ~Runtime.IsBound[RPC.ImportFailed] THEN RETURN;
    IF Runtime.IsBound[clientControl.ImportInterface]
      THEN clientControl.ImportInterface [
		interfaceName: TimeTestInterface
	     ! RPC.ImportFailed => {SIGNAL BindingFailed[import]; RETRY} ];
    END;

  ExportTestProgram: PROC = 
    BEGIN
    IF ~Runtime.IsBound[RPC.ExportFailed] THEN RETURN;
    IF Runtime.IsBound[serverControl.ExportInterface]
      THEN serverControl.ExportInterface [
		interfaceName: TimeTestInterface,
		user: "RPCRuntime.PA",
		password: RPC.MakeKey["zzy"]
	     ! RPC.ExportFailed => {SIGNAL BindingFailed[export]; RETRY} ];
    END;

  UnimportTestProgram: PROC = 
    BEGIN
    IF ~Runtime.IsBound[RPC.ImportFailed] THEN RETURN;
    IF Runtime.IsBound[clientControl.UnimportInterface]
      THEN clientControl.UnimportInterface;
    END;

  UnexportTestProgram: PROC = 
    BEGIN
    IF ~Runtime.IsBound[RPC.ExportFailed] THEN RETURN;
    IF Runtime.IsBound[serverControl.UnexportInterface]
      THEN serverControl.UnexportInterface;
    END;



-- Module Initialization.

  -- This one module is used for both importing and exporting, and can be
  -- used in clients, servers, or both combined.

  ExportTestProgram[];  -- Try to export.
  ImportTestProgram[];  -- Try to import.
  

END.  -- LupineTimeTestBinder.