/// <summary> /// Build RelayData objects to send to clients. Show the on/off status of indivudal relays. Also the on/off masks associated with them. /// </summary> /// <param name="binaryOnOffStatus">The string representation of the on/off status of all 8 relays in reverse order. (ex. 11010011)</param> /// <param name="binaryMaskOnStatuses">The string representation of the Mask On status of all 8 relays in reverse order. (ex. 11010011)</param> /// <param name="binaryMaskOffStatuses">The string representation of the Mask Off status of all 8 relays in reverse order. (ex. 11010011)</param> private void BuildRelayStatuses(string binaryOnOffStatus,string binaryMaskOnStatuses, string binaryMaskOffStatuses) { currentRelayData = new ReefAngelRelayData(); string orderedBinaryRelayData, orderedBinaryMaskOnData, orderedBinaryMaskOffData; char[] arr = binaryOnOffStatus.ToCharArray(); Array.Reverse(arr); orderedBinaryRelayData = new string(arr); currentRelayData.Relay1On = orderedBinaryRelayData[0] == '0' ? false : true; currentRelayData.Relay2On = orderedBinaryRelayData[1] == '0' ? false : true; currentRelayData.Relay3On = orderedBinaryRelayData[2] == '0' ? false : true; currentRelayData.Relay4On = orderedBinaryRelayData[3] == '0' ? false : true; currentRelayData.Relay5On = orderedBinaryRelayData[4] == '0' ? false : true; currentRelayData.Relay6On = orderedBinaryRelayData[5] == '0' ? false : true; currentRelayData.Relay7On = orderedBinaryRelayData[6] == '0' ? false : true; currentRelayData.Relay8On = orderedBinaryRelayData[7] == '0' ? false : true; //TODO: Incomplete binary data for the On/Off masks is coming back from ReefAngel Controller. Need to identify how the data //is sent from controller - parse it and populte the following code belowing. //arr = binaryMaskOnStatuses.ToCharArray(); //Array.Reverse(arr); //orderedBinaryMaskOnData = new string(arr); //currentRelayData.Relay1MaskOn = orderedBinaryMaskOnData[0] == '0' ? false : true; //currentRelayData.Relay2MaskOn = orderedBinaryMaskOnData[1] == '0' ? false : true; //currentRelayData.Relay3MaskOn = orderedBinaryMaskOnData[2] == '0' ? false : true; //currentRelayData.Relay4MaskOn = orderedBinaryMaskOnData[3] == '0' ? false : true; //currentRelayData.Relay5MaskOn = orderedBinaryMaskOnData[4] == '0' ? false : true; //currentRelayData.Relay6MaskOn = orderedBinaryMaskOnData[5] == '0' ? false : true; //currentRelayData.Relay7MaskOn = orderedBinaryMaskOnData[6] == '0' ? false : true; //currentRelayData.Relay8MaskOn = orderedBinaryMaskOnData[7] == '0' ? false : true; //arr = binaryMaskOffStatuses.ToCharArray(); //Array.Reverse(arr); //orderedBinaryMaskOffData = new string(arr); //currentRelayData.Relay1MaskOff = orderedBinaryMaskOffData[0] == '0' ? false : true; //currentRelayData.Relay2MaskOff = orderedBinaryMaskOffData[1] == '0' ? false : true; //currentRelayData.Relay3MaskOff = orderedBinaryMaskOffData[2] == '0' ? false : true; //currentRelayData.Relay4MaskOff = orderedBinaryMaskOffData[3] == '0' ? false : true; //currentRelayData.Relay5MaskOff = orderedBinaryMaskOffData[4] == '0' ? false : true; //currentRelayData.Relay6MaskOff = orderedBinaryMaskOffData[5] == '0' ? false : true; //currentRelayData.Relay7MaskOff = orderedBinaryMaskOffData[6] == '0' ? false : true; //currentRelayData.Relay8MaskOff = orderedBinaryMaskOffData[7] == '0' ? false : true; }
/// <summary> /// Iterate through current client list and invoke their HandleRelayData with latest relay parameters. /// </summary> /// <param name="relayData">The current relay data params</param> public void SendRelayData(ReefAngelRelayData relayData) { ThreadPool.QueueUserWorkItem ( delegate { lock (clients) { List<Guid> disconnectedClientGuids = new List<Guid>(); foreach (KeyValuePair<Guid, IReefAngelCallback> client in clients) { try { client.Value.HandleRelayData(relayData); } catch (Exception) { // There is a number of reasons an exception can occur here. // The server might not be able to connect to client b/c of network error, // early client terminiation w/out being able to unsubscribe first or comms object is killed. // No matter the case - mark the client key for removal. disconnectedClientGuids.Add(client.Key); } } foreach (Guid clientGuid in disconnectedClientGuids) { clients.Remove(clientGuid); } } } ); }