Skip to content

Commit

Permalink
Merge pull request #23 from SuchByte/feature/add-websocket5-support
Browse files Browse the repository at this point in the history
Adds OBS WebSocket 5 support
  • Loading branch information
RecklessBoon committed Sep 14, 2022
2 parents 016f5e0 + 6f0166e commit 786d773
Show file tree
Hide file tree
Showing 27 changed files with 1,489 additions and 277 deletions.
17 changes: 14 additions & 3 deletions Actions/SaveReplayBufferAction.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,20 @@ public class SaveReplayBufferAction : PluginAction

public override void Trigger(string clientId, ActionButton actionButton)
{
if (!PluginInstance.Main.OBS.IsConnected) return;
PluginInstance.Main.OBS.SaveReplayBuffer();

if (PluginInstance.Main.OBS4 != null) TriggerOBS4(clientId, actionButton);
else if (PluginInstance.Main.OBS5 != null) TriggerOBS5(clientId, actionButton);
}

protected void TriggerOBS4(string clientId, ActionButton actionButton)
{
if (!PluginInstance.Main.OBS4.IsConnected) return;
PluginInstance.Main.OBS4.SaveReplayBuffer();
}

protected void TriggerOBS5(string clientId, ActionButton actionButton)
{
if (!PluginInstance.Main.OBS5.IsConnected) return;
_ = PluginInstance.Main.OBS5.OutputsRequests.SaveReplayBufferAsync();
}
}
}
46 changes: 42 additions & 4 deletions Actions/SetAudioMutedAction.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;

namespace SuchByte.OBSWebSocketPlugin.Actions
{
Expand All @@ -21,23 +22,60 @@ public class SetAudioMutedAction : PluginAction

public override void Trigger(string clientId, ActionButton actionButton)
{
if (!PluginInstance.Main.OBS.IsConnected) return;
if (PluginInstance.Main.OBS4 != null) TriggerOBS4(clientId, actionButton);
else if (PluginInstance.Main.OBS5 != null) TriggerOBS5(clientId, actionButton);
}

protected void TriggerOBS4(string clientId, ActionButton actionButton)
{
if (!PluginInstance.Main.OBS4.IsConnected) return;
if (!String.IsNullOrWhiteSpace(this.Configuration))
{
try
{
JObject configurationObject = JObject.Parse(this.Configuration);
string sourceName = configurationObject["sourceName"].ToString();
switch (configurationObject["method"].ToString())
{
case "mute":
PluginInstance.Main.OBS4.SetMute(sourceName, true);
break;
case "unmute":
PluginInstance.Main.OBS4.SetMute(sourceName, false);
break;
case "toggle":
PluginInstance.Main.OBS4.SetMute(sourceName, !PluginInstance.Main.OBS4.GetMute(sourceName));
break;
}
}
catch { }
}
}

protected void TriggerOBS5(string clientId, ActionButton actionButton)
{
if(!PluginInstance.Main.OBS5.IsConnected) return;
if (!String.IsNullOrWhiteSpace(this.Configuration))
{
try
{

JObject configurationObject = JObject.Parse(this.Configuration);
string sourceName = configurationObject["sourceName"].ToString();
switch (configurationObject["method"].ToString())
{
case "mute":
PluginInstance.Main.OBS.SetMute(sourceName, true);
_ = PluginInstance.Main.OBS5.InputsRequests.SetInputMuteAsync(sourceName, true);
break;
case "unmute":
PluginInstance.Main.OBS.SetMute(sourceName, false);
_ = PluginInstance.Main.OBS5.InputsRequests.SetInputMuteAsync(sourceName, false);
break;
case "toggle":
PluginInstance.Main.OBS.SetMute(sourceName, !PluginInstance.Main.OBS.GetMute(sourceName));
_ = Task.Run(async () =>
{
var mutedState = await PluginInstance.Main.OBS5.InputsRequests.GetInputMuteAsync(sourceName);
await PluginInstance.Main.OBS5.InputsRequests.SetInputMuteAsync(sourceName, !mutedState.InputMuted);
});
break;
}
}
Expand Down
50 changes: 46 additions & 4 deletions Actions/SetFilterStateAction.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;

namespace SuchByte.OBSWebSocketPlugin.Actions
{
Expand All @@ -21,7 +22,44 @@ public class SetFilterStateAction : PluginAction

public override void Trigger(string clientId, ActionButton actionButton)
{
if (!PluginInstance.Main.OBS.IsConnected) return;
if (PluginInstance.Main.OBS4 != null) TriggerOBS4(clientId, actionButton);
else if (PluginInstance.Main.OBS5 != null) TriggerOBS5(clientId, actionButton);
}

protected void TriggerOBS4(string clientId, ActionButton actionButton)
{
if (!PluginInstance.Main.OBS4.IsConnected) return;
if (!String.IsNullOrWhiteSpace(this.Configuration))
{
try
{
JObject configurationObject = JObject.Parse(this.Configuration);
string sceneName = configurationObject["sceneName"].ToString();
string sourceName = configurationObject["sourceName"].ToString();
string filterName = configurationObject["filterName"].ToString();

string targetName = String.IsNullOrWhiteSpace(sourceName) ? sceneName : sourceName;

switch (configurationObject["method"].ToString())
{
case "hide":
PluginInstance.Main.OBS4.SetSourceFilterVisibility(targetName, filterName, false);
break;
case "show":
PluginInstance.Main.OBS4.SetSourceFilterVisibility(targetName, filterName, true);
break;
case "toggle":
PluginInstance.Main.OBS4.SetSourceFilterVisibility(targetName, filterName, !PluginInstance.Main.OBS4.GetSourceFilterInfo(targetName, filterName).IsEnabled);
break;
}
}
catch { }
}
}

protected void TriggerOBS5(string clientId, ActionButton actionButton)
{
if (!PluginInstance.Main.OBS5.IsConnected) return;
if (!String.IsNullOrWhiteSpace(this.Configuration))
{
try
Expand All @@ -36,13 +74,17 @@ public override void Trigger(string clientId, ActionButton actionButton)
switch (configurationObject["method"].ToString())
{
case "hide":
PluginInstance.Main.OBS.SetSourceFilterVisibility(targetName, filterName, false);
_ = PluginInstance.Main.OBS5.FiltersRequests.SetSourceFilterEnabledAsync(targetName, filterName, false);
break;
case "show":
PluginInstance.Main.OBS.SetSourceFilterVisibility(targetName, filterName, true);
_ = PluginInstance.Main.OBS5.FiltersRequests.SetSourceFilterEnabledAsync(targetName, filterName, true);
break;
case "toggle":
PluginInstance.Main.OBS.SetSourceFilterVisibility(targetName, filterName, !PluginInstance.Main.OBS.GetSourceFilterInfo(targetName, filterName).IsEnabled);
_ = Task.Run(async () =>
{
var filter = await PluginInstance.Main.OBS5.FiltersRequests.GetSourceFilterAsync(sourceName, filterName);
await PluginInstance.Main.OBS5.FiltersRequests.SetSourceFilterEnabledAsync(sourceName, filterName, !filter.FilterEnabled);
});
break;
}
}
Expand Down
27 changes: 24 additions & 3 deletions Actions/SetProfileAction.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,35 @@ public class SetProfileAction : PluginAction

public override void Trigger(string clientId, ActionButton actionButton)
{
if (!PluginInstance.Main.OBS.IsConnected) return;
if (PluginInstance.Main.OBS4 != null) TriggerOBS4(clientId, actionButton);
else if (PluginInstance.Main.OBS5 != null) TriggerOBS5(clientId, actionButton);
}

protected void TriggerOBS4(string clientId, ActionButton actionButton)
{
if (!PluginInstance.Main.OBS4.IsConnected) return;
if (!String.IsNullOrWhiteSpace(this.Configuration))
{
try
{
JObject configurationObject = JObject.Parse(this.Configuration);
PluginInstance.Main.OBS4.SetCurrentProfile(configurationObject["profile"].ToString());
}
catch { }
}
}

protected void TriggerOBS5(string clientId, ActionButton actionButton)
{
if (!PluginInstance.Main.OBS5.IsConnected) return;
if (!String.IsNullOrWhiteSpace(this.Configuration))
{
try
{
JObject configurationObject = JObject.Parse(this.Configuration);
PluginInstance.Main.OBS.SetCurrentProfile(configurationObject["profile"].ToString());
} catch { }
_ = PluginInstance.Main.OBS5.ConfigRequests.SetCurrentProfileAsync(configurationObject["profile"].ToString());
}
catch { }
}
}

Expand Down
39 changes: 35 additions & 4 deletions Actions/SetRecordingStateAction.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,38 @@ public class SetRecordingStateAction : PluginAction

public override void Trigger(string clientId, ActionButton actionButton)
{
if (!PluginInstance.Main.OBS.IsConnected) return;
if (PluginInstance.Main.OBS4 != null) TriggerOBS4(clientId, actionButton);
else if (PluginInstance.Main.OBS5 != null) TriggerOBS5(clientId, actionButton);
}

protected void TriggerOBS4(string clientId, ActionButton actionButton)
{
if (!PluginInstance.Main.OBS4.IsConnected) return;
if (!String.IsNullOrWhiteSpace(this.Configuration))
{
try
{
JObject configurationObject = JObject.Parse(this.Configuration);
switch (configurationObject["method"].ToString())
{
case "start":
PluginInstance.Main.OBS4.StartRecording();
break;
case "stop":
PluginInstance.Main.OBS4.StopRecording();
break;
case "toggle":
PluginInstance.Main.OBS4.ToggleRecording();
break;
}
}
catch { }
}
}

protected void TriggerOBS5(string clientId, ActionButton actionButton)
{
if (!PluginInstance.Main.OBS5.IsConnected) return;
if (!String.IsNullOrWhiteSpace(this.Configuration))
{
try
Expand All @@ -30,13 +61,13 @@ public override void Trigger(string clientId, ActionButton actionButton)
switch (configurationObject["method"].ToString())
{
case "start":
PluginInstance.Main.OBS.StartRecording();
_ = PluginInstance.Main.OBS5.RecordRequests.StartRecordAsync();
break;
case "stop":
PluginInstance.Main.OBS.StopRecording();
_ = PluginInstance.Main.OBS5.RecordRequests.StopRecordAsync();
break;
case "toggle":
PluginInstance.Main.OBS.ToggleRecording();
_ = PluginInstance.Main.OBS5.RecordRequests.ToggleRecordAsync();
break;
}
}
Expand Down
39 changes: 35 additions & 4 deletions Actions/SetReplayBufferState.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,38 @@ public class SetReplayBufferState : PluginAction

public override void Trigger(string clientId, ActionButton actionButton)
{
if (!PluginInstance.Main.OBS.IsConnected) return;
if (PluginInstance.Main.OBS4 != null) TriggerOBS4(clientId, actionButton);
else if (PluginInstance.Main.OBS5 != null) TriggerOBS5(clientId, actionButton);
}

protected void TriggerOBS4(string clientId, ActionButton actionButton)
{
if (!PluginInstance.Main.OBS4.IsConnected) return;
if (!String.IsNullOrWhiteSpace(this.Configuration))
{
try
{
JObject configurationObject = JObject.Parse(this.Configuration);
switch (configurationObject["method"].ToString())
{
case "start":
PluginInstance.Main.OBS4.StartReplayBuffer();
break;
case "stop":
PluginInstance.Main.OBS4.StopReplayBuffer();
break;
case "toggle":
PluginInstance.Main.OBS4.ToggleReplayBuffer();
break;
}
}
catch { }
}
}

protected void TriggerOBS5(string clientId, ActionButton actionButton)
{
if (!PluginInstance.Main.OBS5.IsConnected) return;
if (!String.IsNullOrWhiteSpace(this.Configuration))
{
try
Expand All @@ -30,13 +61,13 @@ public override void Trigger(string clientId, ActionButton actionButton)
switch (configurationObject["method"].ToString())
{
case "start":
PluginInstance.Main.OBS.StartReplayBuffer();
_ = PluginInstance.Main.OBS5.OutputsRequests.StartReplayBufferAsync();
break;
case "stop":
PluginInstance.Main.OBS.StopReplayBuffer();
_ = PluginInstance.Main.OBS5.OutputsRequests.StopReplayBufferAsync();
break;
case "toggle":
PluginInstance.Main.OBS.ToggleReplayBuffer();
_ = PluginInstance.Main.OBS5.OutputsRequests.ToggleReplayBufferAsync();
break;
}
}
Expand Down
24 changes: 22 additions & 2 deletions Actions/SetSceneAction.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,33 @@ public class SetSceneAction : PluginAction

public override void Trigger(string clientId, ActionButton actionButton)
{
if (!PluginInstance.Main.OBS.IsConnected) return;
if (PluginInstance.Main.OBS4 != null) TriggerOBS4(clientId, actionButton);
else if (PluginInstance.Main.OBS5 != null) TriggerOBS5(clientId, actionButton);
}

protected void TriggerOBS4(string clientId, ActionButton actionButton)
{
if (!PluginInstance.Main.OBS4.IsConnected) return;
if (!String.IsNullOrWhiteSpace(this.Configuration))
{
try
{
JObject configurationObject = JObject.Parse(this.Configuration);
PluginInstance.Main.OBS4.SetCurrentScene(configurationObject["scene"].ToString());
}
catch { }
}
}

protected void TriggerOBS5(string clientId, ActionButton actionButton)
{
if (!PluginInstance.Main.OBS5.IsConnected) return;
if (!String.IsNullOrWhiteSpace(this.Configuration))
{
try
{
JObject configurationObject = JObject.Parse(this.Configuration);
PluginInstance.Main.OBS.SetCurrentScene(configurationObject["scene"].ToString());
_ = PluginInstance.Main.OBS5.ScenesRequests.SetCurrentProgramSceneAsync(configurationObject["scene"].ToString());
}
catch { }
}
Expand Down
Loading

0 comments on commit 786d773

Please sign in to comment.