summaryrefslogtreecommitdiffstats
path: root/doc/LaTeX/devel/0300-pvs.tex
diff options
context:
space:
mode:
Diffstat (limited to 'doc/LaTeX/devel/0300-pvs.tex')
-rw-r--r--doc/LaTeX/devel/0300-pvs.tex81
1 files changed, 43 insertions, 38 deletions
diff --git a/doc/LaTeX/devel/0300-pvs.tex b/doc/LaTeX/devel/0300-pvs.tex
index 329e03a..92b36f7 100644
--- a/doc/LaTeX/devel/0300-pvs.tex
+++ b/doc/LaTeX/devel/0300-pvs.tex
@@ -9,7 +9,7 @@ Generelles Konzept
\subsection{Zuordnung von Konsole und Clients}
\input{devel/0310-service-discovery}
-\subsection{Überblick über Aktivitäten auf Clients}
+\section{Überblick über Aktivitäten auf Clients}
\subsection{Projektion an Alle}
\index{Projektion}
@@ -52,7 +52,7 @@ als gelesen markiert durch das Drucken auf dem Knopf \textit{'OK'}.
\textbf{Behandlung der Nachrichten im Server}
\\
\\
-Chat-Nachtichten werden von Server in der Klasse 'PVSConnectionManager' mittels der Methode 'onChat' behandelt. Dort wird aus der Nachrit den Empfänger
+Chat-Nachtichten werden von Server in der Klasse \texttt{PVSConnectionManager} mittels der Methode \texttt{onChat} behandelt. Dort wird aus der Nachrit den Empfänger
und den Absender ausglesen und die Nachricht an beide versendet. So gilt das Empfangen eine eigene Nachricht als Bestätigung, dass die Nachricht ordentlich vom Server
behandelt und versendet wurde. Das Gestalt von solchen Nachrichten sieht folgendermaßen aus
@@ -60,45 +60,47 @@ behandelt und versendet wurde. Das Gestalt von solchen Nachrichten sieht folgend
PVSMSG
\end{center}
\begin{center}
-\begin{tabular}{l | l | p{4cm} | p{4cm}}
+\begin{tabular}{|l | p{3cm} | p{3cm} | p{3cm}|}
\hline
Type & Ident & Msg & sndID\\
\hline
-PVSMESSAGE & <Username des Empfängers> & <Username des Absenders>:<Die eigentliche nachrich> & <Vom server zugewissene ID des Absenders>\\
+\texttt{PVSMESSAGE} & \texttt{<Username des Empfängers>} & \texttt{<<Username des Absenders>:<Die eigentliche nachrich>} & \texttt{<<Vom server zugewissene ID des Absenders>}\\
\end{tabular}
\end{center}
-Informationsnachrichten werden ausschließlich vom PVSManager versendet.Dies geschiet in der Klasse 'ConnectionList' mittels der Methode 'on\_Message'.
+Informationsnachrichten werden ausschließlich vom PVSManager versendet.Dies geschiet in der Klasse \texttt{ConnectionList} mittels der Methode \texttt{on\_Message}.
\begin{center}
PVSMSG
\end{center}
\begin{center}
-\begin{tabular}{l | l | p{4cm} | p{4cm}}
+\begin{tabular}{|l | l | p{6cm} | p{6cm}}
\hline
Type & Ident & Msg\\
\hline
-PVSMESSAGE & BROADCAST & <Die eigentliche nachrich> \\
+\texttt{PVSMESSAGE} & \texttt{BROADCAST} & \texttt{<Die eigentliche nachrich>} \\
\end{tabular}
\end{center}
-Informationnachrichten können außerdem einen oder mehrere Clients sperren, wenn sie den Ident 'LOCKSTATION' enthalten. Sobald ein Client die Nachricht empfängt,
+Informationnachrichten können außerdem einen oder mehrere Clients sperren, wenn sie den Ident \texttt{LOCKSTATION} enthalten. Sobald ein Client die Nachricht empfängt,
wird diese auf dem Bilschirm angezeigt und 10 Sekunden später wird der Client gesperrt.
Abgesehen von der Behandlung der Nachrichten muss sich der Server darum kümmern, dass jeder verbunde Client über alle nötige Informationionen verfügt damit er
Nachrichten mit andren Clients austauschen kann. Dies wird folgendermaßen erledigt:
\begin{itemize}
- \item \textbf{Einfügen eines Clients:} um die Verwaltung von Clients kümmert sich die Klasse 'PVSConnectionManager', in der die Methode 'onClientNew' für das Einfügen
+ \item \textbf{Einfügen eines Clients:} um die Verwaltung von Clients kümmert sich die Klasse \texttt{PVSConnectionManager}, in der die Methode \texttt{onClientNew} für das Einfügen
von neuen Clients zuständigt ist. Sowald ein neuer Client in der Client-Liste des Servers eingefügt wird, wird an ihn die Liste aller im Server bereits angemeldete
-Clients geschickt. Dazu dient die Methode 'sendEventToClients'.
+Clients geschickt. Dazu dient die Methode \texttt{sendEventToClients}.
Bis hier ist der neue Client noch unbekannt für den Rest der Nutzer. Der neuer Client wird erst bekannt gegeben sobald er vom Server einen Benutzername
zugewissen bekommen hat. Da es sein kann, dass den Name, mit dem der neue Client sich beim Server anmelden wollte,
-bereits vergeben ist und muss unter Umständen verändert werden. Diese Zuweisung findet in der Methode 'onLoginUsername' statt,
-wo nicht nur alle andere Clients sondern auch der neue Client darüber informiert werden. Auch hier kümmert sich die Methoder 'sendEventToClients'
+bereits vergeben ist und muss unter Umständen verändert werden. Diese Zuweisung findet in der Methode \texttt{onLoginUsername} statt,
+wo nicht nur alle andere Clients sondern auch der neue Client darüber informiert werden. Auch hier kümmert sich die Methoder \texttt{sendEventToClients}
ums Vesenden der entsprechenden Informationen.
- \item \textbf{Entfernen eines Clients:} das Entfernen von Clients wird von der Methode 'onClientRemove' erledigt, wo analog wie
+ \item \textbf{Entfernen eines Clients:} das Entfernen von Clients wird von der Methode
+\\
+\texttt{onClientRemove} erledigt, wo analog wie
Oben alle Clients darüber informiert werden.
\end{itemize}
@@ -108,26 +110,26 @@ Für dei Übermittlung solche Informationen werden Nachrichten mit folgenden Ges
PVSMSG
\end{center}
\begin{center}
-\begin{tabular}{l | l | p{4cm} | p{4cm}}
+\begin{tabular}{|l | l | p{6cm} |}
\hline
Type & Ident & Msg\\
\hline
-PVSMESSAGE & <Befehl> & <Benutzername>:<IP-Adresse> \\
+\texttt{PVSMESSAGE} & \texttt{<Befehl>} & \texttt{<Benutzername>:<IP-Adresse>} \\
\end{tabular}
\end{center}
Es gibt drei unterschiedliche Befehle, die welche Änderung in der localen Client-Liste der Clients vorgenommen werden soll angeben.
\begin{enumerate}
- \item 'clientToAdd'
-\item 'clientToRemove'
-\item 'assignedName'
+ \item \texttt{clientToAdd}
+\item \texttt{clientToRemove}
+\item \texttt{assignedName}
\end{enumerate}
Wie es bei Servern gewöhnt ist, werden alle relevante Ereignisse in Log-Dateien protokolliert. Ereignisse werden im Chat-Log mit folgendem
Befehl eingetragen
\begin{center}
-'ConsoleLog writeChat(<Beschreibung des Ereignisses>)'
+\texttt{ConsoleLog writeChat(<Beschreibung des Ereignisses>)}
\end{center}
\textbf{Chat-Interface der Steuerkonsole}
@@ -135,28 +137,28 @@ Befehl eingetragen
\\
So wie alle Clients ist der PVSManager auch ein Teilnehmer im Chat. Der PVSManager steht wie alle andere Teilnehmer auch in der Nutzer-Liste
jedes Chat-Fenster und kann ebenfalls über private Nachrichten direkt angesprochen werden. Die Arbeitsweise dieser Chat-Interface ist sehr simple.
-Da sie sich im Server befindet, müssen einfach alle Ereignise (Nachrichten senden ist die einzige Ausnahme) von der Klasse 'PVSConnectionManager'
-an die Klasse 'MainWindow' weitergegeben werden. Dies kümmert sich darum, alle Informationen zu verarbeiten und diesein der Chat-Fenster der
+Da sie sich im Server befindet, müssen einfach alle Ereignise (Nachrichten senden ist die einzige Ausnahme) von der Klasse \texttt{PVSConnectionManager}
+an die Klasse \texttt{MainWindow} weitergegeben werden. Dies kümmert sich darum, alle Informationen zu verarbeiten und diesein der Chat-Fenster der
Steuerkonsole anzuzeigen.
-Folgende Methoden der Klasse 'MainWindow' ermöglichen das Anzeigen einer empfangenen Nachricht im Chat-Fenster der Steuerkonsole und Änderungen (Clients einfügen
+Folgende Methoden der Klasse \texttt{MainWindow} ermöglichen das Anzeigen einer empfangenen Nachricht im Chat-Fenster der Steuerkonsole und Änderungen (Clients einfügen
und entfernen) in der sowohl im Chat-Fenster als auch in der Steuerkonsole angezeigten Client-Liste.
\\
\\
-'receiveChatMsg(<Absender>, <Empfänger>, <Nachricht>)'
+\texttt{receiveChatMsg(<Absender>, <Empfänger>, <Nachricht>)}
\\
-'removeConnection(*pvsClient)'
+\texttt{removeConnection(*pvsClient)}
\\
-'addConnection(*pvsClient)'
+\texttt{addConnection(*pvsClient)}
\\
\\
-Alle diese Methoden werden im Gegensatz von der Methode 'sendChatMsg(PVSMsg myMsg)' von der Klasse 'PVSConnectionManager' aus ausgeführt. Da alle durchs
+Alle diese Methoden werden im Gegensatz von der Methode \texttt{sendChatMsg(PVSMsg myMsg)} von der Klasse \texttt{PVSConnectionManager} aus ausgeführt. Da alle durchs
Netz empfangene Nachrichten müssen an die GUI-Weitergegeben werden. Beim Versenden von Nachrichten funktioniert es genau umgekehrt. Die Nachricht wird
-vom Nutzer in der GUI eingegeben und muss an die Klasse 'PVSConnectionManager' weitergeleitet werden, damit diese ins Netz gesendet wird. Darum kümmert
-sich die Methode in der Klasse 'MainWindow'
+vom Nutzer in der GUI eingegeben und muss an die Klasse \texttt{PVSConnectionManager} weitergeleitet werden, damit diese ins Netz gesendet wird. Darum kümmert
+sich die Methode in der Klasse \texttt{MainWindow}.
\\
\\
-'MainWindow::sendChatMsg(PVSMsg myMsg)'
+\texttt{MainWindow::sendChatMsg(PVSMsg myMsg)}
\\
\\
\textbf{Chat-Clients}
@@ -166,11 +168,11 @@ So weit haben wir die Funtionsweisen des Servers im Bezug auf dem Chat kennengel
Nun wird erläutert wie die einzelnen Clients die Nachrichten bearbeiten.
\\
\\
-Auf der Client-Seite in der Klasse 'PVSConnectionServer' werden alle Nachrichten des PVS-Protokolls empfangen und gefiltert (Siehe Methode 'handleClientMsg').
-Nachrichten mit dem Ident 'PVSMESSAGE' werden durch den Dispatcher direkt an die Klasse 'PVSChatClient' weitergeleitet, wo die Methode 'receive' feststellen wird,
+Auf der Client-Seite in der Klasse \texttt{PVSConnectionServer} werden alle Nachrichten des PVS-Protokolls empfangen und gefiltert (Siehe Methode \texttt{handleClientMsg}).
+Nachrichten mit dem Ident \texttt{PVSMESSAGE} werden durch den Dispatcher direkt an die Klasse \texttt{PVSChatClient} weitergeleitet, wo die Methode \texttt{receive} feststellen wird,
ob es sich dabei um eine Gespräch-Nachricht oder eine Befehl-Nachricht handelt. Um es feststellen zu können, wird aus der empfangenen Nachricht ein PVSChatMsg-Objekt
-erzeugt (siehe Konstruktor 'PVSChatMsg::PVSChatMsg(PVSMsg pvsMsg)') und mittels der Methode 'isCommand' erfährt man ob es sich um einen Befehl handelt oder nicht.
-Falls ja leitet der Dispatche die Nachricht an die Stelle 'PVS::UpdateChatClients' sonst an die Stelle 'PVS::chat\_receive', wo die Änderungen in der Client-Liste
+erzeugt (siehe Konstruktor) und mittels der Methode \texttt{isCommand} erfährt man ob es sich um einen Befehl handelt oder nicht.
+Falls ja leitet der Dispatche die Nachricht an die Stelle \texttt{PVS::UpdateChatClients} sonst an die Stelle \texttt{PVS::chat\_receive}, wo die Änderungen in der Client-Liste
vorgenommen werden oder die Gespräch-Nachricht der GUI abgegeben wird.
@@ -182,16 +184,17 @@ vorgenommen werden oder die Gespräch-Nachricht der GUI abgegeben wird.
Im Zuge der Entwicklung des PVS wurde ein sehr einfaches Messagingprotokoll entwickelt.
Die Nachrichten bzw. Messages bestehen dabei aus Header, Nachrichtentyp, Ident und dem eigentlichen Nachrichtentext. Die einzelnen Nachrichtenteile, welche bis auf den Header selbst definiert werden können, werden verknüpft und versendet. Es sind schon Nachrichtentypen vordefiniert, welche sich nur durch unterschiedliche Dispatcher unterscheiden.
Bereits vorhandene Typen sind COMMAND, LOGIN, MESSAGE und UNKNOWN. Die Dispatcher (\_commandDispatcher, \_loginDispatcher und \_chatDispatcher) befinden sich im Client in der Klasse \texttt{ServerConnection}, in der Steuerkonsole in der Klasse \texttt{ClientConnection} bzw. \texttt{ListenServer}. Ein Ident wie z.B. Username, Befehl oder Beschreibung des Nachrichteninhalts dient zur Unterscheidung verschiedener Nachrichten mit demselben Nachrichtentyp, wobei die Nachricht dann den dem Ident entsprechenden Nachrichtentext enthält.
-Um eine Funktion zur Behandlung einer bestimmten Nachricht zu definieren, wird diese Funktion als Handler mit dem entsprechenden Dispatcher verknüpft. Im PVS-Client beispielsweise befindet sich der Dispatcher für Nachrichten vom Typ Command in der Klasse \texttt{pvsServerConnection}, daher wird in der Klasse \texttt{pvs} die Funktion \verb|void PVS::onCommand(PVSMsg cmdMessage)| wie folgt als Handler registriert: \verb|_pvsServerConnection->addCommandHandler("*", this, &PVS::onCommand)|. Erhält nun der Client eine Nachricht vom Typ COMMAND, so wird die Funktion onCommand mit dem entsprechenden Nachrichtenobjekt aufgerufen. Auf die eigentliche Nachricht kann dann über die Methoden \texttt{getIdent()} und \texttt{getMessage()} des Objektes zugegriffen werden.
+Um eine Funktion zur Behandlung einer bestimmten Nachricht zu definieren, wird diese Funktion als Handler mit dem entsprechenden Dispatcher verknüpft. Im PVS-Client beispielsweise befindet sich der Dispatcher für Nachrichten vom Typ Command in der Klasse \texttt{pvsServerConnection}, daher wird in der Klasse \texttt{pvs} die Funktion \texttt{void PVS::onCommand(PVSMsg cmdMessage)} wie folgt als Handler registriert:
+\texttt{\_pvsServerConnection->addCommandHandler("*", this, \&PVS::onCommand)}. Erhält nun der Client eine Nachricht vom Typ COMMAND, so wird die Funktion onCommand mit dem entsprechenden Nachrichtenobjekt aufgerufen. Auf die eigentliche Nachricht kann dann über die Methoden \texttt{getIdent()} und \texttt{getMessage()} des Objektes zugegriffen werden.
\subsection{PVS-Messages}
\index{Message!PVS} \index{Message}
-Im Folgenden sind die Messages, die zwischen den einzelnen PVS Komponenenten ausgetauscht werden, aufgelistet.
+In Tabelle \ref{tab:messagelist} sind die Messages, die zwischen den einzelnen PVS Komponenenten ausgetauscht werden, aufgelistet.
Der Nachrichtentyp gibt dabei an, welcher Dispatcher die Nachricht behandelt.
Der Ident einer Nachricht wird zur Verarbeitung einer empfangenen Nachricht in der aufzurufenden Funktion benötigt (Unterscheidung von anderen Nachrichten gleichen Typs).
+\begin{table}
\begin{center}
-\small
\begin{tabular}{l | l | p{2cm} | p{4cm}}
\label{pvs-msg-liste}
Nachrichtentyp & Nachrichten Ident & Inhalt & Beschreibung \\
@@ -204,7 +207,7 @@ PVSCOMMAND & UNLOCKSTATION & & \\
PVSLOGIN & USERNAME & username & Client Benutzername \\
PVSLOGIN & PASSWORD & password & Serverpasswort \\
PVSLOGIN & ID & id & \\
-PVSLOGIN & FAILED & "`Wrong Password"' & Wird bei falschem Passwort gesendet \\ "`
+PVSLOGIN & FAILED & "`Wrong Password"' & Wird bei falschem Passwort gesendet \\
PVSCOMMAND & PORT & port & \\
PVSCOMMAND & PASSWORD & password & VNC Passwort\\
PVSCOMMAND & RWPASSWORD & rwpassword & Passwort für den Zugriff auf die Tastatur und Maus \\
@@ -219,4 +222,6 @@ PVSMESSAGE & clientToRemove & & Client entfernen (Chat)\\
PVSMESSAGE & assignedName & & Festgelegter Name (Chat)\\
\end{tabular}
\end{center}
-
+\caption{Liste der PVS Messages}
+\label{tab:messagelist}
+\end{table}