static IEnumerable<IEvent> Proc(IEnvironment env) { var ev1 = env.Event(); env.Start(DoSucceed(env, ev1)); yield return ev1; if (ev1.Succeeded) Console.WriteLine(ev1.Value); var ev2 = env.Event(); env.Start(DoFail(env, ev2)); yield return ev2; if (ev2.Failed) Console.WriteLine(ev2.Value); }
static IEnumerable<IEvent> Machine(IEnvironment env) { while (true) { var worker = env.Start(Worker(env)); yield return worker; Console.WriteLine("{0}: Eseguo il comando {1}", env.Now, worker.Value); yield return env.Timeout(WorkTime); } }
static IEnumerable<IEvent> CondTester(IEnvironment env) { var t1 = env.NamedTimeout(5, "VAL_T", "T"); var aProc = env.Start(AProcess(env), name: "P"); var cond = env.AllOf(t1, aProc); yield return cond; Console.WriteLine("ALL: {0}", cond.Value); var t2 = env.NamedTimeout(5, "VAL_T", "T"); aProc = env.Start(AProcess(env), name: "P"); cond = env.AnyOf(t2, aProc); yield return cond; Console.WriteLine("ANY: {0}", cond.Value); aProc = env.Start(AProcess(env), name: "P"); var aTime = env.NamedTimeout(5, "VAL_T", "T"); ConditionEval<ITimeout<string>, IProcess> pred = c => c.Ev1.Succeeded && c.Ev2.Succeeded && c.Ev1.Value.Equals("VAL_T") && c.Ev2.Value.Equals("VAL_P"); cond = env.Condition(aTime, aProc, pred); yield return cond; Console.WriteLine("CUSTOM: {0}", cond.Value); }
static IEvents PersonGenerator(IEnvironment env) { var womenToilet = env.NewResource(1); var menToilet = env.NewResource(1); var count = 0; while (true) { var rnd = env.Random.NextDouble(); var gn = ((rnd<0.5) ? "Donna" : "Uomo") + count++; var tt = (rnd<0.5) ? womenToilet : menToilet; Console.WriteLine("{0:0.00}: {1} in coda", env.Now, gn); env.Start(Person(env, gn, tt)); var t = env.Random.Exponential(1.0/AvgPersonArrival); yield return env.Timeout(t); } }