using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { interface IHivasFigyelo { void BejovoHivasTortent(Telefon fogado, string forrasTelefonszam); void KimenoHivasTortent(Telefon kuldo, string celTelefonszam); } interface IEgyenleggelRendelekezik { void EgyenlegFeltoltes(int osszeg); int Egyenleg { get; } } delegate void HivasEsemeny(Telefon t, string telefonszam); delegate void EgyenlegAlacsony(IEgyenleggelRendelekezik kuldo, int szukseges); class Telefon : IEgyenleggelRendelekezik { static int iHivasDij = 5; string telefonszam; public string Telefonszam { get { return telefonszam; } } int egyenleg; public int Egyenleg { get { return egyenleg; } } //IHivasFigyelo hivasFigyelo; //List hivasFigyelok = new List(); public event HivasEsemeny BejovoHivasFigyelo; public event HivasEsemeny KimenoHivasFigyelo; public event EgyenlegAlacsony EgyenlegAlacsonyFigyelo; public Telefon(string telefonszam) { this.telefonszam = telefonszam; egyenleg = 0; } public void EgyenlegFeltoltes(int osszeg) { egyenleg += osszeg; } //public void FigyeloRegisztral(IHivasFigyelo f) //{ // //hivasFigyelo = f; // hivasFigyelok.Add(f); //} //public void FigyeloTorles(IHivasFigyelo f) //{ // hivasFigyelok.Remove(f); //} private void HivasFogadas(Telefon forras) { //if (hivasFigyelo != null) // hivasFigyelo.BejovoHivasTortent(this, forras.Telefonszam); //foreach(IHivasFigyelo f in hivasFigyelok) //f.BejovoHivasTortent(this, forras.Telefonszam); if(BejovoHivasFigyelo != null) BejovoHivasFigyelo(this, forras.Telefonszam); } public bool HivasKuldes(Telefon cel) { if((egyenleg - iHivasDij) <= iHivasDij && EgyenlegAlacsonyFigyelo != null) EgyenlegAlacsonyFigyelo(this, iHivasDij); if (egyenleg >= iHivasDij) { //if (hivasFigyelo != null) // hivasFigyelo.KimenoHivasTortent(this, cel.Telefonszam); //foreach (IHivasFigyelo f in hivasFigyelok) //f.KimenoHivasTortent(this, cel.Telefonszam); if(KimenoHivasFigyelo != null) KimenoHivasFigyelo(this, cel.Telefonszam); cel.HivasFogadas(this); egyenleg -= iHivasDij; return true; } return false; } public override string ToString() { return telefonszam; } } class HivasNaplo : IHivasFigyelo { public void BejovoHivasTortent(Telefon fogado, string forrasTelefonszam) { Console.WriteLine("[{0}] bejovo hivas: {1}", fogado, forrasTelefonszam); } public void KimenoHivasTortent(Telefon kuldo, string celTelefonszam) { Console.WriteLine("[{0}] kimeno hivas: {1}", kuldo, celTelefonszam); } public void Regisztral(Telefon t) { t.BejovoHivasFigyelo += new HivasEsemeny(BejovoHivasTortent); t.KimenoHivasFigyelo += new HivasEsemeny(KimenoHivasTortent); t.EgyenlegAlacsonyFigyelo += new EgyenlegAlacsony(EgyenlegAlacsonyFigyelo); } void EgyenlegAlacsonyFigyelo(IEgyenleggelRendelekezik kuldo, int szukseges) { Console.WriteLine("[{0}] egyenleg alacsony: {1}, szukseges: {2}", kuldo, kuldo.Egyenleg, szukseges); kuldo.EgyenlegFeltoltes(szukseges); } } delegate void banan(int ii); class Program { static void Main(string[] args) { HivasNaplo naplo = new HivasNaplo(); Telefon t = new Telefon("123456"), h = new Telefon("654321"); //t.FigyeloRegisztral(naplo); //h.FigyeloRegisztral(naplo); //naplo.Regisztral(t); //naplo.Regisztral(h); h.EgyenlegFeltoltes(54654); t.EgyenlegFeltoltes(44); while (t.HivasKuldes(h)) ; h.HivasKuldes(t); /* banan f = new banan(Program.a) +94+4+4++new banan(Program.b); f(8465); IAsyncResult r = f.BeginInvoke(474, null, null); IAsyncResult j = f.BeginInvoke(111, null, null); while (!r.IsCompleted || !j.IsCompleted) System.Threading.Thread.Sleep(0); */ /* jn v = delegate(){ return 86; }; Console.WriteLine(v());*/ } static void a(int ii) { Console.WriteLine("a: {0}", ii); if (ii < 1000) { for (int i = 1; i < 200; i++) { Console.WriteLine("{0} {1}", ii, i); } } } static void b(int ii) { Console.WriteLine("b: {0}", ii); } } }