예제 #1
0
 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;
 }
예제 #2
0
        /// <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);
            }
        }