private void setSensorEventHandler(BerrySensor sensor, Log log, BerryMonitorControl monitor, BerryDevice device ) { if (sensor == null || monitor == null || device == null) return; sensor.ConnectionClosed = connectionClosed; /*Sensor交给monitor显示的状态*/ sensor.OnHR += monitor.OnHR; sensor.OnST += monitor.OnST; sensor.OnLead += monitor.OnLead; sensor.OnEcgStatus += monitor.OnEcgStatus; sensor.OnEcgGain += monitor.OnEcgGain; sensor.OnEcgMode += monitor.OnEcgMode; sensor.OnSpo2 += monitor.OnSpo2; sensor.OnPR += monitor.OnPR; sensor.OnSpo2Signal += monitor.OnSpo2Signal; sensor.OnSpo2Status += monitor.OnSpo2Status; sensor.OnSys += monitor.OnSys; sensor.OnDia += monitor.OnDia; sensor.OnMean += monitor.OnMean; sensor.OnCuff += monitor.OnCuff; sensor.OnNibpMode += monitor.OnNibpMode; sensor.OnNibpType += monitor.OnNibpType; sensor.OnNibpStatus += monitor.OnNibpStatus; sensor.OnResp += monitor.OnResp; sensor.OnTemp += monitor.OnTemp; sensor.OnEcgWave += monitor.OnEcgWave; sensor.OnSpo2Wave += monitor.OnSpo2Wave; sensor.OnRespWave += monitor.OnRespWave; /*Sensor交给log记录的信息*/ sensor.OnEcgWave += log.AddEcg; //sensor.OnSpo2Wave += log.AddData; //暂不记录血氧波形和呼吸波形 //sensor.OnRespWave += log.AddData; /*Sensor交给device保存的设置信息*/ sensor.OnLead += device.OnLead; sensor.OnEcgMode += device.OnEcgMode; sensor.OnEcgGain += device.OnEcgGain; sensor.OnRespGain += device.OnRespGain; //sensor.OnNibpType += device.OnNibpType; //sensor.OnNibpMode += device.OnNibpMode; /*Device交给sensor处理的设置*/ device.EcgConfig += sensor.SendEcgConfig; device.RespConfig += sensor.SendRespConfig; device.NibpConfig += sensor.OnNibpConfig; /*Monitor交给sensor处理的控制*/ monitor.StartNibpEvent += sensor.SendNibpStart; monitor.StopNibpEvent += sensor.SendNibpStop; /*Device交给monitor处理的报警阈值设置*/ device.HrThresholdConfig += monitor.OnHrAlarmThreshold; device.Spo2ThresholdConfig += monitor.OnSpo2AlarmThreshold; device.RespThresholdConfig += monitor.OnRespAlarmThreshold; /*Monitor交给Main*/ monitor.PlayAlarm += this.PlayAlarmSound; monitor.StopAlarm += this.StopAlarmSound; }
/// <summary> /// 监听客户端连接 /// </summary> private void listenClient() { while (true && Thread.CurrentThread.IsAlive) { Socket clientSocket = _serverSocket.Accept(); String clientIP = ((IPEndPoint)clientSocket.RemoteEndPoint).Address.ToString(); //设置KeepAlive,使其对设备断开更灵敏 uint dummy = 0; byte[] inOptionValues = new byte[Marshal.SizeOf(dummy) * 3]; BitConverter.GetBytes((uint)1).CopyTo(inOptionValues, 0); BitConverter.GetBytes((uint)1000).CopyTo(inOptionValues, Marshal.SizeOf(dummy)); BitConverter.GetBytes((uint)100).CopyTo(inOptionValues, Marshal.SizeOf(dummy) * 2); clientSocket.IOControl(IOControlCode.KeepAliveValues, inOptionValues, null); //根据IP找显示控件 BerryMonitorControl monitor = getMonitor(clientIP); if (monitor == null) { setStatus("收到未知设备连接请求:" + clientIP + ",请先配置",2000); clientSocket.Shutdown(SocketShutdown.Both); clientSocket.Close(); continue; } //创建传感器事件处理对象 BerrySensor sensor = new BerrySensor(); _sensors.Add(clientIP, sensor); //找到管理对象 BerryDevice device = getDevice(clientIP); //创建记录器对象 Log log = new Log(clientIP,device.Name); _logs.Add(clientIP, log); //设置句柄 setSensorEventHandler(sensor, log, monitor, device); monitor.OnConnect(); Thread receiveThread = new Thread(sensor.RecvPacket); receiveThread.Start(clientSocket); } }