finished tape state machine

This commit is contained in:
test 2019-04-09 17:29:40 +02:00
parent b8f984edd9
commit ab18b92b3d
2 changed files with 126 additions and 54 deletions

View File

@ -16,18 +16,19 @@ namespace VCRlogic
public static event TapeEventHandler evOuttape; public static event TapeEventHandler evOuttape;
public static event TapeEventHandler evEndtape;
public static event TapeEventHandler evNoendtape;
public static void initSMtape() public static void initSMtape()
{ {
setState(new StapeNoTapeIn()); setState(new StapeNoTapeIn());
//evIntape += evIntape;
} }
public static void setState(StateTape e) public static void setState(StateTape e)
{ {
_concreteState = null; _concreteState = null;
_concreteState = e; _concreteState = e;
} }
@ -46,27 +47,50 @@ namespace VCRlogic
{ {
evOuttape(); evOuttape();
} }
} }
public static void endTape()
{
if (evEndtape != null)
{
evEndtape();
} }
} }
public static void notEndTape()
{
if (evNoendtape != null)
{
evNoendtape();
}
}
}
public abstract class StateTape public abstract class StateTape
{ {
public abstract void evIntape(); public abstract void evIntape();
public abstract void evOuttape(); public abstract void evOuttape();
public abstract void evEndtape();
public abstract void evNotendtape();
} }
public class StapeNoTapeIn : StateTape public class StapeNoTapeIn : StateTape
{ {
public StapeNoTapeIn()
{
Debug.Print("NoTapeIn\n");
// sub to event
SMtape.evIntape += evIntape;
}
public override void evIntape() public override void evIntape()
{ {
Debug.Print("tape is now in\n");
//unsub //unsub
SMtape.evIntape -= evIntape; SMtape.evIntape -= evIntape;
@ -77,46 +101,94 @@ public class StapeNoTapeIn : StateTape
{ {
} }
public override void evEndtape()
public StapeNoTapeIn()
{ {
// sub to event
SMtape.evIntape += evIntape; }
public override void evNotendtape()
{
} }
} }
public class StapeTapeInNotEnd : StateTape public class StapeTapeInNotEnd : StateTape
{ {
public StapeTapeInNotEnd()
{
Debug.Print("TapeInNotEnd\n");
//sub
SMtape.evOuttape += evOuttape;
SMtape.evEndtape += evEndtape;
}
public override void evIntape() public override void evIntape()
{ {
} }
public override void evOuttape() public override void evOuttape()
{ {
Debug.Print("tape is now out\n");
//unsub //unsub
SMtape.evOuttape -= evOuttape; SMtape.evOuttape -= evOuttape;
SMtape.evEndtape -= evEndtape;
SMtape.setState(new StapeNoTapeIn()); SMtape.setState(new StapeNoTapeIn());
} }
public override void evEndtape()
public StapeTapeInNotEnd()
{ {
//sub //unsub
SMtape.evOuttape += evOuttape; SMtape.evOuttape -= evOuttape;
SMtape.evEndtape -= evEndtape;
SMtape.setState(new StapeTapeInEnd());
} }
public override void evNotendtape()
{
}
} }
/*
public class StapeTapeInEnd : StateTape public class StapeTapeInEnd : StateTape
{ {
public override void setStateText()
public StapeTapeInEnd()
{ {
throw new NotImplementedException(); 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());
}
}
}

View File

@ -67,12 +67,12 @@ namespace winVCR
private void BtnNotEndTape_Click(object sender, EventArgs e) private void BtnNotEndTape_Click(object sender, EventArgs e)
{ {
SMtape.notEndTape();
} }
private void BtnEndTape_Click(object sender, EventArgs e) private void BtnEndTape_Click(object sender, EventArgs e)
{ {
SMtape.endTape();
} }
} }
} }