using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
namespace A.S.Pushkin
{
///
/// Source:
http://www.znatok.ua/russian_poetry_pushkin_zimniy_vecher /// Mirror:
http://www.geocities.com/Athens/Delphi/6422/wintereve.html /// Author: A.S. Pushkin
/// Porting C#: Abu Nezeq / M.S.
///
partial class WinterEvening
{
private Snow _snow = new Snow();
private SnowStorm _storm = new SnowStorm(_snow);
private Sky _sky = new Sky();
private OldLady _oldNanny = new OldLady("Arina", "Rodionovna");
private Author _author = new Author("A", "S", "Pushkin");
private Hut _ourHut = new Hut("Ancient");
private Cup _cup = new Cup();
private Thread drinkingActivity;
public WinterEvening()
{
try
{
_storm.Mist.Cover(_sky);
_snow.Whirlwinds.Spin();
(_storm as WildBeast).Call();
(_storm as Child).Cry();
(_storm as Thatch[]).Rustle(ourHut.Roof);
(_storm as Traveller).SetState(TravellerState.Overdue);
(_storm as Traveller).Knock(ourHut.Window);
_ourHut.Mournful = true;
_ourHut.Gloomy = true;
OldLadyReason reason = _oldNanny.GetReason(OldLadyState.Silent, new Location(ourHut.Window));
switch (reason)
{
case OldLadyReason.FatiquedByHowlOfTheTempest:
break;
case OldLadyReason.DrowsedUnderHumOfSpindle:
break;
default:
break;
}
drinkingActivity = new Thread(DrinkTogether);
drinkingActivity.Start();
Thread singingActivity = new Thread(Sing);
_storm.Mist.Cover(_sky);
_snow.Whirlwinds.Spin();
(_storm as WildBeast).Call();
(_storm as Child).Cry();
drinkingActivity = new Thread(DrinkTogether);
drinkingActivity.Start();
}
finally
{
drinkingActivity.Abort();
drinkingActivity.Join(1024);
}
}
public void DrinkTogether()
{
if(_cup != null)
{
try
{
while (true)
{
(_oldNanny as GoodFriend).Drink(Reason.Grief);
_author.Drink(Reason.Grief);
}
}
catch (ThreadAbortException ex)
{
SetHearState(HeartState.Gay);
}
}
}
public void Sing()
{
try
{
_oldNanny.Sing("Titmouse quietly living across the sea
");
_oldNanny.Sing("Girl who went for the water in the morning
");
}
catch (ThreadAbortException ex)
{
throw new ApplicationException("Can't sing", ex);
}
}
enum OldLadyReason
{
FatiquedByHowlOfTheTempest,
DrowsedUnderHumOfSpindle,
}
}}