diff --git a/Artemis/Artemis/Artemis.csproj b/Artemis/Artemis/Artemis.csproj
index cc1b55ec7..c9451b7ee 100644
--- a/Artemis/Artemis/Artemis.csproj
+++ b/Artemis/Artemis/Artemis.csproj
@@ -379,6 +379,7 @@
GtaVView.xaml
+
diff --git a/Artemis/Artemis/Modules/Games/LightFx/Data/LightFxState.cs b/Artemis/Artemis/Modules/Games/LightFx/Data/LightFxState.cs
new file mode 100644
index 000000000..287b8d075
--- /dev/null
+++ b/Artemis/Artemis/Modules/Games/LightFx/Data/LightFxState.cs
@@ -0,0 +1,40 @@
+using MoonSharp.Interpreter;
+
+namespace Artemis.Modules.Games.LightFx.Data
+{
+ [MoonSharpUserData]
+ public class LightFxState
+ {
+ public Device[] devices { get; set; }
+ public string game { get; set; }
+ public Mask mask { get; set; }
+ }
+
+ [MoonSharpUserData]
+ public class Device
+ {
+ public Light[] lights { get; set; }
+ }
+
+ [MoonSharpUserData]
+ public class Mask
+ {
+ public Light light { get; set; }
+ public int location { get; set; }
+ }
+
+ [MoonSharpUserData]
+ public class Light
+ {
+ public Color color { get; set; }
+ }
+
+ [MoonSharpUserData]
+ public class Color
+ {
+ public int brightness { get; set; }
+ public int red { get; set; }
+ public int green { get; set; }
+ public int blue { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/Artemis/Artemis/Modules/Games/LightFx/LightFxDataModel.cs b/Artemis/Artemis/Modules/Games/LightFx/LightFxDataModel.cs
index 0807b5eca..aa86630e2 100644
--- a/Artemis/Artemis/Modules/Games/LightFx/LightFxDataModel.cs
+++ b/Artemis/Artemis/Modules/Games/LightFx/LightFxDataModel.cs
@@ -1,15 +1,19 @@
using Artemis.Models.Interfaces;
+using Artemis.Modules.Games.LightFx.Data;
using MoonSharp.Interpreter;
+using Newtonsoft.Json;
namespace Artemis.Modules.Games.LightFx
{
[MoonSharpUserData]
public class LightFxDataModel : IDataModel
{
+ [JsonProperty(PropertyName = "lightFxState")]
+ public LightFxState LightFxState { get; set; }
+
public LightFxDataModel()
{
-
+ LightFxState = new LightFxState();
}
-
}
}
\ No newline at end of file
diff --git a/Artemis/Artemis/Modules/Games/LightFx/LightFxModel.cs b/Artemis/Artemis/Modules/Games/LightFx/LightFxModel.cs
index 2b1cd4835..143c5eb34 100644
--- a/Artemis/Artemis/Modules/Games/LightFx/LightFxModel.cs
+++ b/Artemis/Artemis/Modules/Games/LightFx/LightFxModel.cs
@@ -1,16 +1,19 @@
using System;
using System.Collections.Generic;
+using System.IO;
using Artemis.DAL;
using Artemis.Managers;
using Artemis.Models;
using Artemis.Profiles.Layers.Models;
+using Artemis.Utilities.DataReaders;
using Artemis.Utilities.GameState;
+using Newtonsoft.Json;
namespace Artemis.Modules.Games.LightFx
{
public class LightFxModel : GameModel
{
- public LightFxModel(DeviceManager deviceManager, GameStateWebServer gameStateWebServer)
+ public LightFxModel(DeviceManager deviceManager, PipeServer pipeServer)
: base(deviceManager, SettingsProvider.Load(), new LightFxDataModel())
{
Name = "LightFX";
@@ -20,20 +23,28 @@ namespace Artemis.Modules.Games.LightFx
Initialized = false;
// This model can enable itself by changing its process name to the currently running Light FX game.
- gameStateWebServer.GameDataReceived += GameStateWebServerOnGameDataReceived;
+ pipeServer.PipeMessage += PipeServerOnPipeMessage;
}
- private void GameStateWebServerOnGameDataReceived(object sender, GameDataReceivedEventArgs e)
+ private void PipeServerOnPipeMessage(string msg)
{
- var jsonString = e.Json.ToString();
// Ensure it's Light FX JSON
- if (!jsonString.Contains("lightFxState"))
+ if (!msg.Contains("lightFxState"))
return;
// Deserialize and data
+ try
+ {
+ JsonConvert.PopulateObject(msg, DataModel);
+ }
+ catch (Exception ex)
+ {
+ Logger?.Error(ex, "Failed to deserialize LightFX JSON");
+ throw;
+ }
// Setup process name
-
+ ProcessName = Path.GetFileNameWithoutExtension(((LightFxDataModel)DataModel).LightFxState.game);
}
public int Scale { get; set; }
diff --git a/Artemis/LightFX2Artemis/LightFxState.cpp b/Artemis/LightFX2Artemis/LightFxState.cpp
index abd02c572..263d0f64e 100644
--- a/Artemis/LightFX2Artemis/LightFxState.cpp
+++ b/Artemis/LightFX2Artemis/LightFxState.cpp
@@ -20,14 +20,11 @@ LightFxState::~LightFxState()
json LightFxState::GetJson()
{
- json root;
json j;
- root["lightFxState"] = { j };
-
j["game"] = Game;
j["mask"] = {
- { "location", LocationMask },
- { "light", LocationMaskLight->GetJson() }
+ {"location", LocationMask},
+ {"light", LocationMaskLight->GetJson()}
};
j["devices"] = {};
for (LightFxDevice* device : Devices)
@@ -35,5 +32,5 @@ json LightFxState::GetJson()
j["devices"].push_back(device->GetJson());
}
- return j;
+ return json{{"lightFxState", j}};
}
diff --git a/Artemis/LightFX2Artemis/Source.cpp b/Artemis/LightFX2Artemis/Source.cpp
index 5da496bc8..fe3ba36b2 100644
--- a/Artemis/LightFX2Artemis/Source.cpp
+++ b/Artemis/LightFX2Artemis/Source.cpp
@@ -80,8 +80,8 @@ FN_DECLSPEC LFX_RESULT STDCALL LFX_Update()
Transmit(j.dump().c_str());
// Only bother dumping it indented if actually debugging
- if (FILELog::ReportingLevel() == logDEBUG1)
- FILE_LOG(logDEBUG1) << "JSON: " << j.dump(4);
+ if (FILELog::ReportingLevel() == logDEBUG1)
+ FILE_LOG(logDEBUG1) << "JSON: " << j.dump(4);
return LFX_SUCCESS;
}