From ab18b92b3d7f6e7a9cccfc486ccc97cd792b7aef Mon Sep 17 00:00:00 2001 From: test Date: Tue, 9 Apr 2019 17:29:40 +0200 Subject: [PATCH] finished tape state machine --- winVCR/VCRlogic/SMtape.cs | 176 +++++++++++++++++++++++++++----------- winVCR/winVCR/Form1.cs | 4 +- 2 files changed, 126 insertions(+), 54 deletions(-) diff --git a/winVCR/VCRlogic/SMtape.cs b/winVCR/VCRlogic/SMtape.cs index da31179..daeb9c1 100644 --- a/winVCR/VCRlogic/SMtape.cs +++ b/winVCR/VCRlogic/SMtape.cs @@ -16,18 +16,19 @@ namespace VCRlogic public static event TapeEventHandler evOuttape; + public static event TapeEventHandler evEndtape; + + public static event TapeEventHandler evNoendtape; + public static void initSMtape() { setState(new StapeNoTapeIn()); - - //evIntape += evIntape; } public static void setState(StateTape e) { _concreteState = null; - _concreteState = e; } @@ -46,77 +47,148 @@ namespace VCRlogic { evOuttape(); } + } - + + public static void endTape() + { + if (evEndtape != null) + { + evEndtape(); + } + } + + public static void notEndTape() + { + if (evNoendtape != null) + { + evNoendtape(); + } } } -} - -public abstract class StateTape -{ - public abstract void evIntape(); - - public abstract void evOuttape(); -} - - -public class StapeNoTapeIn : StateTape -{ - public override void evIntape() + public abstract class StateTape { - Debug.Print("tape is now in\n"); + public abstract void evIntape(); - //unsub - SMtape.evIntape -= evIntape; + public abstract void evOuttape(); - SMtape.setState(new StapeTapeInNotEnd()); - } + public abstract void evEndtape(); - public override void evOuttape() - { + public abstract void evNotendtape(); } - public StapeNoTapeIn() + public class StapeNoTapeIn : StateTape { - // sub to event - SMtape.evIntape += evIntape; - } -} + public StapeNoTapeIn() + { + Debug.Print("NoTapeIn\n"); -public class StapeTapeInNotEnd : StateTape -{ - public override void evIntape() - { - } + // sub to event + SMtape.evIntape += evIntape; + } + public override void evIntape() + { + //unsub + SMtape.evIntape -= evIntape; - public override void evOuttape() - { - Debug.Print("tape is now out\n"); + SMtape.setState(new StapeTapeInNotEnd()); + } - //unsub - SMtape.evOuttape -= evOuttape; - SMtape.setState(new StapeNoTapeIn()); + public override void evOuttape() + { + } + + public override void evEndtape() + { + + } + + public override void evNotendtape() + { + + } } - public StapeTapeInNotEnd() + public class StapeTapeInNotEnd : StateTape { - //sub - SMtape.evOuttape += evOuttape; + + + public StapeTapeInNotEnd() + { + + Debug.Print("TapeInNotEnd\n"); + //sub + SMtape.evOuttape += evOuttape; + SMtape.evEndtape += evEndtape; + } + + public override void evIntape() + { + } + + public override void evOuttape() + { + //unsub + SMtape.evOuttape -= evOuttape; + SMtape.evEndtape -= evEndtape; + SMtape.setState(new StapeNoTapeIn()); + } + + public override void evEndtape() + { + //unsub + SMtape.evOuttape -= evOuttape; + SMtape.evEndtape -= evEndtape; + SMtape.setState(new StapeTapeInEnd()); + } + + public override void evNotendtape() + { + + } + + + } -} -/* -public class StapeTapeInEnd : StateTape -{ - public override void setStateText() + public class StapeTapeInEnd : StateTape { - throw new NotImplementedException(); - } -} - */ \ No newline at end of file + public StapeTapeInEnd() + { + Debug.Print("TapeInEnd\n"); + SMtape.evOuttape += evOuttape; + SMtape.evNoendtape += evNotendtape; + + } + + public override void evIntape() + { + + } + + public override void evOuttape() + { + SMtape.evOuttape -= evOuttape; + SMtape.evNoendtape -= evNotendtape; + SMtape.setState(new StapeNoTapeIn()); + } + + public override void evEndtape() + { + + } + + public override void evNotendtape() + { + SMtape.evOuttape -= evOuttape; + SMtape.evNoendtape -= evNotendtape; + SMtape.setState(new StapeTapeInNotEnd()); + } + } +} \ No newline at end of file diff --git a/winVCR/winVCR/Form1.cs b/winVCR/winVCR/Form1.cs index 60a0d28..2822b21 100644 --- a/winVCR/winVCR/Form1.cs +++ b/winVCR/winVCR/Form1.cs @@ -67,12 +67,12 @@ namespace winVCR private void BtnNotEndTape_Click(object sender, EventArgs e) { - + SMtape.notEndTape(); } private void BtnEndTape_Click(object sender, EventArgs e) { - +SMtape.endTape(); } } } \ No newline at end of file