繁体   English   中英

使用 JSON 数据向 websocket 服务器发送请求

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM