public void ChangeStates(HubChangeStates states) { if (!string.IsNullOrEmpty(_homeHubSocket.HomeHubId)) { foreach(var state in states.States) { var changed = _hubStateRepository.SetState(_homeHubSocket.HomeHubId, state.Name, state.Active); if (changed) { string severity = _priorityStates.Contains(state.Name) ? "Priority" : "Info"; string logMessage = string.Format("{0} changed to {1}", state.Name, state.Active ? "Active" : "Inactive"); if (!string.IsNullOrEmpty(state.Node)) { logMessage = string.Format("{0} > {1}", logMessage, state.Node); } if (!string.IsNullOrEmpty(state.Rule)) { logMessage = string.Format("{0} | {1}", logMessage, state.Rule); } _logRepository.LogEntry(_homeHubSocket.HomeHubId, severity, logMessage); if (_alertStates.Keys.Contains(state.Name)) { ClearTimerUpdates(); if (state.Active) { var timerStates = new HubChangeStates { States = new HubChangeState[] { new HubChangeState { Name = state.Name, Active = false }, new HubChangeState { Name = _alertStates[state.Name], Active = true } } }; AddTimerUpdate(timerStates, AlertToAlarmMS); } } if (_notificationStates.Contains(state.Name)) { // Send a notification to devices _statusNotification.Send(_homeHubSocket.HomeHubId, state.Name, state.Active, state.Node, state.Rule); } } } _homeHubSocket.ChatHub.MessageToClients(states); } }
private void SendInitialStates(string homeHubId) { using (var hubStateRepository = new HubStateRepository()) { var hubStates = hubStateRepository.GetAllForHub(homeHubId); var messageStates = new HubChangeStates { States = hubStates.Select((s) => new HubChangeState { Name = s.Name, Active = s.Active }).ToArray() }; SendMessage(messageStates); } }
private void AddTimerUpdate(HubChangeStates states, int milliseconds) { lock(_timerUpdates) { _timerUpdates[_homeHubSocket.HomeHubId] = new ChangeStatesTimerUpdate(_homeHubSocket, states, milliseconds); } }
public ChangeStatesTimerUpdate(IHomeHubSocket homeHubSocket, HubChangeStates states, int milliseconds) { _homeHubSocket = homeHubSocket; _states = states; _timer = new Timer(new TimerCallback(Execute), null, milliseconds, Timeout.Infinite); }