Отправьте запрос на сервер веб-сокетов, используя данные JSON - PullRequest
0 голосов
/ 21 января 2020

По сути, у меня на компьютере работает OBS, и мне нужно взаимодействовать с ним через второй компьютер. Я использую плагин OBS-WebSocket , который создает сервер веб-сокетов на OBS для отправки удаленных команд.

Моя цель - установить видимый / невидимый источник на 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.

Вы можете ясно видеть, что «видимость» является либо ложной, либо истинной.

* Этот «видимый элемент» - это настройка, с которой мне нужно связываться, чтобы сказать 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"
}

1 Ответ

0 голосов
/ 21 января 2020

Вы можете увидеть пример тестового использования в официальном репозитории Github.

Если вы посмотрите туда, вы увидите, что этот e.Data должен быть проанализирован. Затем вы можете назначить его по мере необходимости, например:

public string SetIsVisible(MessageEventArgs e, bool isVisible)
{
    JObject body = JObject.Parse(e.Data);
    body["item-visible"] = isVisible;
    return body.ToString();
}

... и затем просто отправить возвращенную строку в ваш веб-сокет:

ws.Send(SetIsVisible(e, isVisible)); // isVisible is boolean you should assign

PS Если вы хотите для работы с DTO типа STATI c просто сгенерируйте его (например, здесь ):

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);
}

... а затем отправьте его в серию, как указано выше.

...