|
|
@@ -21,8 +21,8 @@ hw9:task1 implementiert.
|
|
21
|
21
|
|
|
22
|
22
|
Zuvor legen wir ein [Rust Workspace][] an, in welchem wir komfortabel
|
|
23
|
23
|
unsere eigenen Bibliotheken und ein Binary (den Server) verwalten.
|
|
24
|
|
-Nutzen Sie die in hw9:task1 geschriebene Bibliothek, in dem Sie diese
|
|
25
|
|
-als `srv-commands` Bibliothek in task2 benutzen, um die Kommandos an den
|
|
|
24
|
+Nutzen Sie die in hw9:task1 geschriebene Bibliothek, indem Sie diese als
|
|
|
25
|
+`srv-commands` Bibliothek in task2 benutzen, um die Kommandos an den
|
|
26
|
26
|
Server zu parsen. Kopieren Sie dazu Ihre Dateien aus task1 in das
|
|
27
|
27
|
`srv-commands` Verzeichnis.
|
|
28
|
28
|
|
|
|
@@ -36,7 +36,7 @@ Sorgen Sie in dieser ersten Ausbaustufe dafür, dass der Server 'Orders'
|
|
36
|
36
|
gibt, in der Sie gesendet wurden. ([FIFO][fifo])
|
|
37
|
37
|
|
|
38
|
38
|
Der Server darf beim Herunterfahren alle Daten verlieren. In dieser
|
|
39
|
|
-Version Ihres Servers genügt es, wenn der Server nur immer eine Anfrage
|
|
|
39
|
+Version Ihres Servers genügt es, wenn der Server immer nur eine Anfrage
|
|
40
|
40
|
zu jeder Zeit beantwortet.
|
|
41
|
41
|
|
|
42
|
42
|
### 2.1.1 Optionen beim Aufruf
|
|
|
@@ -128,9 +128,9 @@ Test3
|
|
128
|
128
|
|
|
129
|
129
|
### 2.1.3 Ausgaben des Servers auf der Konsole
|
|
130
|
130
|
|
|
131
|
|
-Eventuell Auftretende Fehler gibt der Server auf der Konsole aus, ohne
|
|
|
131
|
+Eventuell auftretende Fehler gibt der Server auf der Konsole aus, ohne
|
|
132
|
132
|
das Programm zu beenden. So wird z.B bei einem unbekannten Kommando der
|
|
133
|
|
-Entsprechende Errors Ihrer `srv-commands` Bibliothek ausgegeben, die
|
|
|
133
|
+entsprechende Error Ihrer `srv-commands` Bibliothek ausgegeben, die
|
|
134
|
134
|
folgende Form haben könnte:
|
|
135
|
135
|
```text
|
|
136
|
136
|
...
|
|
|
@@ -138,7 +138,7 @@ Error occurred: ParseError(UnknownCommand)
|
|
138
|
138
|
...
|
|
139
|
139
|
```
|
|
140
|
140
|
|
|
141
|
|
-Wird die Option -v angegeben, dann gibt der Server zusätzlichen
|
|
|
141
|
+Wird die Option -v angegeben, dann gibt der Server zusätzliche
|
|
142
|
142
|
Informationen aus (siehe obiges Kapitel dazu).
|
|
143
|
143
|
|
|
144
|
144
|
### 2.1.4 Unit Tests / Integration Tests
|
|
|
@@ -149,12 +149,12 @@ in Ihren Libraries und Ihrem Server zu testen.
|
|
149
|
149
|
## 3.1 Fehlerbehandlung
|
|
150
|
150
|
|
|
151
|
151
|
Wie bereits mehrfach erwähnt, geschieht auch in Rust die
|
|
152
|
|
-Fehlerbehandlung wie mit Javas checked Exceptions, in dem spezielle
|
|
|
152
|
+Fehlerbehandlung wie mit Javas checked Exceptions, indem spezielle
|
|
153
|
153
|
Fehler und Ergebnisse in generische Fehler und Ereignisse umgeformt
|
|
154
|
|
-werden, um diese dann nach 'oben' durch zureichen. Auf der höchsten
|
|
|
154
|
+werden, um diese dann nach 'oben' durch zu reichen. Auf der höchsten
|
|
155
|
155
|
Ebene werden dann die Fehler behandelt. Bei Rust kommt noch dazu, dass
|
|
156
|
156
|
man Results auch lokal in einer Funktion kombiniert, um dann alle Fehler
|
|
157
|
|
-innerhalb dieser Funktion (Top-level Handler) behandelt.
|
|
|
157
|
+innerhalb dieser Funktion (Top-level Handler) zu behandeln.
|
|
158
|
158
|
|
|
159
|
159
|
Als Basiswerkzeug haben Sie dazu bereits die Traits
|
|
160
|
160
|
`[std::convert::From][]` und `[std::convert::Into][]` kennen gelernt. Es
|
|
|
@@ -172,7 +172,7 @@ res.map(....).map_err(....)
|
|
172
|
172
|
```
|
|
173
|
173
|
|
|
174
|
174
|
Das ist derzeit noch 'aufwendig' als Syntax zu schreiben, entsprechende
|
|
175
|
|
-RFC's um dies zu vereinfachen existieren bereits (vgl. Evolution der
|
|
|
175
|
+RFC's, um dies zu vereinfachen existieren bereits (vgl. Evolution der
|
|
176
|
176
|
Fehlerbehandlung in Rust: match()->try!->?).
|
|
177
|
177
|
|
|
178
|
178
|
Ihre Lösung dieser Aufgabe hat somit idealerweise einen eigenen
|
|
|
@@ -182,8 +182,8 @@ den/die in dieser Aufgabe auftretende Fehlertypen enthält.
|
|
182
|
182
|
## 4.1 Tipps
|
|
183
|
183
|
|
|
184
|
184
|
* Zum Speichern eignet sich die [VecDeque][vecdeque], mit der sich das oben genannte FIFO-Verhalten gut abbilden lässt.
|
|
185
|
|
-* Früher an später denken: gut Aufteilung von Aufgaben in Funktionen,
|
|
186
|
|
- Module und Bibliotheken macht die folgenden Aufgaben einfacher.
|
|
|
185
|
+* Früher an später denken: gute Aufteilung von Aufgaben in Funktionen,
|
|
|
186
|
+ Module und Bibliotheken machen die folgenden Aufgaben einfacher.
|
|
187
|
187
|
* Zum Testen eignet sich **netcat**:
|
|
188
|
188
|
|
|
189
|
189
|
```
|