From 4b53f153fe1a2491a48f964b12ffb5832709fe11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20V=C3=B6gele?= Date: Fri, 11 Apr 2014 10:12:36 +0200 Subject: [PATCH] =?UTF-8?q?Fehlerbehandlung=20im=20Parser=20vervollst?= =?UTF-8?q?=C3=A4ndigt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Parser.cs | 57 +++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 48 insertions(+), 9 deletions(-) diff --git a/src/Parser.cs b/src/Parser.cs index 972acdf..31aa303 100644 --- a/src/Parser.cs +++ b/src/Parser.cs @@ -56,15 +56,24 @@ namespace WorldOfPeacecraft if (IsCompletePackage ()) { Parse (); } - // TODO Try-catch. IMPORTANT! } } private void Parse () { - String[] aMessage = Enumerable.ToArray (Message); - Block mainBlock = new Block (aMessage, 0, aMessage.Length - 1); - ProcessData (mainBlock); + string[] aMessage = Enumerable.ToArray (Message); + Message.Clear(); + try { + Block mainBlock = new Block (aMessage, 0, aMessage.Length - 1); + ProcessData (mainBlock); + } catch (ParsingException e) { + string errormsg = "Error while parsing message: " + e.Message + "\n"; + errormsg += "Message:"; + foreach (string line in errormsg) { + errormsg += "\n\t" + line; + } + Console.WriteLine(errormsg); + } } private void ProcessData (Block parentBlock) @@ -153,6 +162,9 @@ namespace WorldOfPeacecraft Dragon dragon = MapDragon (block); backend.removeDragon (dragon); break; + default: + ThrowUnknownBlockException(deleteBlock, block); + break; } } @@ -185,6 +197,7 @@ namespace WorldOfPeacecraft private void ProcessAnswer (Block block) { + // TODO } private void ProcessResult (Block procBlock) @@ -359,7 +372,7 @@ namespace WorldOfPeacecraft huntable = true; break; default: - throw new ParsingException("Unknown mapcell-property '" + prop + "'"); + throw new ParsingException("Unknown mapcell property '" + prop + "'"); } } return new Tile(x,y,walkable, wall, forest, huntable, water); @@ -462,22 +475,48 @@ namespace WorldOfPeacecraft public string GetStringValue (string name) { - return Values [name]; + try { + return Values [name]; + } catch (ArgumentOutOfRangeException e) { + throw new ParsingException("The parameter '" + name + "' does not exist in block '" + Name + "'", e); + } } public int GetIntValue (string name) { - return int.Parse (Values [name]); + try { + return int.Parse (Values [name]); + } catch (ArgumentOutOfRangeException e) { + throw new ParsingException("The parameter '" + name + "' does not exist in block '" + Name + "'", e); + } catch (FormatException e) { + throw new ParsingException("The parameter '" + name + "' in block '" + Name + "' is not an integer (it was '" + Values [name] + "')", e); + } catch (OverflowException e) { + throw new ParsingException("The parameter '" + name + "' in blo '" + Name + "' does not fit into an integer (it was '" + Values [name] + "')", e); + } } public long GetLongValue (string name) { - return long.Parse (Values [name]); + try { + return long.Parse (Values [name]); + } catch (ArgumentOutOfRangeException e) { + throw new ParsingException("The parameter '" + name + "' does not exist in block '" + Name + "'", e); + } catch (FormatException e) { + throw new ParsingException("The parameter '" + name + "' in block '" + Name + "' is not a long (it was '" + Values [name] + "')", e); + } catch (OverflowException e) { + throw new ParsingException("The parameter '" + name + "' in blo '" + Name + "' does not fit into a long (it was '" + Values [name] + "')", e); + } } public bool GetBoolValue (string name) { - return bool.Parse (Values [name]); + try { + return bool.Parse (Values [name]); + } catch (ArgumentOutOfRangeException e) { + throw new ParsingException ("The parameter '" + name + "' does not exist in block '" + Name + "'", e); + } catch (FormatException e) { + throw new ParsingException ("The parameter '" + name + "' in block '" + Name + "' is not a bool (it was '" + Values [name] + "')", e); + } } } }