class Program
{
private static WorkflowApplication _app;
private static string _etape = null;
private static Random _random = new Random();
private static void ExecuterAppelOffre()
{
var aoActivity = new AppelOffre();
_app = new WorkflowApplication(aoActivity);
_app.Idle = new Action<WorkflowApplicationIdleEventArgs>(WorkflowVeille);
_app.Completed = new Action<WorkflowApplicationCompletedEventArgs>(WorkflowTermine);
_app.Run();
AfficherInterface();
}
private static void AfficherInterface()
{
bool arret = false;
while (!arret)
{
switch (_etape)
{
case "EntrerAppelData":
var data = GetOffreData();
_app.ResumeBookmark("EntrerAppelData", data);
break;
case "PostulerOffre":
var montant = LireDecimal("Votre offre :");
_app.ResumeBookmark("PostulerOffre", montant);
break;
case "appelNormal" :
// faire une pause de 3 secondes pour simuler la réflexion
Thread.Sleep(3000);
// simuler soit le service achats soit le service marché
bool b = GetRandomBoolean();
string signet;
if (b)
signet = "signetMarché";
else
signet = "signetAchats";
// simuler acceptation ou rejet de l'offre
bool accepte = GetRandomBoolean();
_app.ResumeBookmark(signet, accepte);
break;
case "appelMéga":
// faire une pause de 3 secondes pour simuler la réflexion
Console.WriteLine("veuillez entrer une touche pour lancer la décision de la présidence");
Console.ReadKey();
// acceptation ou rejet aléatoire
bool bPresidence = GetRandomBoolean();
_app.ResumeBookmark("signetPrésidence", bPresidence);
break;
case "arret":
arret = true;
break;
}
Thread.Sleep(1000);
}
}
private static void WorkflowTermine(WorkflowApplicationCompletedEventArgs args)
{
_etape = "arret";
var acceptation = (bool)args.Outputs["acceptation"];
if (acceptation)
Console.WriteLine("l'offre a été acceptée");
else
Console.WriteLine("l'offre a été rejetée");
}
private static void WorkflowVeille(WorkflowApplicationIdleEventArgs args)
{
Console.WriteLine("le workflow est en mode veille");
foreach (var signet in args.Bookmarks)
switch (signet.BookmarkName)
{
case "EntrerAppelData":
_etape = "EntrerAppelData";
break;
case "PostulerOffre" :
_etape = "PostulerOffre";
break;
case "signetMarché":
case "signetAchats":
_etape = "appelNormal";
break;
case "signetPrésidence":
_etape = "appelMéga";
break;
}
}
private static bool GetRandomBoolean()
{
var i = _random.Next();
if (i % 2 == 0)
return true;
else
return false;
}
static void Main(string[] args)
{
ExecuterAppelOffre();
Console.ReadKey();
}
static decimal LireDecimal(string text)
{
decimal result = 0;
do
{
Console.WriteLine(text);
var succes = decimal.TryParse(Console.ReadLine(), out result);
if (!succes)
Console.WriteLine("veuillez entrer une valeur numérique correcte et positive");
} while (result <= 0);
return result;
}
static AppelOffreData GetOffreData()
{
char c;
do
{
Console.WriteLine("1 - Consultation restreinte");
Console.WriteLine("2 - Norma");
Console.WriteLine("3 - Méga-Projet");
c = Console.ReadKey().KeyChar;
} while ((c != '1') && (c != '2') && (c != '3'));
string categorie = null;
switch (c)
{
case '1': categorie = "Consultation";
break;
case '2': categorie = "Normal";
break;
case '3': categorie = "Méga";
break;
}
decimal result = LireDecimal("Budget :");
return new AppelOffreData()
{
Categorie = categorie,
Budget = result
};
}
}