mirror of
https://github.com/PepperDash/Essentials.git
synced 2026-02-15 12:44:58 +00:00
Added action type to handle press and hold button models
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -23,8 +23,8 @@ namespace PepperDash.Essentials
|
|||||||
// Source Changes and room off
|
// Source Changes and room off
|
||||||
Parent.AddAction(string.Format(@"/room/{0}/status",Room.Key), new Action(() => Room_RoomFullStatus(Room)));
|
Parent.AddAction(string.Format(@"/room/{0}/status",Room.Key), new Action(() => Room_RoomFullStatus(Room)));
|
||||||
Parent.AddAction(string.Format(@"/room/{0}/source", Room.Key), new Action<SourceSelectMessageContent>(c => room.RunRouteAction(c.SourceSelect)));
|
Parent.AddAction(string.Format(@"/room/{0}/source", Room.Key), new Action<SourceSelectMessageContent>(c => room.RunRouteAction(c.SourceSelect)));
|
||||||
Parent.AddAction(string.Format(@"/room/{0}/event/masterVolumeUpBtn", Room.Key), new Action<bool>(b => room.CurrentVolumeControls.VolumeUp(b)));
|
Parent.AddAction(string.Format(@"/room/{0}/event/masterVolumeUpBtn", Room.Key), new PressAndHoldAction(b => room.CurrentVolumeControls.VolumeUp(b)));
|
||||||
Parent.AddAction(string.Format(@"/room/{0}/event/masterVolumeDownBtn", Room.Key), new Action<bool>(b => room.CurrentVolumeControls.VolumeDown(b)));
|
Parent.AddAction(string.Format(@"/room/{0}/event/masterVolumeDownBtn", Room.Key), new PressAndHoldAction(b => room.CurrentVolumeControls.VolumeDown(b)));
|
||||||
Parent.AddAction(string.Format(@"/room/{0}/event/muteToggle", Room.Key), new Action(() => room.CurrentVolumeControls.MuteToggle()));
|
Parent.AddAction(string.Format(@"/room/{0}/event/muteToggle", Room.Key), new Action(() => room.CurrentVolumeControls.MuteToggle()));
|
||||||
|
|
||||||
Room.CurrentSingleSourceChange += new SourceInfoChangeHandler(Room_CurrentSingleSourceChange);
|
Room.CurrentSingleSourceChange += new SourceInfoChangeHandler(Room_CurrentSingleSourceChange);
|
||||||
@@ -202,25 +202,6 @@ namespace PepperDash.Essentials
|
|||||||
public string SourceSelect { get; set; }
|
public string SourceSelect { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
//public class PostMessage
|
public delegate void PressAndHoldAction(bool b);
|
||||||
//{
|
|
||||||
// [JsonProperty("type")]
|
|
||||||
// public string Type { get; set; }
|
|
||||||
|
|
||||||
// [JsonProperty("content")]
|
|
||||||
// public JToken Content { get; set; }
|
|
||||||
//}
|
|
||||||
|
|
||||||
//public class RoomStatusMessageContent
|
|
||||||
//{
|
|
||||||
// [JsonProperty("selectedSourceKey")]
|
|
||||||
// public string SelectedSourceKey { get; set; }
|
|
||||||
// [JsonProperty("isOn")]
|
|
||||||
// public bool? IsOn { get; set; }
|
|
||||||
// [JsonProperty("masterVolumeLevel")]
|
|
||||||
// public int? MasterVolumeLevel { get; set; }
|
|
||||||
// [JsonProperty("masterVolumeMuteState")]
|
|
||||||
// public bool? MasterVolumeMuteState { get; set; }
|
|
||||||
//}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -24,22 +24,28 @@ namespace PepperDash.Essentials
|
|||||||
|
|
||||||
HttpClient Client;
|
HttpClient Client;
|
||||||
|
|
||||||
Dictionary<string, Object> ActionDictionary;
|
Dictionary<string, Object> ActionDictionary = new Dictionary<string, Object>();
|
||||||
|
|
||||||
CTimer Heartbeat;
|
Dictionary<string, CTimer> PushedActions = new Dictionary<string, CTimer>();
|
||||||
|
|
||||||
CTimer Reconnect;
|
CTimer ServerHeartbeat;
|
||||||
|
|
||||||
|
long ServerHeartbeatInterval = 20000;
|
||||||
|
|
||||||
|
CTimer ServerReconnect;
|
||||||
|
|
||||||
|
long ServerReconnectInterval = 5000;
|
||||||
|
|
||||||
string SystemUuid;
|
string SystemUuid;
|
||||||
|
|
||||||
public List<CotijaEssentialsHuddleSpaceRoomBridge> CotijaRooms { get; private set; }
|
public List<CotijaEssentialsHuddleSpaceRoomBridge> CotijaRooms { get; private set; }
|
||||||
|
|
||||||
|
long ButtonHeartbeatInterval = 1000;
|
||||||
|
|
||||||
public CotijaSystemController(string key, string name, CotijaConfig config) : base(key, name)
|
public CotijaSystemController(string key, string name, CotijaConfig config) : base(key, name)
|
||||||
{
|
{
|
||||||
Config = config;
|
Config = config;
|
||||||
|
|
||||||
ActionDictionary = new Dictionary<string, Object>();
|
|
||||||
|
|
||||||
CotijaRooms = new List<CotijaEssentialsHuddleSpaceRoomBridge>();
|
CotijaRooms = new List<CotijaEssentialsHuddleSpaceRoomBridge>();
|
||||||
|
|
||||||
CrestronConsole.AddNewConsoleCommand(RegisterSystemToServer, "InitializeHttpClient", "Initializes a new HTTP client connection to a specified URL", ConsoleAccessLevelEnum.AccessOperator);
|
CrestronConsole.AddNewConsoleCommand(RegisterSystemToServer, "InitializeHttpClient", "Initializes a new HTTP client connection to a specified URL", ConsoleAccessLevelEnum.AccessOperator);
|
||||||
@@ -177,7 +183,7 @@ namespace PepperDash.Essentials
|
|||||||
|
|
||||||
Client.DispatchAsync(request, (r, err) => { if (r != null) { Debug.Console(1, this, "Status Response Code: {0}", r.Code); } });
|
Client.DispatchAsync(request, (r, err) => { if (r != null) { Debug.Console(1, this, "Status Response Code: {0}", r.Code); } });
|
||||||
|
|
||||||
StartReconnectTimer(5000, 5000);
|
StartReconnectTimer(ServerReconnectInterval, ServerReconnectInterval);
|
||||||
}
|
}
|
||||||
catch(Exception e)
|
catch(Exception e)
|
||||||
{
|
{
|
||||||
@@ -194,11 +200,11 @@ namespace PepperDash.Essentials
|
|||||||
if(SseClient != null)
|
if(SseClient != null)
|
||||||
SseClient.Disconnect();
|
SseClient.Disconnect();
|
||||||
|
|
||||||
if (Heartbeat != null)
|
if (ServerHeartbeat != null)
|
||||||
{
|
{
|
||||||
Heartbeat.Stop();
|
ServerHeartbeat.Stop();
|
||||||
|
|
||||||
Heartbeat = null;
|
ServerHeartbeat = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -213,11 +219,11 @@ namespace PepperDash.Essentials
|
|||||||
{
|
{
|
||||||
if (resp != null && resp.Code == 200)
|
if (resp != null && resp.Code == 200)
|
||||||
{
|
{
|
||||||
if(Reconnect != null)
|
if(ServerReconnect != null)
|
||||||
{
|
{
|
||||||
Reconnect.Stop();
|
ServerReconnect.Stop();
|
||||||
|
|
||||||
Reconnect = null;
|
ServerReconnect = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SseClient == null)
|
if (SseClient == null)
|
||||||
@@ -242,24 +248,24 @@ namespace PepperDash.Essentials
|
|||||||
/// <param name="o"></param>
|
/// <param name="o"></param>
|
||||||
void HeartbeatExpired(object o)
|
void HeartbeatExpired(object o)
|
||||||
{
|
{
|
||||||
if (Heartbeat != null)
|
if (ServerHeartbeat != null)
|
||||||
{
|
{
|
||||||
Debug.Console(1, this, "Heartbeat Timer Expired.");
|
Debug.Console(1, this, "Heartbeat Timer Expired.");
|
||||||
|
|
||||||
Heartbeat.Stop();
|
ServerHeartbeat.Stop();
|
||||||
|
|
||||||
Heartbeat = null;
|
ServerHeartbeat = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
StartReconnectTimer(5000, 5000);
|
StartReconnectTimer(ServerReconnectInterval, ServerReconnectInterval);
|
||||||
}
|
}
|
||||||
|
|
||||||
void StartReconnectTimer(long dueTime, long repeatTime)
|
void StartReconnectTimer(long dueTime, long repeatTime)
|
||||||
{
|
{
|
||||||
// Start the reconnect timer
|
// Start the reconnect timer
|
||||||
Reconnect = new CTimer(ReconnectToServer, null, dueTime, repeatTime);
|
ServerReconnect = new CTimer(ReconnectToServer, null, dueTime, repeatTime);
|
||||||
|
|
||||||
Reconnect.Reset(dueTime, repeatTime);
|
ServerReconnect.Reset(dueTime, repeatTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -313,15 +319,15 @@ namespace PepperDash.Essentials
|
|||||||
|
|
||||||
if (type == "hello")
|
if (type == "hello")
|
||||||
{
|
{
|
||||||
Heartbeat = new CTimer(HeartbeatExpired, null, 20000, 20000);
|
ServerHeartbeat = new CTimer(HeartbeatExpired, null, ServerHeartbeatInterval, ServerHeartbeatInterval);
|
||||||
|
|
||||||
Debug.Console(2, this, "Heartbeat Timer Started.");
|
Debug.Console(2, this, "Heartbeat Timer Started.");
|
||||||
|
|
||||||
Heartbeat.Reset(20000, 20000);
|
ServerHeartbeat.Reset(ServerHeartbeatInterval, ServerHeartbeatInterval);
|
||||||
}
|
}
|
||||||
else if (type == "/system/heartbeat")
|
else if (type == "/system/heartbeat")
|
||||||
{
|
{
|
||||||
Heartbeat.Reset(20000, 20000);
|
ServerHeartbeat.Reset(ServerHeartbeatInterval, ServerHeartbeatInterval);
|
||||||
|
|
||||||
Debug.Console(2, this, "Heartbeat Timer Reset.");
|
Debug.Console(2, this, "Heartbeat Timer Reset.");
|
||||||
}
|
}
|
||||||
@@ -330,9 +336,9 @@ namespace PepperDash.Essentials
|
|||||||
SseClient.Disconnect();
|
SseClient.Disconnect();
|
||||||
|
|
||||||
// Start the reconnect timer
|
// Start the reconnect timer
|
||||||
Reconnect = new CTimer(ConnectSseClient, null, 5000, 5000);
|
ServerReconnect = new CTimer(ConnectSseClient, null, ServerReconnectInterval, ServerReconnectInterval);
|
||||||
|
|
||||||
Reconnect.Reset(5000, 5000);
|
ServerReconnect.Reset(ServerReconnectInterval, ServerReconnectInterval);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -345,20 +351,59 @@ namespace PepperDash.Essentials
|
|||||||
{
|
{
|
||||||
(action as Action)();
|
(action as Action)();
|
||||||
}
|
}
|
||||||
else if (action is Action<bool>)
|
else if (action is PressAndHoldAction)
|
||||||
{
|
{
|
||||||
var stateString = messageObj["content"]["state"].Value<string>();
|
var stateString = messageObj["content"]["state"].Value<string>();
|
||||||
|
|
||||||
// Look for a button press event
|
// Look for a button press event
|
||||||
if (!string.IsNullOrEmpty(stateString))
|
if (!string.IsNullOrEmpty(stateString))
|
||||||
{
|
{
|
||||||
#warning deal with held state later
|
switch (stateString)
|
||||||
if (stateString == "held")
|
{
|
||||||
return;
|
case "true":
|
||||||
|
{
|
||||||
|
if (!PushedActions.ContainsKey(type))
|
||||||
|
{
|
||||||
|
PushedActions.Add(type, new CTimer(o =>
|
||||||
|
{
|
||||||
|
(action as Action<bool>)(false);
|
||||||
|
PushedActions.Remove(type);
|
||||||
|
}, null, ButtonHeartbeatInterval, ButtonHeartbeatInterval));
|
||||||
|
}
|
||||||
|
// Maybe add an else to reset the timer
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "held":
|
||||||
|
{
|
||||||
|
if (!PushedActions.ContainsKey(type))
|
||||||
|
{
|
||||||
|
PushedActions[type].Reset(ButtonHeartbeatInterval, ButtonHeartbeatInterval);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
case "false":
|
||||||
|
{
|
||||||
|
if (!PushedActions.ContainsKey(type))
|
||||||
|
{
|
||||||
|
PushedActions[type].Stop();
|
||||||
|
PushedActions.Remove(type);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
(action as Action<bool>)(stateString == "true");
|
(action as Action<bool>)(stateString == "true");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (action is Action<bool>)
|
||||||
|
{
|
||||||
|
var stateString = messageObj["content"]["state"].Value<string>();
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(stateString))
|
||||||
|
{
|
||||||
|
(action as Action<bool>)(stateString == "true");
|
||||||
|
}
|
||||||
|
}
|
||||||
else if (action is Action<ushort>)
|
else if (action is Action<ushort>)
|
||||||
{
|
{
|
||||||
(action as Action<ushort>)(messageObj["content"]["value"].Value<ushort>());
|
(action as Action<ushort>)(messageObj["content"]["value"].Value<ushort>());
|
||||||
|
|||||||
Reference in New Issue
Block a user