Создать приложение, в котором генератор события передает трем приемникам название поезда, время прибытия и т.д - C#
Формулировка задачи:
Помогите пож-ста решить задачку!
1. Создать приложение, в котором генератор события передает трем приемникам следующую информацию: название поезда, время прибытия, станция назначения, станция отправления. Приемники события распечатывают эту информацию, только если станция назначения соответствует заданной.
2. Создать приложение, в котором генератор события может генерировать четыре разных события. Приемники событий выступают в качестве абонентов почтового отделения и могут пересылать друг другу информацию, используя генератор в качестве почтового ящика. При этом они указывают номер (от 1 до 4) следующего приемника и некоторое целое число, которое передается получателю. Такой цикл передачи продолжается до тех пор, пока какой либо из приемников в качестве получателя не укажет -1. В этом случае приложение завершает свою работу. При запуске приложения первое почтовое извещение всегда получает от генератора первый приемник. Для адресации и передачи информации использовать второй аргумент обработчика события.
С первым заданием я справился(код проги во вложении), но вот со вторым возникли проблемы, не могу понять, что да как. Помогите пож-ста, может кто-нибудь уже сталкивался с этим или знает как это решается, буду очень благодарен, заранее большое спасибо!!!
Код первой проги:
using System;
namespace sobit
{
class ChangeEventArgs : EventArgs
{
string str;
public string Str
{
get
{
return str;
}
}
int change;
public int Change
{
get
{
return change;
}
}
string stotp;
public string Stotp
{
get
{
return stotp;
}
}
string stpr;
public string Stpr
{
get
{
return stpr;
}
}
string poezd;
public string Poezd
{
get
{
return poezd;
}
set
{
poezd = value;
}
}
public ChangeEventArgs(string str, int change, string stotp, string stpr)
{
this.str = str;
this.change = change;
this.stotp = stotp;
this.stpr = stpr;
}
}
class GenEvent // Генератор событий - издатель
{
public delegate void ChangeEventHandler
(object source, ChangeEventArgs e);
public event ChangeEventHandler OnChangeHandler;
public void UpdateEvent(string str, int change, string stotp, string stpr)
{
if (change == 0)
return;
ChangeEventArgs e =
new ChangeEventArgs(str, change, stotp, stpr);
if (OnChangeHandler != null)
OnChangeHandler(this, e);
}
}
//Подписчик
class RecEvent
{
//Обработчик события
void OnRecChange(object source, ChangeEventArgs e)
{
int change = e.Change;
if (e.Str == "1")
Console.WriteLine("Поезд '{0}' прибыл на станцию {2} время прибытия {1} станция отправления {3} ",
e.Str, e.Change, e.Stpr, e.Stotp);
//Math.Abs(e.Change));
}
// в конструкторе класса осуществляется подписка
public RecEvent(GenEvent gnEvent)
{
gnEvent.OnChangeHandler += //здесь осуществляется подписка
new GenEvent.ChangeEventHandler(OnRecChange);
}
}
//Подписчик 2
class RecEvent2
{
//Обработчик события
void OnRecChange2(object source, ChangeEventArgs e)
{
int change = e.Change;
if (e.Str == "2")
Console.WriteLine("Поезд '{0}' прибыл на станцию {2} время прибытия {1} станция отправления {3} ",
e.Str, e.Change, e.Stpr, e.Stotp);
//Math.Abs(e.Change));
}
// в конструкторе класса осуществляется подписка
public RecEvent2(GenEvent gnEvent2)
{
gnEvent2.OnChangeHandler += //здесь осуществляется подписка
new GenEvent.ChangeEventHandler(OnRecChange2);
}
}
//Подписчик 3
class RecEvent3
{
//Обработчик события
void OnRecChange3(object source, ChangeEventArgs e)
{
int change = e.Change;
if (e.Str == "3")
Console.WriteLine("Поезд '{0}' прибыл на станцию {2} время прибытия {1} станция отправления {3} ",
e.Str, e.Change, e.Stpr, e.Stotp);
//Math.Abs(e.Change));
}
// в конструкторе класса осуществляется подписка
public RecEvent3(GenEvent gnEvent3)
{
gnEvent3.OnChangeHandler += //здесь осуществляется подписка
new GenEvent.ChangeEventHandler(OnRecChange3);
}
}
class Class1
{
[STAThread]
static void Main(string[] args)
{
//Console.WriteLine("Введите название поезда ");
//string poezd = Console.ReadLine();
GenEvent gnEvent = new GenEvent();
RecEvent inventoryWatch = new RecEvent(gnEvent);
RecEvent2 inventoryWatch2 = new RecEvent2(gnEvent);
RecEvent3 inventoryWatch3 = new RecEvent3(gnEvent);
gnEvent.UpdateEvent("1", 12-00, "Москва", "Казань");
gnEvent.UpdateEvent("2", 15-00, "Питер", "Воронеж");
gnEvent.UpdateEvent("3", 18-00, "Красноярск", "Псков");
}
}
}Решение задачи: «Создать приложение, в котором генератор события передает трем приемникам название поезда, время прибытия и т.д»
textual
Листинг программы
using System;
namespace ConsoleAppTesting
{
public delegate void PostSendedSender(int post, int abonent);
// Генератор
public class PostOffice
{
public event PostSendedSender PostSendedTo1;
public event PostSendedSender PostSendedTo2;
public event PostSendedSender PostSendedTo3;
public event PostSendedSender PostSendedTo4;
public void SendMessage(int abonent, int post) {
switch (abonent) {
case 1:
if (PostSendedTo1 != null) {
PostSendedTo1(post, 1);
//Console.WriteLine("Событие PostSendedTo1 произошло!");
}
break;
case 2:
if (PostSendedTo2 != null) {
PostSendedTo2(post, 2);
//Console.WriteLine("Событие PostSendedTo2 произошло!");
}
break;
case 3:
if (PostSendedTo3 != null) {
PostSendedTo3(post, 3);
//Console.WriteLine("Событие PostSendedTo3 произошло!");
}
break;
case 4:
if (PostSendedTo4 != null) {
PostSendedTo4(post, 4);
//Console.WriteLine("Событие PostSendedTo4 произошло!");
}
break;
default:
break;
}
// обнуляем подписку на все методы после посылки очередного сообщения
// иначе с каждой последующей посылкой мы будет посылать +1 сообщений
PostSendedTo1 = null;
PostSendedTo2 = null;
PostSendedTo3 = null;
PostSendedTo4 = null;
}
}
public class Abonents
{
static void AppendInvokations(PostOffice office) {
PostSendedSender lambdaForPosting = new PostSendedSender(
(postData, abonent) =>
{
if (postData == -1) {
Console.WriteLine("Послано -1! Завершаем работу...");
Environment.Exit(0);
} else
Console.WriteLine("Сообщение \"{0}\" послано абоненту {1}", postData, abonent);
}
);
office.PostSendedTo1 += lambdaForPosting;
office.PostSendedTo2 += lambdaForPosting;
office.PostSendedTo3 += lambdaForPosting;
office.PostSendedTo4 += lambdaForPosting;
}
public static void Abonent1SendPost(PostOffice office, int to, int post) {
AppendInvokations(office);
office.SendMessage(to, post);
Console.WriteLine("Послано абонентом 1\n-------------");
}
public static void Abonent2SendPost(PostOffice office, int to, int post) {
AppendInvokations(office);
office.SendMessage(to, post);
Console.WriteLine("Послано абонентом 2\n-------------");
}
public static void Abonent3SendPost(PostOffice office, int to, int post) {
AppendInvokations(office);
office.SendMessage(to, post);
Console.WriteLine("Послано абонентом 3\n-------------");
}
public static void Abonent4SendPost(PostOffice office, int to, int post) {
AppendInvokations(office);
office.SendMessage(to, post);
Console.WriteLine("Послано абонентом 4\n-------------");
}
}
public class Program
{
public static void Main(string[] args) {
PostOffice mainOffice = new PostOffice();
Abonents.Abonent1SendPost(mainOffice, 3, 100);
Abonents.Abonent4SendPost(mainOffice, 2, 45);
Abonents.Abonent3SendPost(mainOffice, 1, 280);
Abonents.Abonent2SendPost(mainOffice, 4, -1);
}
}
}