(Each line is terminated by "\n\r", including one additional
line after the last line given).
Called when a tool informs of the registry/data server of its availability.
REG
<DB Identifier String>
<ResourceName>
<ResourceMachineName>
<ResourcePortNumber>
<Number of Input Args for the tool> (in format #, or #-#, ie 1, 1-4)
<Number of Outputs> (in format #, or #-#, ie 1, 1-4)
<Possible input types> (string description)
<Possible output types> (string description)
<XXX> (Three digit status code)
DEREG
<DB Identifier String> (Is this necessary/reasonable???)
<ResourceName>
<ResourceMachineName>
<ResourcePortNumber>
<XXX> (Three digit status code)
Assumption: Tools will not stay down for an extended period of time without de-registering.
Tools can re-register, after a crash.
The triplet (name, server, port) which "should" be unique.
QUERYREG
<DB Identifier String>
<XXX> (Three digit status code)
<NumContents>
<ResourceName> (the triplet of each available server will be listed)
<ResourceServerName>
<ResourcePortNumber>
...
(*Rationale: The tool/service name, server and port are the only essential
information needed for a client to make a connection.)
The data server needs to know where (which table) to look for the information.
RESLOOKUP
<DB Identifier String>
<ResourceName>
<ResourceMachineName>
<ResourcePortNumber>
<XXX> (Three digit status code)
<TimesRun>The triplet (name, server, port) which "should" be unique.
RESUPDATE
<DB Identifier String>
<ResourceName>
<ResourceMachineName>
<ResourcePortNumber>
<Workflow name>
<LastRun> (S for success, F for fail)
<LastRunTime> (integer #seconds)
<XXX> (Three digit status code)
EXECUTE
<DB Identifier String>
<ToolName>
<ParameterString>
<Time interval of Heartbeats> (in seconds, N for NO heartbeats)
<Number of Data Inputs>
<Data> (one for each number above, none if number is 0)
<XXX> (Three digit status code)
<Data>
<XXX> (Three digit status code)
(where the status code is "OK" (alive, but not done)) or
<XXX> (Three digit status code)
<Number of Data Outputs>
<Size of Data Output> (number of bytes, N if not available)
<Data>
This should be enough for our needs, we will continue to study the syntax
of (different) RPC(s).)
The first-cut implementation will be to have the clients send and receive
the data that is to be transmitted. However, we will investigate different
mechanisms where the data field can be replaced by a "pointer"
to the data location, such as DataObject in the database, URL, etc. (for
efficient data transfer).