public MCUDevice(string _ipAddress, int _port, Enums.EnumDeviceType _deviceType) : base(_ipAddress, _port) { this.remoteDeviceId = 0; this.configId = 0; this.remoteDeviceId = 0; this.deviceType = _deviceType; }
public override async Task <WebSocketConnection> OnConnected(HttpContext context) { var name = context.Request.Query["Name"]; string deviceType = context.Request.Query["DeviceType"]; var clientIP = context.Connection.RemoteIpAddress.ToString(); _logger.LogInformation($"OnConnected({clientIP}) DeviceType: {deviceType}"); if (!string.IsNullOrEmpty(name)) { int iDevType; if (!Int32.TryParse(deviceType, out iDevType)) { _logger.LogError($"OnConnected({clientIP}) Envalid DeviceType: {deviceType}"); return(null); } Enums.EnumDeviceType devType = (Enums.EnumDeviceType)iDevType; //var connection = Connections.FirstOrDefault(m => ((RFSocketConnection)m).NickName == name); var connection = Connections.FirstOrDefault(m => m.NickName == name && m.DeviceType == devType); if (connection != null) { if (connection.WebSocket.State == WebSocketState.Aborted) { _logger.LogWarning($"OnConnected({clientIP}) Existing Connection State is {connection.WebSocket.State} so Disposing it."); Connections.Remove(connection); connection.WebSocket.Dispose(); connection = null; } else { _logger.LogInformation($"OnConnected({clientIP}) Using existing {devType} Connection"); return(connection); } } var webSocket = await context.WebSockets.AcceptWebSocketAsync(); _logger.LogInformation($"OnConnected({clientIP}) Newing up {devType} Connection."); switch (devType) { //RFSwitch, HS100, CeilingFan, Speed, Motion, Relay case Enums.EnumDeviceType.Relay: connection = new RelaySocketConnection(this) { NickName = name, DeviceType = devType, WebSocket = webSocket }; foreach (var relay in relayDevices.Where(s => s.mcu != null && s.mcu.ipAddress == name && s.deviceType == Enums.EnumDeviceType.Relay)) { relay.setWebSocketConnection(0, connection); //relay.mcu.connection = connection; //connection.mcuList.Add(relay.mcu); //connection.mcu = relay.mcu; } break; case Enums.EnumDeviceType.Motion: connection = new PIRSocketConnection(this) { NickName = name, DeviceType = devType, WebSocket = webSocket }; foreach (var pir in pirDevices.Where(s => s.mcu != null && s.mcu.ipAddress == name && s.deviceType == Enums.EnumDeviceType.Motion)) { pir.setWebSocketConnection(0, connection); //pir.mcu.connection = connection; //connection.mcuList.Add(pir.mcu); } break; case Enums.EnumDeviceType.RFSwitch: connection = new RFSocketConnection(this) { NickName = name, DeviceType = devType, WebSocket = webSocket }; foreach (var sw in rfSwitches) { sw.setWebSocketConnection(0, connection); //var mcu = sw.slaves.Where(s => s.ipAddress == name && s.deviceType == Enums.EnumDeviceType.RFSwitch).FirstOrDefault(); // if (mcu != null) // { // sw.setWebSocketConnection(0, connection); // mcu.connection = connection; // connection.mcuList.Add(mcu); // } } break; default: _logger.LogInformation($"OnConnected({clientIP}) Unhandled MCU name: {name}"); break; } Connections.Add(connection); return(connection); } _logger.LogError($"OnConnected({clientIP}) Request missing Name parameter."); return(null); }
public HomeControlDevice(Enums.ControlledAreas area, /*int localDeviceId,*/ string deviceName, string mcuIpAddress, Enums.EnumDeviceType deviceType) { this.area = area; this.localDeviceId = HomeControlDevice.getNextDeviceId(); this.deviceName = deviceName; this.deviceType = deviceType; this.mcu = new MCUDevice(mcuIpAddress, 80, deviceType); }