- 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<IHivasFigyelo> hivasFigyelok = new List<IHivasFigyelo>();
- 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);
- }
- }
- }