Files
qController/qController.Standard/Classes/Communication/QParser.cs
T

92 lines
2.6 KiB
C#

using System;
using Rug.Osc;
using Newtonsoft.Json.Linq;
namespace qController
{
public class CueEventArgs : EventArgs
{
public QCue SelectedCue
{
get;
set;
}
}
public class AudioLevelArgs : EventArgs
{
public JToken levels
{
get;
set;
}
}
public class QParser
{
public QParser()
{
}
public delegate void SelectedCueUpdatedHandler(object source, CueEventArgs args);
public delegate void AudioLevelsUpdatedHandler(object source, AudioLevelArgs args);
public event SelectedCueUpdatedHandler SelectedCueUpdated;
public event AudioLevelsUpdatedHandler AudioLevelsUpdated;
public void ParsePacket(OscPacket packet){
OscMessage msg = (OscMessage)packet;
if (msg.Address.Contains("selectedCues"))
ParseSelectedCueInfo(msg);
else if (msg.Address.Contains("notes"))
ParseNoteInfo(msg);
else if (msg.Address.Contains("levels"))
ParseLevelInfo(msg);
}
public void OnPacketReceived(object source, PacketEventArgs args){
//Console.WriteLine("Packet Received");
ParsePacket(args.Packet);
}
public void ParseSelectedCueInfo(OscMessage msg){
JArray selectedCues = (JArray)OSC2JSON(msg);
if(selectedCues.Count > 0){
foreach(JObject item in selectedCues){
QCue parsedCue = new QCue(item);
OnSelectedCueUpdated(parsedCue);
}
}else{
Console.WriteLine("No Cues Selected");
}
}
public void ParseNoteInfo(OscMessage msg){
//JToken cueInfo = OSC2JSON(msg);
}
public void ParseLevelInfo(OscMessage msg){
JToken levels = OSC2JSON(msg)[0];
OnAudioLevelsUpdated(levels);
}
public JToken OSC2JSON(OscMessage Msg){
JObject json = JObject.Parse(Msg.ToArray()[0].ToString());
return json.GetValue("data");
}
protected virtual void OnSelectedCueUpdated(QCue cue)
{
if (SelectedCueUpdated != null)
SelectedCueUpdated(this, new CueEventArgs() { SelectedCue = cue });
}
protected virtual void OnAudioLevelsUpdated(JToken audioLevels){
if (AudioLevelsUpdated != null)
AudioLevelsUpdated(this, new AudioLevelArgs { levels = audioLevels });
}
}
}