\begin{tikzpicture}

% figure title
\node[rectangle] at (5, 6) (title) {\underline{\bf UDP status communication}};

% game client and gameserver
\node[draw, rectangle, minimum height=0.6cm, minimum width=2.7cm] at ( 0, 5.5) (gctop) {\bf game client};
\node[draw, rectangle, minimum height=0.6cm, minimum width=2.7cm] at (10, 5.5) (gstop) {\bf gameserver};

% status
\node at ( 0,  5.0) (gcrq) {};
\node at (10,  4.0) (gsrq) {};
\draw[->] (gcrq) -- (gsrq) node[midway, above, sloped] {status request};

% basic
\node at (10,  3.5) (gsba) {};
\node at ( 0,  2.5) (gcba) {};
\draw[->] (gsba) -- (gcba) node[midway, above, sloped] {``basic'' response};

% info
\node at (10,  3.0) (gsin) {};
\node at ( 0,  2.0) (gcin) {};
\draw[->] (gsin) -- (gcin) node[midway, above, sloped] {``info'' response};

% rules
\node at (10,  2.5) (gsru) {};
\node at ( 0,  1.5) (gcru) {};
\draw[->] (gsru) -- (gcru) node[midway, above, sloped] {``rules'' response};

% players
\node at (10,  2.0) (gspl) {};
\node at ( 0,  1.0) (gcpl) {};
\draw[->] (gspl) -- (gcpl) node[midway, above, sloped] {``players'' response};

% multiple packets
\node at (10,  1.85) (gspl2) {};
\node at ( 0,  0.85) (gcpl2) {};
\draw[->] (gspl2) -- (gcpl2) {};


% gameserver and masterserver bottom, vertical lines
\node at ( 0, 0) (gcbot) {};
\node at (10, 0) (gsbot) {};
\draw[->] (gctop.270) -- (gcbot.90) node[at end, xshift=-0.2cm, yshift=0.5cm, rotate=90] {time};
\draw (gstop.270) -- (gsbot.90) {};

\end{tikzpicture}
