using System.Collections.Generic;
using System.Threading.Tasks;
namespace Assignment2_advanced
public static void Main()
Queue<Customer> customerQueue = new Queue<Customer>();
customerQueue.Enqueue(new Customer("Joe", "Smith"));
customerQueue.Enqueue(new Customer(" Jane", "Jones"));
customerQueue.Enqueue(new Customer("Jack", "Jump"));
customerQueue.Enqueue(new Customer(" Jeff", "Run"));
customerQueue.Enqueue(new Customer("John", "Winston"));
var tablehandle = new HandleAlarmTable();
var alarm = new AlarmTable();
alarm.AlarmTableEvent += tablehandle.HandleAlarm;
var handCust = new handlecustomer();
while (customerQueue.Count > 0)
Customer fullname = customerQueue.Dequeue();
Customer cust = new Customer(fullname.Firstname, fullname.Lastname);
cust.CustomerEvent += handCust.HandleAlarmCust;
public class handlecustomer
public void HandleAlarmCust(object sender, CustEventArgs e)
Console.WriteLine(" {0} {1} got table",e.firstname,e.lastname, e.ord_meal );
Console.WriteLine(" {0} {1} is having appetizer", e.firstname, e.lastname, e.ord_meal);
Console.WriteLine(" {0} {1} is having main", e.firstname, e.lastname, e.ord_meal);
Console.WriteLine(" {0} {1} is having desert", e.firstname, e.lastname, e.ord_meal);
Console.WriteLine(" {0} {1} is having done.", e.firstname, e.lastname, e.ord_meal);
var tablehandle = new HandleAlarmTable();
var alarm = new AlarmTable();
alarm.AlarmTableEvent += tablehandle.HandleAlarm;
public delegate void CustomerDel(object sender, CustEventArgs e);
public enum meals { none, appetizer, main, desert, done };
public event CustomerDel CustomerEvent;
public string Firstname { get; set; }
public string Lastname { get; set; }
if (CustomerEvent != null)
CustomerEvent(this, new CustEventArgs(meal.ToString() ,Firstname , Lastname));
public Customer(string firstname, string lastname)
this.Firstname = firstname;
this.Lastname = lastname;
public class CustEventArgs : EventArgs
public CustEventArgs(string meal ,string Firstname , string Lastname)
this.firstname = Firstname;
this.lastname = Lastname;
public class HandleAlarmTable
public void HandleAlarm(object sender, table e)
Console.WriteLine("table is {0}", e.message);
public event AlarmTableDel AlarmTableEvent;
AlarmTableDel alarm = AlarmTableEvent;
if (AlarmTableEvent != null)
alarm(this, new table("open"));
public delegate void AlarmTableDel(object source, table e);
public class table : EventArgs
public table(string Message)