95 lines
3.8 KiB
TeX
95 lines
3.8 KiB
TeX
\subsection{UDPquieck}
|
|
At SinQ a requirement is that newly created data files are automatically
|
|
copied to another computer. This is for data safety. To have this done by
|
|
the instrument control program would raise stability problems: what to do
|
|
when the remote computer fails, when transfers are to slow or all data has
|
|
to be transferred again. Therefore the copying of files was delegated to a
|
|
second process. Now a a means is needed to tell the second process, that a
|
|
new data file has been created. This means is this module. It sends a UDP
|
|
message on a predefined port. The data copying process can receive or not
|
|
and act accordingly. Furthermore this scheme can be used to have other
|
|
processes act upon a new data file as well. The message sent is simple: it
|
|
consists of the string QUIECK/ followed by the filename. A new command is
|
|
implemented with the name udpquieck. This shall be a hidden command. As only
|
|
one such facility is needed for a given SICS server, all necessary data is
|
|
held in the implementation file udpquieck.c. Anyway, there is only one
|
|
structure holding network data.
|
|
The configuration of the udpport is done via a special server
|
|
option QuieckPort.
|
|
|
|
Laater on this facility may be extended to send arbitrary messages to
|
|
the UDP port for further coordination tasks. This is catered for by
|
|
having different message types. However, as of now only file messages
|
|
are supported.
|
|
|
|
Needless to say, that the second process must be able to interpret the
|
|
uDP messages sent by the SICS server.
|
|
|
|
|
|
|
|
The following interface is implemented:
|
|
|
|
\begin{flushleft} \small
|
|
\begin{minipage}{\linewidth} \label{scrap1}
|
|
$\langle$quieck {\footnotesize ?}$\rangle\equiv$
|
|
\vspace{-1ex}
|
|
\begin{list}{}{} \item
|
|
\mbox{}\verb@@\\
|
|
\mbox{}\verb@@\\
|
|
\mbox{}\verb@#define QUIECK 1@\\
|
|
\mbox{}\verb@@\\
|
|
\mbox{}\verb@ void KillQuieck(void *pData);@\\
|
|
\mbox{}\verb@@\\
|
|
\mbox{}\verb@ int SendQuieck(int iType, char *filename);@\\
|
|
\mbox{}\verb@@\\
|
|
\mbox{}\verb@ int QuieckAction(SConnection *pCon, SicsInterp *pSics, void *pData,@\\
|
|
\mbox{}\verb@ int argc, char *argv[]);@\\
|
|
\mbox{}\verb@@\\
|
|
\mbox{}\verb@@$\diamond$
|
|
\end{list}
|
|
\vspace{-1ex}
|
|
\footnotesize\addtolength{\baselineskip}{-1ex}
|
|
\begin{list}{}{\setlength{\itemsep}{-\parsep}\setlength{\itemindent}{-\leftmargin}}
|
|
\item Macro referenced in scrap ?.
|
|
\end{list}
|
|
\end{minipage}\\[4ex]
|
|
\end{flushleft}
|
|
\begin{flushleft} \small
|
|
\begin{minipage}{\linewidth} \label{scrap2}
|
|
\verb@"udpquieck.h"@ {\footnotesize ? }$\equiv$
|
|
\vspace{-1ex}
|
|
\begin{list}{}{} \item
|
|
\mbox{}\verb@@\\
|
|
\mbox{}\verb@/*------------------------------------------------------------------------@\\
|
|
\mbox{}\verb@ U D P Q U I E C K@\\
|
|
\mbox{}\verb@ @\\
|
|
\mbox{}\verb@ udpquieck sends a notification message on a UDP port when a new data@\\
|
|
\mbox{}\verb@ file has been created. @\\
|
|
\mbox{}\verb@@\\
|
|
\mbox{}\verb@ Mark Koennecke, August 1998@\\
|
|
\mbox{}\verb@---------------------------------------------------------------------------*/@\\
|
|
\mbox{}\verb@#ifndef UDPQUIECK@\\
|
|
\mbox{}\verb@#define UDPQUIECK@\\
|
|
\mbox{}\verb@@$\langle$quieck {\footnotesize ?}$\rangle$\verb@@\\
|
|
\mbox{}\verb@#endif@\\
|
|
\mbox{}\verb@@$\diamond$
|
|
\end{list}
|
|
\vspace{-2ex}
|
|
\end{minipage}\\[4ex]
|
|
\end{flushleft}
|
|
The functions:
|
|
\begin{description}
|
|
\item[KillQuieck] closes the network port at shutdown. Is the
|
|
KillFunction used in the SICS interpreter command structure.
|
|
\item[SendQuieck] sends a message of type iType and the text filename
|
|
to the UDP port. The only supported iType value is QUIECK as defined
|
|
in udpquieck.h. Further message types can be supported by adding more
|
|
support in this function.
|
|
\item[QuieckAction] is the interpreter interface function to this
|
|
facility. Yes, messages may be issued by a commadn from the
|
|
interpreter for instance within scripts. Again, this seems more useful
|
|
when this facility has been extended.
|
|
\end{description}
|
|
|
|
|