コード例 #1
0
ファイル: Program.cs プロジェクト: sheryllan/TFS
        public static void Main(string[] args)
        {
            var getNextCallTimer = new Timer
            {
                Enabled  = true,
                Interval = 5000
            };

            getNextCallTimer.Elapsed += GetNextCallTimerOnElapsed;
            getNextCallTimer.Start();

            MockAPI.RequestQueue = new Queue <WakeUpCallRequest>();
            _wakeupCallList      = new LinkedList <WakeUpCallRequest>();
            _requestDict         = new Dictionary <int, LinkedListNode <WakeUpCallRequest> >();
            while (true)
            {
                Console.WriteLine("Room Number:");
                int room;
                if (!Int32.TryParse(Console.ReadLine(), out room))
                {
                    Console.WriteLine("!!! Invalid room number, please enter an integer.");
                    continue;
                }

                Console.WriteLine("Wake-up Time(HH:mm:ss):");
                var inputTime = Console.ReadLine();
                if (string.IsNullOrEmpty(inputTime))
                {
                    MockAPI.RequestQueue.Enqueue(new WakeUpCallRequest(room));
                    Console.WriteLine("--> Room num [{0}] Cancel wakeup call", room);
                }
                else
                {
                    TimeSpan time;
                    while (!TimeSpan.TryParse(inputTime, out time))
                    {
                        Console.WriteLine("!!! Invalid wake-up time, please enter a datetime.");
                        inputTime = Console.ReadLine();
                    }

                    Console.WriteLine("--> Room num [{0}] call at: {1}", room, time);
                    DateTime date = time < MockAPI.getCurrenTime() ? DateTime.Today.AddDays(1) : DateTime.Today;
                    MockAPI.RequestQueue.Enqueue(new WakeUpCallRequest(room, date + time));
                }
            }
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: sheryllan/TFS
        private static void GetNextCallTimerOnElapsed(object sender, ElapsedEventArgs elapsedEventArgs)
        {
            var request = MockAPI.getNextCallRequest();

            if (request != null)
            {
                // when the request of the room is cancelled
                if (request.WakeUpTime == null)
                {
                    RemoveFromSortedWakeUpList(request);
                }
                // when the request of the room is not cancelled
                else
                {
                    RemoveFromSortedWakeUpList(request);
                    InsertIntoSortedWakeUpList(request);
                }
            }

            Alarm();
        }
コード例 #3
0
ファイル: Program.cs プロジェクト: sheryllan/TFS
 private static void Alarm()
 {
     if (Monitor.TryEnter(_wakeupCallList))
     {
         try
         {
             if (_wakeupCallList.First == null)
             {
                 return;
             }
             WakeUpCallRequest firstCallRequest = _wakeupCallList.First.Value;
             DateTime          earliestCallTime = firstCallRequest.WakeUpTime.Value;
             if (DateTime.Today + MockAPI.getCurrenTime() >= earliestCallTime)
             {
                 MockAPI.sendAlarmCall(firstCallRequest.RoomNo);
                 RemoveFromSortedWakeUpList(firstCallRequest);
             }
         }
         finally
         {
             Monitor.Exit(_wakeupCallList);
         }
     }
 }