private static void ReceiveCallback(IAsyncResult result)
{
try
{
var client = result.AsyncState as UdpClient;
var endpoint = new IPEndPoint(IPAddress.Any, 0);
byte[] data = client.EndReceive(result, ref endpoint);
if (data != null && data.Length > 0)
{
string text = Encoding.ASCII.GetString(data);
if (text.StartsWith("!AUD:0,"))
{
text = text.Substring(7).Trim();
string[] parts = text.Split(',');
if (parts.Length >= 2)
{
switch (parts[0])
{
case "B":
// Background music
if (int.Parse(parts[1]) == 1)
{
backgroundPlayer.Resume();
}
else
{
backgroundPlayer.Pause();
}
break;
case "BV":
// Background volume
int vol = int.Parse(parts[1]);
if (vol >= 0 && vol <= 255)
{
backgroundVolume = (float)vol / 255.0f;
}
break;
case "FX":
try
{
effectManager.Play(parts[1] + ".wav");
}
catch (Exception ex)
{
Console.WriteLine("Exception when playing FX: " + ex.ToString());
// Ignore
}
break;
case "TC":
// Cue track
if (trackPlayer != null)
{
trackPlayer.Stop();
trackPlayer = null;
}
try
{
string filename = Path.Combine(Properties.Settings.Default.TracksPath,
parts[1] + ".wav");
trackPlayer = new TrackPlayer(xaudio2, new string[] { filename });
trackPlayer.Prepare();
}
catch (Exception ex)
{
Console.WriteLine("Exception when playing Track: " + ex.ToString());
// Ignore
}
break;
case "T":
// Track
if (trackPlayer != null)
{
if (int.Parse(parts[1]) == 1)
{
trackPlayer.Resume();
}
else
{
trackPlayer.Pause();
}
}
break;
}
}
}
}
client.BeginReceive(new AsyncCallback(ReceiveCallback), client);
}
catch
{
// Ignore
}
}