Креатиф.

Sep 23, 2008 18:03




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,
        }
    }} 
Previous post Next post
Up