使用C#控制Logitech SqueezeBox服务器

Logitech SqueezeBox服务器(SBS)是一个功能强大的音乐流媒体服务器,它能够将音乐流式传输到多个设备。本文将介绍如何使用C#控制SBS,并获取服务器的信息。虽然目前只实现了SBS的部分功能,但未来会添加更多功能。

有一台Squeezebox Duet,经常使用它。虽然它的控制器对于选择专辑或其他歌曲来说相当不错,但认为创建播放列表并不是它应该做的事情。可以使用SBS的网络服务器来创建播放列表,但就像控制器一样,并不是特别喜欢它。一个想法诞生了...

如何控制SqueezeBox服务器

SBS提供了两种控制服务器的方法。它提供了一个命令行界面(CLI),使用telnet接口,非常简单,但都是纯文本。另一种控制SBS的方法是向集成的网络服务器发送命令。命令和响应都是Json格式的数据。可以在SBS的本地文档中找到所有命令的完整列表:

为了从服务器检索信息,需要创建一个有效的CLI命令,将其发送到服务器,检索和反序列化响应,并通知调用者结果。以下代码就是完成这个任务所需的全部内容,将进一步解释代码的确切作用。

所有命令都应该是JSON数据,这些数据被发布到服务器的JsonRpc接口。使用Json.NET来序列化和反序列化命令和响应。Json.NET是一个很棒的实现,非常容易使用。非常感谢James Newton-King免费提供这个库。

现在有了一个有效的命令,必须将其发送到服务器。使用HttpHelper类来异步发布数据并检索响应。假设已经知道如何使用HttpWebRequest,所以将不会详细介绍如何从Web服务器获取数据。以下代码创建了HttpHelper,发送命令,并最终使用匿名委托来反序列化响应。

SqueezeBox存储库类是与SBS通信的主要类。每个异步命令(例如,检索专辑列表,获取服务器状态,获取连接的播放器列表)都有一个相应的事件来通知请求信息的调用者。真的很喜欢"约定优于配置",所以将不会直接调用事件,而是使用反射来获取事件,创建事件参数并触发它。这使得代码保持干净,添加新命令只需要几行代码。

现在所有的工作都完成了,实际上可以在一个示例应用程序中使用代码。为了做到这一点,首先必须在可以使用它之前设置squeezebox服务器的配置。然后确保想要使用的事件都被捕获。同时记住所有调用都是异步的,所以不能直接更新UI。相反,在UI线程上调用UI更新。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485