public override PreparedData PrepareSite(UriExt url) { switch (url.QueryParam["op"]) { default: case null: break; case "volume": var volumeStr = url.QueryParam["volume"]; int volume; if (int.TryParse(volumeStr, out volume)) { audio.Volume = volume; } break; case "prev": playMgr.Previous(new InvokerData()); break; // HACK: use token-system to determine user when its available case "play": audio.Pause = !audio.Pause; break; case "next": playMgr.Next(new InvokerData()); break; // HACK: use token-system to determine user when its available case "loop": audio.Repeat = !audio.Repeat; break; case "seek": var seekStr = url.QueryParam["pos"]; double seek; if (double.TryParse(seekStr, out seek)) { var pos = TimeSpan.FromSeconds(seek); if (pos >= TimeSpan.Zero && pos <= audio.Length) { audio.Position = pos; } } break; } return(new PreparedData(0, new byte[0])); }