![](/img/trans.png)
[英]WebSocket send and receive data asynchronously (using NuGet websocket-client)
[英]Send request to websocket server using JSON data
基本上,我在一台计算机上运行 OBS,我需要通过第二台计算机与它进行交互。 我正在使用OBS-WebSocket插件,它在 OBS 上创建一个 websocket 服务器来发送远程命令。
我的目标是每当我在第二台(远程)计算机上按下一个键时,就在 OBS 上设置可见/不可见的源。 我对那个按键部分没有问题。 我的问题是我不知道如何正确地向 websocket 插件发送请求/命令(它需要 JSON 格式,因为这是数据的格式)。
主要代码 (C#)
static void Main(string[] args)
{
using (var ws = new WebSocket("ws://192.168.1.1:1122"))
{
ws.Connect();
ws.OnMessage += (sender, e) =>
Console.WriteLine(e.Data);
ws.Send("REPLACE WITH JSON REQUEST DATA");
Console.ReadKey(true);
}
}
下面是每当我在 OBS 中打开或关闭源时从 websocket 接收到的数据示例。
您可以清楚地看到“可见性”是假的还是真的。
*这个“项目可见”是我需要弄乱的设置,以告诉 OBS 隐藏或显示源。*
↓ 来源在 OBS 中可见 ↓
{
"item-id": 10,
"item-name": "map",
"item-visible": true,
"scene-name": "ONHOLD",
"update-type": "SceneItemVisibilityChanged"
}
↓ 来源隐藏在 OBS 中 ↓
{
"item-id": 10,
"item-name": "map",
"item-visible": false,
"scene-name": "ONHOLD",
"update-type": "SceneItemVisibilityChanged"
}
您可以在官方 Github 存储库中查看示例测试用法。
如果您查看那里,您会看到应该解析e.Data
。 然后,您可以根据需要分配它,例如:
public string SetIsVisible(MessageEventArgs e, bool isVisible)
{
JObject body = JObject.Parse(e.Data);
body["item-visible"] = isVisible;
return body.ToString();
}
...然后将返回的字符串发送到您的 websocket:
ws.Send(SetIsVisible(e, isVisible)); // isVisible is boolean you should assign
PS 如果您想使用静态类型的 DTO,只需生成一个(例如此处):
public partial class OBSSource
{
[JsonProperty("item-id")]
public long ItemId { get; set; }
[JsonProperty("item-name")]
public string ItemName { get; set; }
[JsonProperty("item-visible")]
public bool ItemVisible { get; set; }
[JsonProperty("scene-name")]
public string SceneName { get; set; }
[JsonProperty("update-type")]
public string UpdateType { get; set; }
}
... 进而:
public string SetIsVisible(MessageEventArgs e, bool isVisible)
{
OBSSource obsSource = JsonConvert.DeserializeObject<OBSSource>(e.Data);
obsSource.ItemVisible = isVisible;
return JsonConvert.SerializeObject(obsSource);
}
...然后将其序列化到 websocket 中,如上所示。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.